@@ -29,11 +29,15 @@ it("should get class from parent element", async ({ browser }) => {
const elem = await browser.$$("p");
const parent = await elem[2].parentElement();
- console.log(await parent.getAttribute("class")); // выведет: "parent"
+ console.log(await parent.getAttribute("class")); // outputs: "parent"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [previousElement](../previousElement)
- [nextElement](../nextElement)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/parentElement), from which we drew some information while writing our version.
diff --git a/docs/commands/element/previousElement.mdx b/docs/commands/element/previousElement.mdx
index cbba905..a512a0d 100644
--- a/docs/commands/element/previousElement.mdx
+++ b/docs/commands/element/previousElement.mdx
@@ -1,20 +1,20 @@
# previousElement
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `previousElement`, чтобы получить предыдущий дочерний элемент выбранного DOM-элемента.
+Use the `previousElement` command to get the previous sibling element of the selected DOM element.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).previousElement();
```
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**index.html**
-```javascript
+```html
Sibling One
Sibling Two
@@ -29,11 +29,15 @@ it("should get text from previous sibling element", async ({ browser }) => {
const elem = await browser.$$("p");
const previousElement = await elem[1].previousElement();
- console.log(await previousElement.getText()); // выведет: "Sibling One"
+ console.log(await previousElement.getText()); // outputs: "Sibling One"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [parentElement](../parentElement)
- [nextElement](../nextElement)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/previousElement), from which we drew some information while writing our version.
diff --git a/docs/commands/element/reactDollar.mdx b/docs/commands/element/reactDollar.mdx
index fd77f1a..bbe9d8f 100644
--- a/docs/commands/element/reactDollar.mdx
+++ b/docs/commands/element/reactDollar.mdx
@@ -2,38 +2,38 @@ import Admonition from "@theme/Admonition";
# react$
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `react$`, чтобы найти на странице React-компоненты по их настоящему имени, одновременно фильтруя их по props'ам и состоянию.
+Use the `react$` command to find React components on the page by their actual name, while filtering them by props and state.
-Команда _react$_ работает только в приложениях, которые используют _React v16.x._
+The _react$_ command only works in applications that use _React v16.x._
-Читайте больше о React-селекторах в рецепте «[Как использовать селекторы][how-to-use-selectors]».
+Read more about React selectors in the recipe "[How to use selectors][how-to-use-selectors]".
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).react$(reactComponentSelector, { props, state });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-reactComponentSelector String Селектор React-компонента.
-props Object React-свойства, которые должен иметь компонент.
-state Any или Any[] React-состояние, в котором должен находиться компонент.
+reactComponentSelector String The React component selector.
+props Object React properties the component should have.
+state Any or Any[] React state the component should be in.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should calculate 7 * 6", async ({ browser }) => {
@@ -64,14 +64,18 @@ it("should calculate 7 * 6", async ({ browser }) => {
})
.click();
- console.log(await browser.$(".component-display").getText()); // выведет: "42"
+ console.log(await browser.$(".component-display").getText()); // outputs: "42"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [browser.react$](../../browser/reactDollar)
- [browser.react$$](../../browser/reactDollarDollar)
- [element.react$$](../reactDollarDollar)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/react$), from which we drew some information while writing our version.
+
[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/docs/commands/element/reactDollarDollar.mdx b/docs/commands/element/reactDollarDollar.mdx
index b08f203..acbc36b 100644
--- a/docs/commands/element/reactDollarDollar.mdx
+++ b/docs/commands/element/reactDollarDollar.mdx
@@ -2,38 +2,38 @@ import Admonition from "@theme/Admonition";
# react$$
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `react$$`, чтобы найти на странице множество React-компонентов по их настоящему имени, одновременно фильтруя их по props'ам и состоянию.
+Use the `react$$` command to find multiple React components on the page by their actual name, while filtering them by props and state.
-Команда _react$_ работает только в приложениях, которые используют _React v16.x._
+The _react$_ command only works in applications that use _React v16.x._
-Читайте больше о React-селекторах в рецепте «[Как использовать селекторы][how-to-use-selectors]».
+Read more about React selectors in the recipe "[How to use selectors][how-to-use-selectors]".
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.react$$(reactComponentSelector, { props, state });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-reactComponentSelector String Селектор React-компонента.
-props Object React-свойства, которые должен иметь компонент.
-state Any или Any[] React-состояние, в котором должен находиться компонент.
+reactComponentSelector String The React component selector.
+props Object React properties the component should have.
+state Any or Any[] React state the component should be in.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should calculate 7 * 6", async ({ browser }) => {
@@ -45,14 +45,18 @@ it("should calculate 7 * 6", async ({ browser }) => {
});
console.log(await Promise.all(orangeButtons.map(btn => btn.getText())));
- // выведет: "[ '÷', 'x', '-', '+', '=' ]"
+ // outputs: "[ '÷', 'x', '-', '+', '=' ]"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [browser.react$](../../browser/reactDollar)
- [browser.react$$](../../browser/reactDollarDollar)
- [element.react$](../reactDollar)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/react$$), from which we drew some information while writing our version.
+
[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/docs/commands/element/saveScreenshot.mdx b/docs/commands/element/saveScreenshot.mdx
index 5abeb1e..781a626 100644
--- a/docs/commands/element/saveScreenshot.mdx
+++ b/docs/commands/element/saveScreenshot.mdx
@@ -1,28 +1,28 @@
# saveScreenshot
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `saveScreenshot`, чтобы сохранить скриншот элемента в png-файл.
+Use the `saveScreenshot` command to save a screenshot of an element to a PNG file.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).saveScreenshot(filepath);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-filepath String Путь к скриншоту относительно каталога выполнения (расширение .png — обязательно).
+filepath String The path to the screenshot relative to the execution directory (the .png extension is mandatory).
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should save a screenshot of the browser view", async ({ browser }) => {
@@ -30,3 +30,7 @@ it("should save a screenshot of the browser view", async ({ browser }) => {
await elem.saveScreenshot("./some/path/elemScreenshot.png");
});
```
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/saveScreenshot), from which we drew some information while writing our version.
diff --git a/docs/commands/element/scrollIntoView.mdx b/docs/commands/element/scrollIntoView.mdx
index 079c0b3..dee4337 100644
--- a/docs/commands/element/scrollIntoView.mdx
+++ b/docs/commands/element/scrollIntoView.mdx
@@ -2,63 +2,65 @@ import Admonition from "@theme/Admonition";
# scrollIntoView
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `scrollIntoView`, чтобы выполнить подскролл к заданному элементу.
+Use the `scrollIntoView` command to scroll to a specified element.
-
- Читайте также [Element.scrollIntoView()][scroll-into-view] на MDN.
-
+
Also see [Element.scrollIntoView()][scroll-into-view] on MDN.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).scrollIntoView();
```
-или
+or
```javascript
await browser.$(selector).scrollIntoView(alignToTop);
```
-или
+or
```javascript
await browser.$(selector).scrollIntoView({ behavior, block, inline });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **По умолчанию** **Описание**
+**Name** **Type** **Default** **Description**
-alignToTop Boolean true Если значение _true_, то верхняя граница элемента будет выровнена по верху видимой области скроллируемого предка. Соответствует _\{block: 'start', inline: 'nearest'}_. Если значение _false_, нижняя граница элемента будет выровнена по низу видимой области скроллируемого предка. Соответствует _\{block: 'end', inline: 'nearest'}_.
-behavior String "auto" Задает анимацию прокрутки: "auto" или "smooth".
-block String "start" Задает вертикальное выравнивание: "start", "center", "end" или "nearest".
-inline String "nearest" Задает горизонтальное выравнивание: "start", "center", "end" или "nearest".
+alignToTop Boolean true If _true_, the top of the element will be aligned to the top of the scrollable ancestor's visible area. Corresponds to _\{block: 'start', inline: 'nearest'}_. If _false_, the bottom of the element will be aligned to the bottom of the scrollable ancestor's visible area. Corresponds to _\{block: 'end', inline: 'nearest'}_.
+behavior String "auto" Specifies the scrolling animation: "auto" or "smooth".
+block String "start" Specifies vertical alignment: "start", "center", "end", or "nearest".
+inline String "nearest" Specifies horizontal alignment: "start", "center", "end", or "nearest".
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should demonstrate the scrollIntoView command", async ({ browser }) => {
const elem = await browser.$("#myElement");
- // выполнить подскролл к элементу
+ // scroll the element into view
await elem.scrollIntoView();
- // подскроллировать так, чтобы элемент был по центру вьюпорта
+ // scroll the element to the center of the viewport
await elem.scrollIntoView({ block: "center", inline: "center" });
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [browser.scroll](../../browser/scroll)
-[scroll-into-view]: https://developer.mozilla.org/ru/docs/Web/API/Element/scrollIntoView
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/scrollIntoView), from which we drew some information while writing our version.
+
+[scroll-into-view]: https://developer.mozilla.org/en/docs/Web/API/Element/scrollIntoView
diff --git a/docs/commands/element/selectByAttribute.mdx b/docs/commands/element/selectByAttribute.mdx
index 5ecebd1..9473140 100644
--- a/docs/commands/element/selectByAttribute.mdx
+++ b/docs/commands/element/selectByAttribute.mdx
@@ -1,42 +1,40 @@
# selectByAttribute
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `selectByAttribute`, чтобы выбрать опцию с определенным значением.
+Use the `selectByAttribute` command to select an option by a specific attribute value.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).selectByAttribute(attribute, value);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-attribute String Атрибут (опции), по которому нужно выбрать опцию.
-value String или Number Значение (опции), по которому нужно выбрать опцию.
+attribute String The attribute (of the option) by which to select the option.
+value String or Number The value (of the option) by which to select the option.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**example.html**
-```javascript
+```html
uno
dos
tres
cuatro
cinco
-
- seis
-
+ seis
```
@@ -46,17 +44,21 @@ await browser.$(selector).selectByAttribute(attribute, value);
it("should demonstrate the selectByAttribute command", async ({ browser }) => {
const selectBox = await browser.$("#selectbox");
const value = await selectBox.getValue();
- console.log(value); // выведет: "someValue0"
+ console.log(value); // outputs: "someValue0"
await selectBox.selectByAttribute("value", "someValue3");
- console.log(await selectBox.getValue()); // выведет: "someValue3"
+ console.log(await selectBox.getValue()); // outputs: "someValue3"
await selectBox.selectByAttribute("name", "someName5");
- console.log(await selectBox.getValue()); // выведет: "someValue5"
+ console.log(await selectBox.getValue()); // outputs: "someValue5"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [selectByIndex](../selectByIndex)
- [selectByVisibleText](../selectByVisibleText)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/selectByAttribute), from which we drew some information while writing our version.
diff --git a/docs/commands/element/selectByIndex.mdx b/docs/commands/element/selectByIndex.mdx
index 0b43a43..acade1c 100644
--- a/docs/commands/element/selectByIndex.mdx
+++ b/docs/commands/element/selectByIndex.mdx
@@ -1,32 +1,32 @@
# selectByIndex
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `selectByIndex`, чтобы выбрать опцию с определенным значением.
+Use the `selectByIndex` command to select an option by a specific index.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).selectByIndex(index);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-index Number Индекс (опции), по которому нужно выбрать опцию.
+index Number The index (of the option) by which to select the option.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**example.html**
-```javascript
+```html
uno
dos
@@ -42,14 +42,18 @@ await browser.$(selector).selectByIndex(index);
```javascript
it("should demonstrate the selectByIndex command", async ({ browser }) => {
const selectBox = await browser.$("#selectbox");
- console.log(await selectBox.getValue()); // выведет: "someValue0"
+ console.log(await selectBox.getValue()); // outputs: "someValue0"
await selectBox.selectByIndex(4);
- console.log(await selectBox.getValue()); // выведет: "someValue4"
+ console.log(await selectBox.getValue()); // outputs: "someValue4"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [selectByAttribute](../selectByAttribute)
- [selectByVisibleText](../selectByVisibleText)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/selectByIndex), from which we drew some information while writing our version.
diff --git a/docs/commands/element/selectByVisibleText.mdx b/docs/commands/element/selectByVisibleText.mdx
index 27a8c1e..72cfd6e 100644
--- a/docs/commands/element/selectByVisibleText.mdx
+++ b/docs/commands/element/selectByVisibleText.mdx
@@ -1,32 +1,32 @@
# selectByVisibleText
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `selectByVisibleText`, чтобы выбрать опцию с заданным отображаемым текстом.
+Use the `selectByVisibleText` command to select an option by its displayed text.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).selectByVisibleText(text);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-text String или Number Текст (опции), по которому нужно выбрать опцию.
+text String or Number The text (of the option) by which to select the option.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**example.html**
-```javascript
+```html
uno
dos
@@ -40,16 +40,20 @@ await browser.$(selector).selectByVisibleText(text);
**selectByVisibleText.js**
```javascript
-it("demonstrate the selectByVisibleText command", async ({ browser }) => {
+it("should demonstrate the selectByVisibleText command", async ({ browser }) => {
const selectBox = await browser.$("#selectbox");
- console.log(await selectBox.getText("option:checked")); // выведет: "uno"
+ console.log(await selectBox.getText("option:checked")); // outputs: "uno"
await selectBox.selectByVisibleText("cuatro");
- console.log(await selectBox.getText("option:checked")); // выведет: "cuatro"
+ console.log(await selectBox.getText("option:checked")); // outputs: "cuatro"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [selectByAttribute](../selectByAttribute)
- [selectByIndex](../selectByIndex)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/selectByVisibleText), from which we drew some information while writing our version.
diff --git a/docs/commands/element/setValue.mdx b/docs/commands/element/setValue.mdx
index ae89604..8f8fe4c 100644
--- a/docs/commands/element/setValue.mdx
+++ b/docs/commands/element/setValue.mdx
@@ -2,36 +2,36 @@ import Admonition from "@theme/Admonition";
# setValue
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `setValue`, чтобы отправить последовательность нажатий клавиш элементу после того, как поле ввода было предварительно очищено.
+Use the `setValue` command to send a sequence of key presses to an element after first clearing the input field.
-Если элемент не нужно сначала очищать, используйте команду [addValue][add-value].
+If the element does not need to be cleared first, use the [addValue][add-value] command.
- Если вы хотите использовать специальные символы, например, для копирования и вставки значения из
- одного ввода в другой, используйте команду [keys][keys].
+ If you want to use special characters, for example, to copy and paste a value from one input to
+ another, use the [keys][keys] command.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).setValue(value);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-value String или Number Значение, которое нужно установить.
+value String or Number The value to set.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should set value for a certain element", async ({ browser }) => {
@@ -39,15 +39,19 @@ it("should set value for a certain element", async ({ browser }) => {
await input.setValue("test");
await input.setValue(123);
- console.log(await input.getValue()); // выведет: '123'
+ console.log(await input.getValue()); // outputs: '123'
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [element.addValue][add-value]
- [element.clearValue](../clearValue)
- [browser.keys][keys]
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/setValue), from which we drew some information while writing our version.
+
[add-value]: ../addValue
[keys]: ../../browser/keys
diff --git a/docs/commands/element/shadowDollar.mdx b/docs/commands/element/shadowDollar.mdx
index 3989a61..d334d86 100644
--- a/docs/commands/element/shadowDollar.mdx
+++ b/docs/commands/element/shadowDollar.mdx
@@ -1,38 +1,42 @@
# shadow$
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `shadow$`, чтобы получить доступ к элементу внутри [ShadowRoot][shadow-root] данного элемента.
+Use the `shadow$` command to access an element within the [ShadowRoot][shadow-root] of a given element.
-## Использование {#usage}
+## Usage {#usage}
```javascript
-await browser.$(selector).shadow$$(shadowSelector);
+await browser.$(selector).shadow$(shadowSelector);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-shadowSelector String или Function Селектор или JS-функция для получения определенного элемента.
+shadowSelector String or Function Selector or JS function to get a specific element.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should return an element inside a ShadowRoot", async ({ browser }) => {
const innerEl = await browser.$(".input").shadow$("#innerEl");
- console.log(await innerEl.getValue()); // выведет: 'test123'
+ console.log(await innerEl.getValue()); // outputs: 'test123'
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [shadow$$](../shadowDollarDollar)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/shadow$), from which we drew some information while writing our version.
+
[shadow-root]: https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
diff --git a/docs/commands/element/shadowDollarDollar.mdx b/docs/commands/element/shadowDollarDollar.mdx
index 2e0974b..28574d5 100644
--- a/docs/commands/element/shadowDollarDollar.mdx
+++ b/docs/commands/element/shadowDollarDollar.mdx
@@ -1,38 +1,42 @@
# shadow$$
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `shadow$$`, чтобы получить доступ к элементам внутри [ShadowRoot][shadow-root] данного элемента.
+Use the `shadow$$` command to access elements within the [ShadowRoot][shadow-root] of a given element.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).shadow$$(shadowSelector);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-shadowSelector String или Function Селектор или JS-функция для получения определенного элемента (или элементов).
+shadowSelector String or Function Selector or JS function to get a specific element (or elements).
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should return elements inside a ShadowRoot", async ({ browser }) => {
const innerEl = await browser.$(".input").shadow$$("#innerEl");
- console.log(await innerEl.getValue()); // выведет: 'test123'
+ console.log(await innerEl.getValue()); // outputs: 'test123'
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [shadow$](../shadowDollar)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/shadow$$), from which we drew some information while writing our version.
+
[shadow-root]: https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot
diff --git a/docs/commands/element/touchAction.mdx b/docs/commands/element/touchAction.mdx
index 5a2bb4f..74362f8 100644
--- a/docs/commands/element/touchAction.mdx
+++ b/docs/commands/element/touchAction.mdx
@@ -2,72 +2,85 @@ import Admonition from "@theme/Admonition";
# touchAction
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `touchAction`, чтобы выполнить жесты в тестах на мобильной платформе.
+
+ The `touchAction` command is deprecated. Please use [`action`](../../browser/action) command instead:
+ ```js
+ await browser.action('pointer', {
+ parameters: { pointerType: 'touch' }
+ });
+ ```
+
-Команда позволяет связывать воедино отдельные действия _[ad hoc][ad-hoc]_, которые затем будут применены к элементу приложения на устройстве.
+Use the `touchAction` command to perform gestures in mobile platform tests.
-Основные действия, которые можно использовать:
+The command allows chaining ad hoc actions that will then be applied to the app element on the device.
-- **press** — нужно указать element или координаты (x, y), или и то, и другое
-- **longPress** — нужно указать element или координаты (x, y), или и то, и другое
-- **tap** — нужно указать element или координаты (x, y), или и то, и другое
-- **moveTo** — нужно указать абсолютные координаты (x, y)
-- **wait** — нужно указать время в миллисекундах
-- **release** — ничего указывать не нужно
+The main actions you can use are:
+
+- **press** — requires an element or coordinates (x, y), or both
+- **longPress** — requires an element or coordinates (x, y), or both
+- **tap** — requires an element or coordinates (x, y), or both
+- **moveTo** — requires absolute coordinates (x, y)
+- **wait** — requires time in milliseconds
+- **release** — no parameters needed
- В настоящее время команда _touchAction_ доступна только для нативных приложений и не может
- использоваться для взаимодействия с веб-приложениями.
+ Currently, the `touchAction` command is only available for native apps and cannot be used for
+ interacting with web applications.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).touchAction(action);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-action Object Действие, которое надо выполнить.
+action Object The action to perform.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should do a touch gesture", async ({ browser }) => {
const screen = await browser.$("//UITextbox");
- // простой touch action на элементе
+ // simple touch action on an element
await screen.touchAction("tap");
- // простой touch action с координатами x и y
- // координаты касания – 30px направо и 20px вниз относительно центра элемента
+ // simple touch action with x and y coordinates
+ // touch coordinates are 30px to the right and 20px down from the element center
await screen.touchAction({
action: "tap",
x: 30,
y: 20,
});
- // multi action на элементе (drag&drop)
+ // multi action on an element (drag&drop)
await screen.touchAction(["press", { action: "moveTo", x: 200, y: 300 }, "release"]);
- // drag&drop на элемент
+ // drag&drop to another element
const otherElement = await browser.$("//UIAApplication[1]/UIAElement[2]");
await screen.touchAction(["press", { action: "moveTo", element: otherElement }, "release"]);
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [browser.touchAction](../../browser/touchAction)
-[ad-hoc]: https://ru.wikipedia.org/wiki/Ad_hoc
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/touchAction), from which we drew some information while writing our version.
+
+[ad-hoc]: https://en.wikipedia.org/wiki/Ad_hoc
diff --git a/docs/commands/element/waitForClickable.mdx b/docs/commands/element/waitForClickable.mdx
index 70729b0..26275da 100644
--- a/docs/commands/element/waitForClickable.mdx
+++ b/docs/commands/element/waitForClickable.mdx
@@ -2,37 +2,37 @@ import Admonition from "@theme/Admonition";
# waitForClickable
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `waitForClickable`, чтобы подождать, пока элемент в течение указанного количества миллисекунд не станет кликабельным или не кликабельным.
+Use the `waitForClickable` command to wait until an element becomes clickable or unclickable within a specified number of milliseconds.
- В отличие от других команд элемента, testplane не будет дожидаться существования элемента, чтобы
- выполнить эту команду.
+ Unlike other element commands, Testplane will not wait for the element to exist before executing
+ this command.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).waitForClickable({ timeout, reverse, timeoutMsg, interval });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Default** **Description**
-timeout Number 500 Таймаут в миллисекундах.
-reverse Boolean false Если значение _true_, то команда будет ждать противоположного условия: что элемент не кликабельный.
-timeoutMsg String _N/A_ Сообщение об ошибке, которое нужно бросить при таймауте.
-interval Number [waitforInterval][wait-for-interval] Интервал в миллисекундах между проверками условия.
+timeout Number 500 Timeout in milliseconds.
+reverse Boolean false If _true_, the command will wait for the opposite condition: the element becomes unclickable.
+timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
+interval Number [waitforInterval][wait-for-interval] Interval in milliseconds between condition checks.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should detect when element is clickable", async ({ browser }) => {
@@ -46,4 +46,8 @@ it("should detect when element is no longer clickable", async ({ browser }) => {
});
```
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/waitForClickable), from which we drew some information while writing our version.
+
[wait-for-interval]: ../../../config/browsers#wait_interval
diff --git a/docs/commands/element/waitForDisplayed.mdx b/docs/commands/element/waitForDisplayed.mdx
index 6982597..b398053 100644
--- a/docs/commands/element/waitForDisplayed.mdx
+++ b/docs/commands/element/waitForDisplayed.mdx
@@ -2,45 +2,45 @@ import Admonition from "@theme/Admonition";
# waitForDisplayed
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `waitForDisplayed`, чтобы подождать, пока элемент в течение указанного количества миллисекунд не станет отображаемым или не отображаемым.
+Use the `waitForDisplayed` command to wait until an element becomes displayed or not displayed within a specified number of milliseconds.
- В отличие от других команд элемента, testplane не будет дожидаться существования элемента, чтобы
- выполнить эту команду.
+ Unlike other element commands, Testplane will not wait for the element to exist before executing
+ this command.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).waitForDisplayed({ timeout, reverse, timeoutMsg, interval });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Default** **Description**
-timeout Number 500 Таймаут в миллисекундах.
-reverse Boolean false Если значение _true_, то команда будет ждать противоположного условия: что элемент не отображается.
-timeoutMsg String _N/A_ Сообщение об ошибке, которое нужно бросить при таймауте.
-interval Number [waitforInterval][wait-for-interval] Интервал в миллисекундах между проверками условия.
+timeout Number 500 Timeout in milliseconds.
+reverse Boolean false If _true_, the command will wait for the opposite condition: the element becomes not displayed.
+timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
+interval Number [waitforInterval][wait-for-interval] Interval in milliseconds between condition checks.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**index.html**
-```javascript
+```html
Hello World!
```
@@ -59,4 +59,8 @@ it("should detect when element is no longer visible", async ({ browser }) => {
});
```
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/waitForDisplayed), from which we drew some information while writing our version.
+
[wait-for-interval]: ../../../config/browsers#wait_interval
diff --git a/docs/commands/element/waitForEnabled.mdx b/docs/commands/element/waitForEnabled.mdx
index 43095b9..2376413 100644
--- a/docs/commands/element/waitForEnabled.mdx
+++ b/docs/commands/element/waitForEnabled.mdx
@@ -2,45 +2,45 @@ import Admonition from "@theme/Admonition";
# waitForEnabled
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `waitForEnabled`, чтобы подождать, пока элемент в течение указанного количества миллисекунд не станет включенным _(enabled)_ или отключенным _(disabled)_.
+Use the `waitForEnabled` command to wait until an element becomes enabled or disabled within a specified number of milliseconds.
- В отличие от других команд элемента, testplane не будет дожидаться существования элемента, чтобы
- выполнить эту команду.
+ Unlike other element commands, Testplane will not wait for the element to exist before executing
+ this command.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).waitForEnabled({ timeout, reverse, timeoutMsg, interval });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Default** **Description**
-timeout Number 500 Таймаут в миллисекундах.
-reverse Boolean false Если значение _true_, то команда будет ждать противоположного условия: что элемент отключен _(disabled)_.
-timeoutMsg String _N/A_ Сообщение об ошибке, которое нужно бросить при таймауте.
-interval Number [waitforInterval][wait-for-interval] Интервал в миллисекундах между проверками условия.
+timeout Number 500 Timeout in milliseconds.
+reverse Boolean false If _true_, the command will wait for the opposite condition: the element becomes disabled.
+timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
+interval Number [waitforInterval][wait-for-interval] Interval in milliseconds between condition checks.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**index.html**
-```javascript
+```html
Hello World!
```
@@ -59,4 +59,8 @@ it("should detect when element is no longer visible", async ({ browser }) => {
});
```
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/waitForEnabled), from which we drew some information while writing our version.
+
[wait-for-interval]: ../../../config/browsers#wait_interval
diff --git a/docs/commands/element/waitForExist.mdx b/docs/commands/element/waitForExist.mdx
index cb50623..0075120 100644
--- a/docs/commands/element/waitForExist.mdx
+++ b/docs/commands/element/waitForExist.mdx
@@ -2,39 +2,39 @@ import Admonition from "@theme/Admonition";
# waitForExist
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `waitForExist`, чтобы подождать, пока элемент в течение указанного количества миллисекунд не появится в DOM.
+Use the `waitForExist` command to wait until an element appears in the DOM within a specified number of milliseconds.
-Команда возвращает значение `true`, если селектор соответствует хотя бы одному элементу, существующему в DOM, в противном случае выдает ошибку. Если параметр `reverse` имеет значение `true`, то команда поменяет логику и вернет значение `true`, если селектор не соответствует ни одному элементу.
+The command returns `true` if the selector matches at least one element existing in the DOM; otherwise, it throws an error. If the `reverse` parameter is set to `true`, the command reverses its logic and returns `true` if the selector matches no elements.
- В отличие от других команд элемента, testplane не будет дожидаться существования элемента, чтобы
- выполнить эту команду.
+ Unlike other element commands, Testplane will not wait for the element to exist before executing
+ this command.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).waitForExist({ timeout, reverse, timeoutMsg, interval });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Default** **Description**
-timeout Number 500 Таймаут в миллисекундах.
-reverse Boolean false Если значение _true_, то команда будет ждать противоположного условия: что элемент не отображается.
-timeoutMsg String _N/A_ Сообщение об ошибке, которое нужно бросить при таймауте.
-interval Number [waitforInterval][wait-for-interval] Интервал в миллисекундах между проверками условия.
+timeout Number 500 Timeout in milliseconds.
+reverse Boolean false If _true_, the command will wait for the opposite condition: the element does not exist.
+timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
+interval Number [waitforInterval][wait-for-interval] Interval in milliseconds between condition checks.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should display a notification message after successful form submit", async ({ browser }) => {
@@ -56,4 +56,8 @@ it("should remove a message after successful form submit", async ({ browser }) =
});
```
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/waitForExist), from which we drew some information while writing our version.
+
[wait-for-interval]: ../../../config/browsers#wait_interval
diff --git a/docs/commands/element/waitUntil.mdx b/docs/commands/element/waitUntil.mdx
index 805d0c1..289aa71 100644
--- a/docs/commands/element/waitUntil.mdx
+++ b/docs/commands/element/waitUntil.mdx
@@ -1,39 +1,39 @@
# waitUntil
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `waitUntil`, чтобы дождаться соблюдения определенного условия на странице в браузере.
+Use the `waitUntil` command to wait until a specific condition is met on the page in the browser.
-## Использование {#usage}
+## Usage {#usage}
```javascript
await browser.$(selector).waitUntil(condition, { timeout, timeoutMsg, interval });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **По умолчанию** **Описание**
+**Name** **Type** **Default** **Description**
-condition Function _N/A_ Условие, которое нужно ждать.
-timeout Number 5000 Таймаут в миллисекундах.
-timeoutMsg String _N/A_ Сообщение об ошибке, которое нужно бросить при таймауте.
-interval Number 500 Интервал в миллисекундах между проверками условия.
+condition Function _N/A_ The condition to wait for.
+timeout Number 5000 Timeout in milliseconds.
+timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
+interval Number 500 Interval in milliseconds between condition checks.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
**example.html**
-```javascript
+```html
I am some text
```
@@ -56,6 +56,10 @@ it("should wait until text has changed", async ({ browser }) => {
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [browser.waitUntil](../../browser/waitUntil)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/waitUntil), from which we drew some information while writing our version.
diff --git a/docs/commands/expect/browser-matchers.mdx b/docs/commands/expect/browser-matchers.mdx
index d494bf5..6cba125 100644
--- a/docs/commands/expect/browser-matchers.mdx
+++ b/docs/commands/expect/browser-matchers.mdx
@@ -1,10 +1,10 @@
-# expect для браузера
+# expect for the browser
## toHaveUrl
-Проверяет, находится ли браузер на заданной странице.
+Checks if the browser is on the specified page.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
@@ -13,9 +13,9 @@ await expect(browser).toHaveUrl("https://webdriver.io");
## toHaveUrlContaining
-Проверяет, есть ли заданная подстрока в URL-адресе страницы, на которой находится браузер.
+Checks if the specified substring is contained in the URL of the page the browser is on.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
@@ -24,9 +24,9 @@ await expect(browser).toHaveUrlContaining("webdriver");
## toHaveTitle
-Проверяет, есть ли у веб-сайта заданный заголовок.
+Checks if the website has the specified title.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
@@ -37,11 +37,15 @@ await expect(browser).toHaveTitle(
## toHaveTitleContaining
-Проверяет, есть ли заданная подстрока в заголовке веб-сайта.
+Checks if the specified substring is contained in the website's title.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
await expect(browser).toHaveTitleContaining("WebdriverIO");
```
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/expect-webdriverio), from which we drew some information while writing our version.
diff --git a/docs/commands/expect/element-matchers.mdx b/docs/commands/expect/element-matchers.mdx
index 19d6daa..1d0696c 100644
--- a/docs/commands/expect/element-matchers.mdx
+++ b/docs/commands/expect/element-matchers.mdx
@@ -1,10 +1,10 @@
-# expect для элементов
+# expect for elements
## toBeDisplayed
-Вызывает [isDisplayed](../../element/isDisplayed) на заданном элементе.
+Calls [isDisplayed](../../element/isDisplayed) on the given element.
-Например:
+For example:
```javascript
const elem = await browser.$("#someElem");
@@ -13,9 +13,9 @@ await expect(elem).toBeDisplayed();
## toExist
-Вызывает [isExisting](../../element/isExisting) на заданном элементе.
+Calls [isExisting](../../element/isExisting) on the given element.
-Например:
+For example:
```javascript
const elem = await browser.$("#someElem");
@@ -24,9 +24,9 @@ await expect(elem).toExist();
## toBePresent
-То же, что и [toExist](#toexist).
+Same as [toExist](#toexist).
-Например:
+For example:
```javascript
const elem = await browser.$("#someElem");
@@ -35,9 +35,9 @@ await expect(elem).toBePresent();
## toBeExisting
-То же, что и [toExist](#toexist).
+Same as [toExist](#toexist).
-Например:
+For example:
```javascript
const elem = await browser.$("#someElem");
@@ -46,9 +46,9 @@ await expect(elem).toBeExisting();
## toBeFocused
-Проверяет, есть ли фокус на элементе. Это утверждение работает только в веб-контексте.
+Checks if the element has focus. This assertion works only in the web context.
-Например:
+For example:
```javascript
const elem = await browser.$("#someElem");
@@ -57,9 +57,9 @@ await expect(elem).toBeFocused();
## toHaveAttribute
-Проверяет, есть ли у элемента атрибут с заданным значением.
+Checks if the element has the given attribute with the specified value.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -68,9 +68,9 @@ await expect(myInput).toHaveAttribute("class", "form-control");
## toHaveAttr
-То же, что и [toHaveAttribute](#tohaveattribute).
+Same as [toHaveAttribute](#tohaveattribute).
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -79,9 +79,9 @@ await expect(myInput).toHaveAttr("class", "form-control");
## toHaveAttributeContaining
-Проверяет, есть ли заданная подстрока в значении указанного атрибута элемента.
+Checks if the given substring is contained in the specified attribute's value of the element.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -90,9 +90,9 @@ await expect(myInput).toHaveAttributeContaining("class", "form");
## toHaveAttrContaining
-То же, что и [toHaveAttributeContaining](#tohaveattrcontaining).
+Same as [toHaveAttributeContaining](#tohaveattrcontaining).
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -101,9 +101,9 @@ await expect(myInput).toHaveAttrContaining("class", "form");
## toHaveElementClass
-Проверяет, есть ли у элемента заданное имя класса.
+Checks if the element has the specified class name.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -112,9 +112,9 @@ await expect(myInput).toHaveElementClass("form-control", { message: "Not a form
## toHaveElementClassContaining
-Проверяет, есть ли у элемент имя класса, которое содержит в качестве подстроки заданное значение.
+Checks if the element's class name contains the specified substring.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -123,9 +123,9 @@ await expect(myInput).toHaveElementClassContaining("form");
## toHaveElementProperty
-Проверяет, есть ли у элемента указанное свойство с заданным значением.
+Checks if the element has the specified property with the given value.
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -135,9 +135,9 @@ await expect(elem).not.toHaveElementProperty("height", 0);
## toHaveValue
-Проверяет, имеет ли input-элемент заданное значение.
+Checks if an input element has the given value.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -146,9 +146,9 @@ await expect(myInput).toHaveValue("user", { ignoreCase: true });
## toHaveValueContaining
-Проверяет, есть ли заданная подстрока в значении указанного input-элемента.
+Checks if the given substring is contained in the specified input element's value.
-Например:
+For example:
```javascript
const myInput = await browser.$("input");
@@ -157,9 +157,9 @@ await expect(myInput).toHaveValueContaining("us");
## toBeClickable
-Проверяет, можно ли щелкнуть по элементу с помощью вызова [isClickable](../../element/isClickable).
+Checks if the element is clickable by calling [isClickable](../../element/isClickable).
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -168,35 +168,35 @@ await expect(elem).toBeClickable();
## toBeDisabled
-Проверяет, отключен ли элемент с помощью вызова [isEnabled](../../element/isEnabled).
+Checks if the element is disabled by calling [isEnabled](../../element/isEnabled).
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
await expect(elem).toBeDisabled();
-// или, что то же самое:
+// or, equivalently:
await expect(elem).not.toBeEnabled();
```
## toBeEnabled
-Проверяет, включен ли элемент с помощью вызова [isEnabled](../../element/isEnabled).
+Checks if the element is enabled by calling [isEnabled](../../element/isEnabled).
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
await expect(elem).toBeEnabled();
-// или, что то же самое:
+// or, equivalently:
await expect(elem).not.toBeDisabled();
```
## toBeSelected
-Проверяет, выбран ли элемент с помощью вызова [isSelected](../../element/isSelected).
+Checks if the element is selected by calling [isSelected](../../element/isSelected).
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -205,9 +205,9 @@ await expect(elem).toBeSelected();
## toBeChecked
-То же, что и [toBeSelected](#tobeselected).
+Same as [toBeSelected](#tobeselected).
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -216,9 +216,9 @@ await expect(elem).toBeChecked();
## toHaveHref
-Проверяет, есть ли заданный адрес у ссылки элемента.
+Checks if the element link has the specified URL.
-Например:
+For example:
```javascript
const link = await browser.$("a");
@@ -227,9 +227,9 @@ await expect(link).toHaveHref("https://webdriver.io");
## toHaveLink
-То же, что и [toHaveHref](#tohavehref).
+Same as [toHaveHref](#tohavehref).
-Например:
+For example:
```javascript
const link = await browser.$("a");
@@ -238,9 +238,9 @@ await expect(link).toHaveLink("https://webdriver.io");
## toHaveHrefContaining
-Проверяет, есть ли заданная подстрока в адресе у ссылки элемента.
+Checks if the given substring is contained in the element link's URL.
-Например:
+For example:
```javascript
const link = await browser.$("a");
@@ -249,9 +249,9 @@ await expect(link).toHaveHrefContaining("webdriver.io");
## toHaveLinkContaining
-То же, что и [toHaveHrefContaining](#tohavehrefcontaining).
+Same as [toHaveHrefContaining](#tohavehrefcontaining).
-Например:
+For example:
```javascript
const link = await browser.$("a");
@@ -260,9 +260,9 @@ await expect(link).toHaveLinkContaining("webdriver.io");
## toHaveId
-Проверяет, есть ли у элемента заданный ID.
+Checks if the element has the given ID.
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -271,11 +271,11 @@ await expect(elem).toHaveId("elem");
## toHaveText
-Проверяет, совпадает ли текст элемента с заданным значением.
+Checks if the element's text matches the specified value.
-Также может быть вызван с массивом в качестве параметра в случае, когда элемент может иметь разные тексты.
+It can also be called with an array as a parameter in case the element can have different texts.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
@@ -289,11 +289,11 @@ await expect(elem).toHaveText([
## toHaveTextContaining
-Проверяет, содержит ли текст элемента заданное значение в качестве подтекста.
+Checks if the element's text contains the specified substring.
-Также может быть вызван с массивом в качестве параметра в случае, когда элемент может иметь разные тексты.
+It can also be called with an array as a parameter in case the element can have different texts.
-Например:
+For example:
```javascript
await browser.url("https://webdriver.io/");
@@ -307,9 +307,9 @@ await expect(elem).toHaveTextContaining([
## toBeDisplayedInViewport
-Проверяет, находится ли элемент в пределах области просмотра _(viewport)_, используя команду [isDisplayedInViewport](../../element/isDisplayedInViewport).
+Checks if the element is within the viewport using the [isDisplayedInViewport](../../element/isDisplayedInViewport) command.
-Например:
+For example:
```javascript
const elem = await browser.$("#elem");
@@ -318,36 +318,40 @@ await expect(elem).toBeDisplayedInViewport();
## toHaveChildren
-Проверяет количество дочерних элементов заданного элемента, используя команду [element.$('./\*')](../../element/_dollar).
+Checks the number of child elements of the given element using the [element.$('./\*')](../../element/_dollar) command.
-Например:
+For example:
```javascript
const list = await browser.$("ul");
-await expect(list).toHaveChildren(); // в списке есть как минимум 1 элемент
-// или, что то же самое:
+await expect(list).toHaveChildren(); // list has at least 1 element
+// or, equivalently:
await expect(list).toHaveChildren({ gte: 1 });
```
```javascript
-await expect(list).toHaveChildren(3); // в списке есть 3 элемента
-// или, что то же самое:
+await expect(list).toHaveChildren(3); // list has 3 elements
+// or, equivalently:
await expect(list).toHaveChildren({ eq: 3 });
```
## toBeElementsArrayOfSize
-Проверяет количество полученных элементов с помощью команды [$$](../../element/_dollardollar).
+Checks the number of elements obtained using the [$$](../../element/_dollardollar) command.
-Например:
+For example:
```javascript
const listItems = await browser.$$("ul>li");
-await expect(listItems).toBeElementsArrayOfSize(5); // 5 элементов в списке
+await expect(listItems).toBeElementsArrayOfSize(5); // 5 items in the list
```
```javascript
await expect(listItems).toBeElementsArrayOfSize({ lte: 10 });
-// или, что то же самое:
+// or, equivalently:
assert.ok(listItems.length <= 10);
```
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/expect-webdriverio), from which we drew some information while writing our version.
diff --git a/docs/commands/expect/mock-matchers.mdx b/docs/commands/expect/mock-matchers.mdx
index ded9018..b565434 100644
--- a/docs/commands/expect/mock-matchers.mdx
+++ b/docs/commands/expect/mock-matchers.mdx
@@ -1,10 +1,10 @@
-# expect для моков сети
+# expect for network mocks
## toBeRequested
-Проверяет, был ли сделан указанный запрос.
+Checks if the specified request was made.
-Например:
+For example:
```javascript
const mock = browser.mock("**/api/todo*");
@@ -13,30 +13,30 @@ await expect(mock).toBeRequested();
## toBeRequestedTimes
-Проверяет, был ли сделан указанный запрос ожидаемое количество раз.
+Checks if the specified request was made the expected number of times.
-Например:
+For example:
```javascript
const mock = browser.mock("**/api/todo*");
await expect(mock).toBeRequestedTimes(2);
-// или, что то же самое:
+// or, equivalently:
await expect(mock).toBeRequestedTimes({ eq: 2 });
```
```javascript
const mock = browser.mock("**/api/todo*");
-// проверяем, что запрос был сделан как минимум 5 раз, но не больше 10 раз
+// Check if the request was made at least 5 times but no more than 10 times
await expect(mock).toBeRequestedTimes({ gte: 5, lte: 10 });
```
## toBeRequestedWith
-Проверяет, был ли сделан указанный запрос с заданными опциями.
+Checks if the specified request was made with the given options.
-Большинство опций поддерживают частичные матчеры _expect.* / jasmine.*_ такие как [expect.objectContaining](https://jestjs.io/docs/expect#expectobjectcontainingobject).
+Most options support partial matchers _expect.* / jasmine.*_ such as [expect.objectContaining](https://jestjs.io/docs/expect#expectobjectcontainingobject).
-Например:
+For example:
```javascript
const mock = browser.mock("**/api/todo*", { method: "POST" });
@@ -53,10 +53,14 @@ await expect(mock).toBeRequestedWith({
await expect(mock).toBeRequestedWith({
url: expect.stringMatching(/.*\/api\/.*/i),
- method: ["POST", "PUT"], // или POST, или PUT
- statusCode: [401, 403], // или 401, или 403
+ method: ["POST", "PUT"], // Either POST or PUT
+ statusCode: [401, 403], // Either 401 or 403
requestHeaders: headers => headers.Authorization.startsWith("Bearer "),
postData: expect.objectContaining({ released: true, title: expect.stringContaining("foobar") }),
response: r => Array.isArray(r) && r.data.items.length === 20,
});
```
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/expect-webdriverio), from which we drew some information while writing our version.
diff --git a/docs/commands/mock/abort.mdx b/docs/commands/mock/abort.mdx
index 018bae4..37cd1f1 100644
--- a/docs/commands/mock/abort.mdx
+++ b/docs/commands/mock/abort.mdx
@@ -1,10 +1,10 @@
# abort
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `abort`, чтобы прервать запрос с заданной ошибкой.
+Use the `abort` command to abort a request with a specified error.
-Запрос можно прервать с одной из следующих ошибок:
+A request can be aborted with one of the following errors:
- Failed
- Aborted
@@ -16,25 +16,25 @@
- AddressUnreachable
- BlockedByClient | BlockedByResponse
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.abort(errorCode);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-errorCode ErrorCode Код ошибки ответа. Возможные значения см. [выше](#overview).
+errorCode ErrorCode The response error code. Possible values are listed [above](#overview).
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should block Google Analytics from page", async ({ browser }) => {
@@ -43,6 +43,10 @@ it("should block Google Analytics from page", async ({ browser }) => {
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [abortOnce](../abortOnce)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/abort), from which we drew some information while writing our version.
diff --git a/docs/commands/mock/abortOnce.mdx b/docs/commands/mock/abortOnce.mdx
index 50e4ace..5361c83 100644
--- a/docs/commands/mock/abortOnce.mdx
+++ b/docs/commands/mock/abortOnce.mdx
@@ -1,10 +1,10 @@
# abortOnce
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `abortOnce`, чтобы прервать запрос один раз с заданной ошибкой.
+Use the `abortOnce` command to abort a request once with a specified error.
-Запрос можно прервать с одной из следующих ошибок:
+A request can be aborted with one of the following errors:
- Failed
- Aborted
@@ -16,25 +16,25 @@
- AddressUnreachable
- BlockedByClient | BlockedByResponse
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.abortOnce(errorCode);
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-errorCode ErrorCode Код ошибки ответа. Возможные значения см. [выше](#overview).
+errorCode ErrorCode The response error code. Possible values are listed [above](#overview).
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should block mock only once", async ({ browser }) => {
@@ -43,15 +43,19 @@ it("should block mock only once", async ({ browser }) => {
await browser
.url("https://webdriver.io")
- // ловим исключение, так как запрос к странице упадет
+ // catch exception as the request to the page will fail
.catch(() => console.log('Failed to get the page "https://webdriver.io"'));
await browser.url("https://webdriver.io");
console.log(await browser.getTitle());
- // выведет: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
+ // will output: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [abort](../abort)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/abortOnce), from which we drew some information while writing our version.
diff --git a/docs/commands/mock/clear.mdx b/docs/commands/mock/clear.mdx
index 5e511ba..160f684 100644
--- a/docs/commands/mock/clear.mdx
+++ b/docs/commands/mock/clear.mdx
@@ -1,28 +1,32 @@
# clear
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `clear`, чтобы сбросить всю информацию, хранящуюся в массиве `mock.calls`.
+Use the `clear` command to reset all information stored in the `mock.calls` array.
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.clear();
```
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should clear mock", async ({ browser }) => {
const mock = await browser.mock("https://google.com/");
await browser.url("https://google.com");
- console.log(mock.calls.length); // выведет: 1
+ console.log(mock.calls.length); // outputs: 1
mock.clear();
- console.log(mock.calls.length); // выведет: 0
+ console.log(mock.calls.length); // outputs: 0
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [restore](../restore)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/clear), from which we drew some information while writing our version.
diff --git a/docs/commands/mock/respond.mdx b/docs/commands/mock/respond.mdx
index 69c34ec..f908808 100644
--- a/docs/commands/mock/respond.mdx
+++ b/docs/commands/mock/respond.mdx
@@ -2,84 +2,99 @@ import Admonition from "@theme/Admonition";
# respond
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `respond`, чтобы всегда отвечать одной и той же перезаписью.
+Use the `respond` command to always reply with the same overwrite.
- Читайте также рецепт «[Как отслеживать и перехватывать сетевые запросы и
- ответы][how-to-intercept-requests-and-responses]».
+ Also read the recipe "[How to Track and Intercept Network Requests and
+ Responses][how-to-intercept-requests-and-responses]".
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.respond(overwrites, { header, statusCode, fetchResponse });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-overwrites MockOverwrite _Payload_ для перезаписи ответа.
-header Object Перезаписать определенные заголовки.
-statusCode Number Перезаписать код состояния ответа.
-fetchResponse Boolean Получить реальный ответ, прежде чем отвечать с помощью поддельных данных.
+overwrites MockOverwrite _Payload_ to overwrite the response.
+header Object Overwrite specific headers.
+statusCode Number Overwrite the response status code.
+fetchResponse Boolean Fetch the actual response before replying with fake data.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
-it('should demonstrate response overwrite with static data', async ({ browser }) => {
- const mock = await browser.mock('https://todo-backend-express-knex.herokuapp.com/', {
- method: 'get'
+it("should demonstrate response overwrite with static data", async ({ browser }) => {
+ const mock = await browser.mock("https://todo-backend-express-knex.herokuapp.com/", {
+ method: "get",
});
- mock.respond([{
- title: 'Injected (non) completed Todo',
- order: null,
- completed: false
- }, {
- title: 'Injected completed Todo',
- order: null,
- completed: true
- }], {
- statusCode: 200,
- fetchResponse: true // по умолчанию
- });
-
- await browser.url('https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/');
-
- await browser.$('#todo-list li').waitForExist();
-
- const todoElements = await browser.$$('#todo-list li');
+ mock.respond(
+ [
+ {
+ title: "Injected (non) completed Todo",
+ order: null,
+ completed: false,
+ },
+ {
+ title: "Injected completed Todo",
+ order: null,
+ completed: true,
+ },
+ ],
+ {
+ statusCode: 200,
+ fetchResponse: true, // default
+ },
+ );
+
+ await browser.url(
+ "https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/",
+ );
+
+ await browser.$("#todo-list li").waitForExist();
+
+ const todoElements = await browser.$$("#todo-list li");
console.log(await Promise.all(todoElements.map(el => el.getText())));
- // выведет: "[ 'Injected (non) completed Todo', 'Injected completed Todo' ]"
+ // will output: "[ 'Injected (non) completed Todo', 'Injected completed Todo' ]"
});
-it('should demonstrate response overwrite with dynamic data', async ({ browser }) => {
- const mock = await browser.mock('https://todo-backend-express-knex.herokuapp.com/');
-
- mock.respond((request) => {
- if (request.body.username === 'test') {
- return { ...request.body, foo: 'bar' };
- }
- return request.body;
- }, {
- statusCode: () => 200,
- headers: () => ({ foo: 'bar }),
- fetchResponse: false // не получать настоящий ответ
- });
+it("should demonstrate response overwrite with dynamic data", async ({ browser }) => {
+ const mock = await browser.mock("https://todo-backend-express-knex.herokuapp.com/");
+
+ mock.respond(
+ request => {
+ if (request.body.username === "test") {
+ return { ...request.body, foo: "bar" };
+ }
+ return request.body;
+ },
+ {
+ statusCode: () => 200,
+ headers: () => ({ foo: "bar" }),
+ fetchResponse: false, // do not fetch the actual response
+ },
+ );
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [respondOnce](../respondOnce)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/respond), from which we drew some information while writing our version.
+
[how-to-intercept-requests-and-responses]: ../../../guides/how-to-intercept-requests-and-responses
diff --git a/docs/commands/mock/respondOnce.mdx b/docs/commands/mock/respondOnce.mdx
index ac71093..d41dc19 100644
--- a/docs/commands/mock/respondOnce.mdx
+++ b/docs/commands/mock/respondOnce.mdx
@@ -2,41 +2,41 @@ import Admonition from "@theme/Admonition";
# respondOnce
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `respondOnce`, чтобы ответить один раз заданной перезаписью.
+Use the `respondOnce` command to respond once with the specified overwrite.
-Вы можете вызвать `respondOnce` несколько раз подряд, тогда при запросах ответы будут использоваться в том же порядке, как были вызваны команды `respondOnce`.
+You can call `respondOnce` multiple times in succession. The responses will be used in the same order the `respondOnce` commands were called.
-Если вы используете только `respondOnce` и обратитесь к ресурсу большее количество раз, чем вызывали `respondOnce`, то после исчерпания поддельных данных, запрос начнет возвращать оригинальный ответ от ресурса.
+If you use only `respondOnce` and access the resource more times than `respondOnce` was called, then after exhausting the fake data, the request will start returning the original response from the resource.
- Читайте также рецепт «[Как отслеживать и перехватывать сетевые запросы и
- ответы][how-to-intercept-requests-and-responses]».
+ Also read the recipe "[How to Track and Intercept Network Requests and
+ Responses][how-to-intercept-requests-and-responses]".
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.respondOnce(overwrites, { header, statusCode, fetchResponse });
```
-## Параметры команды {#parameters}
+## Command Parameters {#parameters}
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-overwrites MockOverwrite _Payload_ для перезаписи ответа.
-header Object Перезаписать определенные заголовки.
-statusCode Number Перезаписать код состояния ответа.
-fetchResponse Boolean Получить реальный ответ, прежде чем отвечать с помощью поддельных данных.
+overwrites MockOverwrite _Payload_ to overwrite the response.
+header Object Overwrite specific headers.
+statusCode Number Overwrite the response status code.
+fetchResponse Boolean Fetch the actual response before replying with fake data.
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
async function getToDos(browser) {
@@ -82,27 +82,31 @@ it("should demonstrate the respondOnce command", async ({ browser }) => {
await browser.url(
"https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/",
);
- console.log(await getToDos(browser)); // выведет: [ '3', '2', '1' ]
+ console.log(await getToDos(browser)); // outputs: [ '3', '2', '1' ]
await browser.url(
"https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/",
);
- console.log(await getToDos(browser)); // выведет: [ '2', '1' ]
+ console.log(await getToDos(browser)); // outputs: [ '2', '1' ]
await browser.url(
"https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/",
);
- console.log(await getToDos(browser)); // выведет: [ '1' ]
+ console.log(await getToDos(browser)); // outputs: [ '1' ]
await browser.url(
"https://todobackend.com/client/index.html?https://todo-backend-express-knex.herokuapp.com/",
);
- console.log(await getToDos(browser)); // выведет: настоящий ответ ресурса
+ console.log(await getToDos(browser)); // outputs: the actual resource response
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [respond](../respond)
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/respondOnce), from which we drew some information while writing our version.
+
[how-to-intercept-requests-and-responses]: ../../../guides/how-to-intercept-requests-and-responses
diff --git a/docs/commands/mock/restore.mdx b/docs/commands/mock/restore.mdx
index b028a68..52b82f5 100644
--- a/docs/commands/mock/restore.mdx
+++ b/docs/commands/mock/restore.mdx
@@ -1,28 +1,32 @@
# restore
-## Обзор {#overview}
+## Overview {#overview}
-Используйте команду `restore`, чтобы выполнить все то же, что делает [mock.clear()](../clear), а также удалить любые поддельные возвращаемые значения или реализации.
+Use the `restore` command to perform all actions that [mock.clear()](../clear) does, as well as remove any fake return values or implementations.
-## Использование {#usage}
+## Usage {#usage}
```javascript
mock.restore();
```
-## Примеры использования {#examples}
+## Usage Examples {#examples}
```javascript
it("should demonstrate the addValue command", async ({ browser }) => {
const mock = await browser.mock("**/googlelogo_color_272x92dp.png");
mock.respond("https://webdriver.io/img/webdriverio.png");
- await browser.url("https://google.com"); // покажет логотип WebdriverIO вместо логотипа Google
+ await browser.url("https://google.com"); // will show WebdriverIO logo instead of Google logo
mock.restore();
- await browser.url("https://google.com"); // покажет родной логотип Google
+ await browser.url("https://google.com"); // will show the native Google logo
});
```
-## Связанные команды {#related}
+## Related Commands {#related}
- [clear](../clear)
+
+## References
+
+We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/mock/restore), from which we drew some information while writing our version.
diff --git a/docs/commands/overview.mdx b/docs/commands/overview.mdx
index 1e5ceb6..fa78b15 100644
--- a/docs/commands/overview.mdx
+++ b/docs/commands/overview.mdx
@@ -4,44 +4,44 @@ sidebar_class_name: hidden
import Admonition from "@theme/Admonition";
-# Команды testplane
+# Testplane Commands
-## Обзор
+## Overview
- Описаны только команды для последней версии Testplane v8 и WebDriverIO v8. Команды для более
- старых версий стоит смотреть в документации WebDriverIO (пример для [WebDriverIO
+ Only commands for the latest version Testplane v8 and WebDriverIO v8 are described. Commands for
+ older versions should be referenced in the WebDriverIO documentation (example for [WebDriverIO
v7][webdriverio@7-api]).
-Так как в основе testplane лежит [WebDriverIO v8][webdriverio-api], то в ней доступны все команды, которые предоставляет WebDriverIO.
+Since Testplane is based on [WebDriverIO v8][webdriverio-api], all commands provided by WebDriverIO are available in it.
-Однако, описания команд на сайте [WebDriverIO][webdriverio-api] для 8-й версии не совсем подходят _as is_ для пользователей testplane из-за целого ряда причин:
+However, the command descriptions on the [WebDriverIO][webdriverio-api] website for version 8 are not quite suitable _as is_ for Testplane users due to a number of reasons:
-- в WebDriverIO объект `browser` существует в глобальном пространстве, тогда как в testplane нужно либо писать `this.browser`:
+- In WebDriverIO, the `browser` object exists in the global scope, whereas in Testplane you need to either write `this.browser`:
- ```javascript
- it("should test something", async () => {
- const browser = this.browser;
- // код теста...
- });
- ```
+```javascript
+it("should test something", async function () {
+ const browser = this.browser;
+ // test code...
+});
+```
- либо получать объект `browser` из аргумента функции (обратите внимание, что объект `browser` передается внутри объекта!):
+or get the `browser` object from the function argument (note that the `browser` object is passed inside an object!):
- ```javascript
- it("should test something", async ({ browser }) => {
- // код теста...
- });
- ```
+```javascript
+it("should test something", async ({ browser }) => {
+ // test code...
+});
+```
-- аналогично функции `browser.$` и `browser.$$` в WebDriverIO доступны в тестах под именами `$` и `$$`, а в testplane к ним нужно обращаться по полному пути: `browser.$` и `browser.$$`;
+- Similarly, the `browser.$` and `browser.$$` functions in WebDriverIO are available in tests under the names `$` and `$$`, while in Testplane you need to refer to them by their full path: `browser.$` and `browser.$$`;
-- не проставлены связи между похожими командами: нет кластеризации команд;
+- There are no links established between similar commands: no clustering of commands;
-Тем не менее в наше описание пока ещё не вошли протоколо-специфичные команды. Соответствующие команды вы можете посмотреть на сайте WebDriverIO в разделе "[Protocols][webdriverio-protocols]".
+Nevertheless, our description does not yet include protocol-specific commands. You can find the relevant commands on the WebDriverIO website under the "[Protocols][webdriverio-protocols]" section.
-Также в описаниях некоторых команд ссылки на отдельные рецепты все еще не локализованы и ведут на сайт WebDriverIO.
+Also, in the descriptions of some commands, links to individual recipes are still not localized and lead to the WebDriverIO website.
[webdriverio@7-api]: https://webdriver.io/docs/api
[webdriverio-api]: https://webdriver.io/docs/api
diff --git a/docs/config/browsers.mdx b/docs/config/browsers.mdx
index 27d792b..7746dca 100644
--- a/docs/config/browsers.mdx
+++ b/docs/config/browsers.mdx
@@ -3,37 +3,37 @@ import BrowsersBasicFormat from "@site/docs/config/_partials/examples/_browsers-
import BrowsersExample from "@site/docs/config/_partials/examples/_browsers-example.mdx";
import DesiredCapabilitiesExample from "@site/docs/config/_partials/examples/_browsers-desired-capabilities.mdx";
import SessionEnvFlags from "@site/docs/config/_partials/examples/_browsers-session-env-flags.mdx";
-import AssertViewOptions from "@site/docs/_partials/specs/assert-view-options.mdx";
+import AssertViewOptions from "../_partials/specs/assert-view-options.mdx";
# browsers
-## Обзор {#overview}
+## Overview {#overview}
-Раздел `browsers` является обязательным в настройках Testplane. В нем задаются все браузеры, в которых будут запускаться тесты.
+The `browsers` section is mandatory in Testplane settings. It specifies all the browsers in which the tests will run.
-## Настройка {#setup}
+## Setup {#setup}
-Данный раздел имеет следующий формат:
+This section has the following format:
-Где `` — это имя браузера, которое используется для его идентификации.
+Where `` is the name of the browser used for its identification.
-Чтобы не повторять одни и те же настройки для разных браузеров, вы можете задать все нужные вам значения по умолчанию в корне конфига Testplane. Например:
+To avoid repeating the same settings for different browsers, you can set all the default values you need at the root of the Testplane config. For example:
-В этом примере для браузера **chrome** будет использовано значение `10` для опции `sessionsPerBrowser`, а для **firefox** — `5`.
+In this example, the value `10` will be used for the `sessionsPerBrowser` option for **chrome**, and `5` for **firefox**.
-## Основные настройки браузера {#browser_main_settings}
+## Main browser settings {#browser_main_settings}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -42,29 +42,29 @@ import AssertViewOptions from "@site/docs/_partials/specs/assert-view-options.md
`DesiredCapabilities`
_N/A_
- Обязательный параметр. Определяет свойства, которыми должен обладать браузер.
- Используется _WebDriver'ом_, см. [DesiredCapabilities][desired-caps].
+ Required parameter. Specifies the properties that the browser must have. Used by
+ _WebDriver_, see [DesiredCapabilities][desired-caps].
[`gridUrl`](#grid_url)
`string`
`"http://localhost:4444/wd/hub"`
- URL грида Selenium.
+ Selenium grid URL.
[`baseUrl`](#base_url)
`string`
`"http://localhost"`
- Базовый URL тестируемого сервиса.
+ Base URL of the service being tested.
[`browserWSEndpoint`](#browser_ws_endpoint)
`string`
`null`
- Эндпойнт websocket-соединения для подключения к браузеру через [Chrome DevTools
- Protocol (CDP)][how-to-use-cdp].
+ Websocket endpoint for connecting to the browser via [Chrome DevTools Protocol
+ (CDP)][how-to-use-cdp].
@@ -72,7 +72,7 @@ import AssertViewOptions from "@site/docs/_partials/specs/assert-view-options.md
`string`
`"webdriver"`
- Протокол общения с браузером. См. [WebDriver vs
+ Protocol for communication with the browser. See [WebDriver vs
CDP](../../reference/webdriver-vs-cdp).
@@ -81,97 +81,96 @@ import AssertViewOptions from "@site/docs/_partials/specs/assert-view-options.md
`SessionEnvFlags`
`{}`
- Флаги окружения, задающие протокол, который будет использоваться в созданной сессии
- браузера.
+ Environment flags setting the protocol to be used in the created browser session.
[`windowSize`](#window_size)
`string | WindowSize`
`null`
- Размеры окна браузера.
+ Browser window size.
[`headless`](#headless)
`boolean | "new" | "old"`
_depends on browser_
- Позволяет запускать браузер в _headless_ режиме.
+ Allows running the browser in _headless_ mode.
### desiredCapabilities {#desired_caps}
-Обязательный параметр. Определяет свойства, которыми должен обладать браузер.
+Required parameter. Specifies the properties that the browser must have.
-Формат объекта desiredCapabilities определяется [стандартом WebDriver](https://www.w3.org/TR/webdriver/#capabilities).
+The format of the desiredCapabilities object is defined by the [WebDriver standard](https://www.w3.org/TR/webdriver/#capabilities).
-Помимо стандартных опций ряд инструментов предоставляют специфичные в своих неймспейсах.
+In addition to standard options, some tools provide specific settings in their namespaces.
-Опции, специфичные для браузеров:
+Browser-specific options:
-- Chrome, `goog:chromeOptions` — [документации по опциям ChromeDriver](https://developer.chrome.com/docs/chromedriver/capabilities#recognized_capabilities)
-- Firefox, `moz:firefoxOptions` — [документации по Geckodriver](https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html)
-- Edge, `ms:edgeOptions` — [документации по EdgeDriver](https://learn.microsoft.com/en-us/microsoft-edge/webdriver-chromium/capabilities-edge-options)
+- Chrome, `goog:chromeOptions` — [ChromeDriver options documentation](https://developer.chrome.com/docs/chromedriver/capabilities#recognized_capabilities)
+- Firefox, `moz:firefoxOptions` — [Geckodriver documentation](https://firefox-source-docs.mozilla.org/testing/geckodriver/Capabilities.html)
+- Edge, `ms:edgeOptions` — [EdgeDriver documentation](https://learn.microsoft.com/en-us/microsoft-edge/webdriver-chromium/capabilities-edge-options)
-Опции, специфичные для браузерных гридов:
+Grid-specific browser options:
-- Sauce Labs, `sauce:options` — [документация](https://docs.saucelabs.com/dev/test-configuration-options/#w3c-webdriver-browser-capabilities--optional)
-- BrowserStack, `bstack:options` — [документация](https://www.browserstack.com/docs/automate/selenium/organize-tests)
-- TestingBot, `tb:options` — [документация](https://testingbot.com/support/other/test-options)
+- Sauce Labs, `sauce:options` — [documentation](https://docs.saucelabs.com/dev/test-configuration-options/#w3c-webdriver-browser-capabilities--optional)
+- BrowserStack, `bstack:options` — [documentation](https://www.browserstack.com/docs/automate/selenium/organize-tests)
+- TestingBot, `tb:options` — [documentation](https://testingbot.com/support/other/test-options)
-Опции, специфичные для некоторых инструментов автоматизации:
+Options specific to some automation tools:
-- Appium, `appium:*` — [документация](https://appium.github.io/appium.io/docs/en/writing-running-appium/caps/)
-- Selenoid, `selenoid:options` — [документация](https://github.com/aerokube/selenoid/blob/master/docs/special-capabilities.adoc)
+- Appium, `appium:*` — [documentation](https://appium.github.io/appium.io/docs/en/writing-running-appium/caps/)
+- Selenoid, `selenoid:options` — [documentation](https://github.com/aerokube/selenoid/blob/master/docs/special-capabilities.adoc)
-Пример расширенного задания `desiredCapabilities`:
+Example of an extended `desiredCapabilities` setting:
### gridUrl {#grid_url}
-URL грида (адрес, на котором слушает ChromeDriver/Selenium Standalone/Sauce Labs/и т.д.).
+Grid URL (the address where ChromeDriver/Selenium Standalone/Sauce Labs/etc. listens).
-По умолчанию: `http://localhost:4444/wd/hub`.
+Default: `http://localhost:4444/wd/hub`.
### baseUrl {#base_url}
-Базовый URL тестируемого сервиса. Позволяет более удобно использовать команды `browser.url`:
+Base URL of the service being tested. Allows for more convenient use of the `browser.url` commands:
-- если целевой адрес начинается с `/`, в начало будет добавлен `baseUrl` без path-части.
-- если целевой адрес не начинается с `/`, в начало будет добавлен весь `baseUrl`.
+- if the target address starts with `/`, `baseUrl` without the path part will be added at the beginning.
+- if the target address does not start with `/`, the entire `baseUrl` will be added at the beginning.
-По умолчанию: `http://localhost`.
+Default: `http://localhost`.
### browserWSEndpoint {#browser_ws_endpoint}
-Эндпойнт websocket-соединения для подключения к браузеру через [Chrome DevTools Protocol (CDP)][how-to-use-cdp]. Например, вы указываете `browserWSEndpoint: "ws://YOUR_HOST/devtools"`, к которому в конце будет добавлен идентификатор сеанса браузера: `ws://YOUR_HOST/devtools/12345`, где `12345` — это идентификатор сеанса.
+Websocket endpoint for connecting to the browser via [Chrome DevTools Protocol (CDP)][how-to-use-cdp]. For example, you specify `browserWSEndpoint: "ws://YOUR_HOST/devtools"`, to which the browser session identifier will be added at the end: `ws://YOUR_HOST/devtools/12345`, where `12345` is the session identifier.
-Значение по умолчанию: `null`. Означает, что Testplane попытается самостоятельно определить эндпойнт для веб-сокета.
+Default value: `null`. It means that Testplane will try to determine the websocket endpoint automatically.
### automationProtocol {#automation_protocol}
-Протокол общения с браузером. Доступные значения: `webdriver` и `devtools`. См. также [WebDriver vs CDP](../../reference/webdriver-vs-cdp). По умолчанию: `webdriver`.
+Protocol for communication with the browser. Available values: `webdriver` and `devtools`. See also [WebDriver vs CDP](../../reference/webdriver-vs-cdp). Default: `webdriver`.
### sessionEnvFlags {#session_env_flags}
-Флаги окружения задают протоколы, которые будут использоваться в созданной сессии браузера. По умолчанию флаги окружения автоматически устанавливаются в соответствии с заданными `desiredCapabilities`. Однако в редких случаях они могут принимать некорректные значения и тогда с помощью этой опции их можно будет задать явно.
+Environment flags set the protocols that will be used in the created browser session. By default, environment flags are automatically set according to the specified `desiredCapabilities`. However, in rare cases, they may have incorrect values and can be explicitly set using this option.
-Доступные флаги:
+Available flags:
- **Флаг**
- **Протоколы**
+ **Flag**
+ **Protocols**
`isW3C`
- [WebDriverProtocol](https://webdriver.io/docs/api/webdriver) или по умолчанию
+ [WebDriverProtocol](https://webdriver.io/docs/api/webdriver) or by default
[JsonWProtocol](https://webdriver.io/docs/api/jsonwp)
@@ -182,35 +181,33 @@ URL грида (адрес, на котором слушает ChromeDriver/Sele
`isMobile`
- [MJsonWProtocol](https://webdriver.io/docs/api/mjsonwp) и
+ [MJsonWProtocol](https://webdriver.io/docs/api/mjsonwp) and
[AppiumProtocol](https://webdriver.io/docs/api/appium)
`isSauce`
-
- [Команды конкретного поставщика Sauce Labs](https://webdriver.io/docs/api/saucelabs)
-
+ [Sauce Labs specific commands](https://webdriver.io/docs/api/saucelabs)
`isSeleniumStandalone`
- [Специальные команды для Selenium](https://webdriver.io/docs/api/selenium) при
- запуске тестов в _Selenium Grid_ или с помощью _Selenium Standalone Server_.
+ [Special Selenium commands](https://webdriver.io/docs/api/selenium) when running
+ tests in _Selenium Grid_ or using _Selenium Standalone Server_.
-Например:
+For example:
### windowSize {#window_size}
-Размеры окна браузера. Если не указывать, то размер окна будет зависеть от WebDriver'а. Можно указывать как строку, например, `800x1000` или как объект с ключами `width` и `height`, значениями которых нужно указать целые числа.
+Browser window size. If not specified, the window size will depend on WebDriver. Can be specified as a string, for example, `800x1000` or as an object with `width` and `height` keys with integer values.
-Например:
+For example:
```typescript
const browserOptions = {
@@ -218,7 +215,7 @@ const browserOptions = {
};
```
-и
+and
```typescript
const browserOptions = {
@@ -229,28 +226,28 @@ const browserOptions = {
};
```
-эквивалентны между собой.
+are equivalent.
- Настройка разрешения для браузера Opera или для мобильных браузеров не работает, так как эти
- браузеры используют только полноэкранный режим.
+ Setting the resolution for the Opera browser or for mobile browsers does not work as these
+ browsers only use fullscreen mode.
### headless {#headless}
-Позволяет управлять запуском браузера в _headless_ режиме (без видимого отображения браузера). Можно задавать как `boolean` значение, а с Chrome версии 112 — можно задавать как строку `"new" | "old"`. Подробнее про новый headless режим — [в блоге Chrome](https://developer.chrome.com/docs/chromium/new-headless).
+Allows managing the browser's headless mode (without visible browser display). Can be set as a `boolean` value, and from Chrome version 112, can be set as a string `"new" | "old"`. More about the new headless mode — [in Chrome blog](https://developer.chrome.com/docs/chromium/new-headless).
-По умолчанию: `null` (определяется на стороне браузера).
+Default: `null` (determined on the browser side).
-## Таймауты {#timeouts}
+## Timeouts {#timeouts}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -258,52 +255,52 @@ const browserOptions = {
[`waitTimeout`](#wait_timeout)
`number`
`3000`
- Таймаут для событий на веб-странице, в мс.
+ Timeout for events on the web page, in ms.
[`waitInterval`](#wait_interval)
`number`
`500`
- Интервал для событий на веб-странице, в мс.
+ Interval for events on the web page, in ms.
[`httpTimeout`](#http_timeout)
`number`
`30000`
- Таймаут для любых запросов к Selenium-серверу, в мс.
+ Timeout for any requests to the Selenium server, in ms.
[`urlHttpTimeout`](#url_http_timeout)
`number`
= _httpTimeout_
- Таймаут для запроса _/url_ к Selenium-серверу, в мс.
+ Timeout for the _/url_ request to the Selenium server, in ms.
[`pageLoadTimeout`](#page_load_timeout)
`number`
`20000`
- Таймаут для полной загрузки страницы, в мс.
+ Timeout for the full page load, in ms.
[`sessionRequestTimeout`](#session_request_timeout)
`number`
= _httpTimeout_
- Таймаут запроса сессии браузера, в мс.
+ Timeout for the browser session request, in ms.
[`sessionQuitTimeout`](#session_quit_timeout)
`number`
`5000`
- Таймаут для завершения сессии, в мс.
+ Timeout for ending the session, in ms.
[`testTimeout`](#test_timeout)
`number`
`null`
- Таймаут для прогона теста, в мс. Если значение не задано, то будет использован общий
- таймаут для всех браузеров, который задается настройкой
- [system.mochaOpts.timeout][system-mocha-opts].
+ Timeout for running the test, in ms. If the value is not set, the general timeout
+ for all browsers will be used, which is set with the
+ [system.mochaOpts.timeout][system-mocha-opts] setting.
@@ -311,55 +308,55 @@ const browserOptions = {
### waitTimeout {#wait_timeout}
-Таймаут для событий на веб-странице, в миллисекундах. По умолчанию: `3000` мс (3 секунды).
+Timeout for events on the web page, in milliseconds. Default: `3000` ms (3 seconds).
-Применяется в команде [waitUntil][element-wait-until], которая используется во всех `waitFor*`-командах при поиске заданного элемента на странице.
+Applied in the [waitUntil][element-wait-until] command, which is used in all `waitFor*` commands when searching for a specified element on the page.
-Например, при выполнении команды `browser.$('.element').click()` подкоманда `$('element')` будет по умолчанию ждать существования элемента до 3000 мс, прежде чем кликнуть по нему.
+For example, when executing the `browser.$('.element').click()` command, the `$('element')` subcommand will, by default, wait for the element's existence up to 3000 ms before clicking it.
### waitInterval {#wait_interval}
-Интервал для событий на веб-странице, в миллисекундах. По умолчанию: `500` мс.
+Interval for events on the web page, in milliseconds. Default: `500` ms.
-Применяется в команде [waitUntil][element-wait-until], которая используется во всех `waitFor*`-командах при поиске заданного элемента на странице.
+Applied in the [waitUntil][element-wait-until] command, which is used in all `waitFor*` commands when searching for a specified element on the page.
-Например, при выполнении команды `browser.$('.element').click()` подкоманда `$('element')` будет по умолчанию проверять существование элемента каждые 500 мс.
+For example, when executing the `browser.$('.element').click()` command, the `$('element')` subcommand will, by default, check for the existence of the element every 500 ms.
### httpTimeout {#http_timeout}
-Таймаут для любых запросов к Selenium-серверу, в миллисекундах. По умолчанию: `30000` мс.
+Timeout for any requests to the Selenium server, in milliseconds. Default: `30000` ms.
### urlHttpTimeout {#url_http_timeout}
-Таймаут для запроса `/url` к Selenium-серверу, в миллисекундах. Иногда при открытии ссылки на стороне сервера выполняется масса логики в мидлварах, из-за чего ссылка долго открывается. Чтобы не поднимать из-за этого таймаут для всех команд, Testplane позволяет настроить отдельный таймаут для запроса `/url`.
+Timeout for the `/url` request to the Selenium server, in milliseconds. Sometimes, when opening a link on the server side, a lot of logic is executed in middleware, causing the link to take a long time to open. To avoid increasing the timeout for all commands due to this, Testplane allows you to set a separate timeout for the `/url` request.
### pageLoadTimeout {#page_load_timeout}
-Таймаут для полной загрузки страницы, в миллисекундах. По умолчанию: `20000` мс.
+Timeout for the full page load, in milliseconds. Default: `20000` ms.
### sessionRequestTimeout {#session_request_timeout}
-Таймаут для запроса сессии браузера, в миллисекундах. По умолчанию берет значение настройки `httpTimeout`.
+Timeout for the browser session request, in milliseconds. By default, it takes the value of the `httpTimeout` setting.
### sessionQuitTimeout {#session_quit_timeout}
-Таймаут для завершения сессии, в миллисекундах. По умолчанию: `5000` мс.
+Timeout for ending the session, in milliseconds. Default: `5000` ms.
### testTimeout {#test_timeout}
-Таймаут для прогона теста, в миллисекундах. При использовании для набора тестов _(suite),_ будет применяться для всех тестов и хуков внутри этого набора тестов.
+Timeout for running the test, in milliseconds. When used for a test suite, it will apply to all tests and hooks within that suite.
-Если значение не задано, то будет использован общий таймаут для всех браузеров, который задается настройкой [system.mochaOpts.timeout][system-mocha-opts].
+If the value is not set, the general timeout for all browsers, set with the [system.mochaOpts.timeout][system-mocha-opts] setting, will be used.
-## Запуск тестов {#test_run_settings}
+## Running Tests {#test_run_settings}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -367,31 +364,31 @@ const browserOptions = {
[`sessionsPerBrowser`](#sessions_per_browser)
`number`
`1`
- Число сессий, которые будут запущены одновременно для конкретного браузера.
+ Number of sessions that will be run simultaneously for a particular browser.
[`testsPerSession`](#tests_per_session)
`number`
`Infinity`
- Сколько тестов можно запускать последовательно в одной сессии браузера. Параметр
- ограничивает переиспользование сессии, чтобы не допустить падения тестов из-за
- деградации браузера, и не имеет отношения к параллельному запуску тестов.
+ How many tests can be run sequentially in one browser session. This parameter limits
+ the reuse of the session to prevent test failures due to browser degradation, and
+ has nothing to do with parallel test execution.
[`retry`](#retry)
`number`
`0`
- Сколько раз нужно перезапускать падающий тест.
+ How many times to retry a failing test.
[`shouldRetry`](#should_retry)
`(data: FailedTestData) => boolean`
- _см. описание_
+ _see description_
- Функция, которая определяет нужен ли ретрай. По умолчанию задается функция, которая
- возвращает _true_, если _retry > 0,_ и _false_, если _retry == 0_.
+ Function that determines if a retry is needed. By default, a function is set that
+ returns _true_ if _retry > 0_ and _false_ if _retry == 0_.
@@ -399,8 +396,8 @@ const browserOptions = {
`boolean`
`false`
- Гарантировать строгий порядок тестов. Если _true_, то функция API
- _testplane.readTests_ будет всегда возвращать один и тот же результат.
+ Guarantee strict order of tests. If _true_, the API function _testplane.readTests_
+ will always return the same result.
@@ -408,48 +405,48 @@ const browserOptions = {
`boolean`
`false`
- Позволяет сделать браузер пассивным. В пассивных браузерах тесты не запускаются по
- умолчанию. _Доступна с testplane@8.16.0_.
+ Allows making the browser passive. In passive browsers, tests do not run by default.
+ _Available since testplane@8.16.0_.
[`openAndWaitOpts`](#open-and-wait-opts)
`OpenAndWaitOpts`
- _см. описание_
- Позволяет задать дефолтные опции для команды `browser.openAndWait`.
+ _see description_
+ Allows setting default options for the `browser.openAndWait` command.
[`isolation`](#isolation)
`boolean`
- `true` для Chrome 93+
- Включает режим изоляции с помощью браузерных контекстов.
+ `true` for Chrome 93+
+ Enables isolation mode using browser contexts.
### sessionsPerBrowser {#sessions_per_browser}
-Число сессий, которые будут запущены одновременно для конкретного браузера. По умолчанию: `1`.
+Number of sessions that will be run simultaneously for a particular browser. Default: `1`.
### testsPerSession {#tests_per_session}
-Параметр определяет сколько тестов можно запускать последовательно в одной сессии браузера. Может быть полезно, чтобы ограничить переиспользование сессии. Если одну и ту же сессию браузера использовать много раз для прогона различных тестов, то в какой-то момент браузер может начать деградировать. И это начнет влиять на прогон тестов, приводя к их падениям. После того как будет достигнут лимит тестов, сессия будет закрыта и запустится новая сессия.
+This parameter specifies how many tests can be run sequentially in one browser session. It can be useful to limit the reuse of the session. If the same browser session is used many times for running different tests, at some point the browser may start to degrade. This can affect the test run, leading to failures. Once the limit of tests is reached, the session will be closed and a new session will start.
-По умолчанию: `Infinity`. То есть сессия будет переиспользована бесконечное число раз. Однако в реальной эксплуатации возможны ограничения со стороны грида, в рамках которого запускаются браузеры. Например, грид может ограничивать со своей стороны максимальное время жизни одной сессии, и тогда количество тестов, которые окажутся выполненными в рамках одной сессии, будет определяться временем её жизни.
+Default: `Infinity`. This means the session will be reused an infinite number of times. However, in real operations, there may be limitations from the grid on which the browsers are running. For example, the grid may limit the maximum lifetime of a session, and then the number of tests that can be run within a session will be determined by its lifetime.
- Будьте внимательны: данный параметр не имеет отношения к параллельному запуску тестов.
+ Be careful: this parameter has nothing to do with parallel test execution.
### retry {#retry}
-Сколько раз нужно запустить тест снова, если он будет падать. По умолчанию: `0`.
+How many times to retry a test if it fails. Default: `0`.
### shouldRetry {#should_retry}
-Функция, которая определяет нужен ли ретрай. Должна возвращать значение типа `Boolean`. По умолчанию задается функция, которая возвращает `true`, если ещё остались доступные ретраи, и `false`, если достигнут предел ретраев для теста (см. настройку [retry](#retry)).
+Function that determines if a retry is needed. Should return a `Boolean` value. By default, a function is set that returns `true` if there are still retries available, and `false` if the retry limit for the test has been reached (see [retry](#retry) setting).
-Аргументом данной функции является объект со следующими полями:
+The argument of this function is an object with the following fields:
```typescript
interface FailedTestData {
@@ -465,24 +462,24 @@ interface FailedTestData {
### strictTestsOrder {#strict_test_order}
-Данная опция включает гарантию строгого порядка чтения тестов. По умолчанию: `false`.
+This option guarantees strict order of reading tests. Default: `false`.
### passive {#passive}
- Доступна с testplane@8.16.0. Не работает вместе с устаревшим плагином
+ Available since testplane@8.16.0. Does not work with the deprecated plugin
[hermione-passive-browsers](https://github.com/gemini-testing/testplane-passive-browsers).
-Позволяет сделать браузер пассивным. В пассивных браузерах тесты не запускаются по умолчанию. С помощью хелпера [`testplane.also.in`][testplane-also-in-helper] можно включить тест или сьют, перед которым он указан.
+Allows making the browser passive. In passive browsers, tests do not run by default. Using the helper [`testplane.also.in`][testplane-also-in-helper], you can enable a test or suite before it is run.
-По умолчанию: `false`.
+Default: `false`.
### openAndWaitOpts {#open-and-wait-opts}
-Позволяет задать опции, которые нужно использовать при вызове команды [`browser.openAndWait`](../../commands/browser/openAndWait).
+Allows setting options to be used when calling the [`browser.openAndWait`](../../commands/browser/openAndWait) command.
-По умолчанию:
+Default:
```typescript
const defaultOpenAndWaitOpts = {
@@ -495,34 +492,34 @@ const defaultOpenAndWaitOpts = {
### isolation {#isolation}
-Включает запуск тестов в [изолированных браузерных контекстах](https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createBrowserContext). Это означает, что `testsPerSession` может быть задан `Infinity`, чтобы запускать все тесты в одной сессии и значительно ускорить прогон тестов.
+Enables running tests in [isolated browser contexts](https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createBrowserContext). This means that `testsPerSession` can be set to `Infinity` to run all tests in one session and significantly speed up the test run.
-Работает начиная с Chrome 93 и выше.
+Works starting from Chrome 93 and higher.
-По умолчанию: `true` для Chrome 93 и выше, `false` иначе.
+Default: `true` for Chrome 93 and higher, `false` otherwise.
-## Информация о тесте и падении {#info_when_test_fails}
+## Test and Failure Information {#info_when_test_fails}
- **Параметр** **Тип** **По умолчанию** **Описание**
+ **Parameter** **Type** **Default** **Description**
- [`meta`](#meta) `Record` _N/A_ Дополнительные данные, которые будут возвращаться командой _getMeta()_.
- [`takeScreenshotOnFails`](#take_screenshot_on_fails) `ScreenshotOnFails` `{ testFail: true, assertViewFail: true }` Определяет снимать ли скриншот страницы браузера _(Page Screenshot)_ при падении теста, а также при падении команды _assertView_.
- [`takeScreenshotOnFailsMode`](#take_screenshot_on_fails_mode) `"viewport" | "fullpage"` `"fullpage"` Режим снятия скриншота при падении теста.
- [`takeScreenshotOnFailsTimeout`](#take_screenshot_on_fails_timeout) `number` `5000` Таймаут для снятия скриншота страницы браузера _(Page Screenshot)_ при падении теста, в мс.
- [`saveHistoryMode`](#save_history_mode) `"all" | "none" | "onlyFailed"` `"all"` Сохранять историю всех выполненных команд.
+ [`meta`](#meta) `Record` _N/A_ Additional data that will be returned by the _getMeta()_ command.
+ [`takeScreenshotOnFails`](#take_screenshot_on_fails) `ScreenshotOnFails` `{ testFail: true, assertViewFail: true }` Determines whether to take a screenshot of the browser page _(Page Screenshot)_ on test failure, as well as on _assertView_ command failure.
+ [`takeScreenshotOnFailsMode`](#take_screenshot_on_fails_mode) `"viewport" | "fullpage"` `"fullpage"` Mode for taking a screenshot upon test failure.
+ [`takeScreenshotOnFailsTimeout`](#take_screenshot_on_fails_timeout) `number` `5000` Timeout for taking a screenshot of the browser page _(Page Screenshot)_ upon test failure, in ms.
+ [`saveHistoryMode`](#save_history_mode) `"all" | "none" | "onlyFailed"` `"all"` Save the history of all commands executed.
### meta {#meta}
-Дополнительные данные, которые будут возвращаться командой `getMeta()`. Данные можно добавлять также «на лету» с помощью команды `setMeta()`: до, во время или после завершения прогона теста.
+Additional data that will be returned by the `getMeta()` command. Data can also be added "on the fly" using the `setMeta()` command: before, during, or after the test run.
### takeScreenshotOnFails {#take_screenshot_on_fails}
-Опция задается в виде объекта:
+This option is set as an object:
```typescript
interface ScreenshotOnFails {
@@ -531,38 +528,38 @@ interface ScreenshotOnFails {
}
```
-Данные ключи определяют нужно ли снимать скриншот страницы браузера _(Page Screenshot)_ при падении теста и при падении команды `assertView` соответственно. В случае `testFail` учитываются все падения тестов кроме падений из-за команд `assertView`.
+These keys determine whether to take a screenshot of the browser page _(Page Screenshot)_ upon test failure and upon `assertView` command failure, respectively. In the case of `testFail`, all test failures except those due to `assertView` commands are taken into account.
-По умолчанию: `{ testFail: true, assertViewFail: true }`.
+Default: `{ testFail: true, assertViewFail: true }`.
### takeScreenshotOnFailsMode {#take_screenshot_on_fails_mode}
-Режим снятия скриншота страницы браузера при падении теста. Доступные значения: `viewport` и `fullpage`:
+Mode for taking a screenshot of the browser page upon test failure. Available values: `viewport` and `fullpage`:
-- `viewport` — снять скриншот текущего вьюпорта.
-- `fullpage` — снять скриншот всей страницы браузера.
+- `viewport` — take a screenshot of the current viewport.
+- `fullpage` — take a screenshot of the entire browser page.
-По умолчанию: `fullpage`.
+Default: `fullpage`.
### takeScreenshotOnFailsTimeout {#take_screenshot_on_fails_timeout}
-Таймаут для снятия скриншота страницы браузера при падении теста, в миллисекундах. По умолчанию: `5000` мс.
+Timeout for taking a screenshot of the browser page upon test failure, in milliseconds. Default: `5000` ms.
### saveHistoryMode {#save_history_mode}
-Доступна с hermione@7.
+Available since hermione@7.
-Сохранять историю всех выполненных команд. По умолчанию: `all`.
+Save the history of all commands executed. Default: `all`.
-Доступные значения:
+Available values:
-- `all` — история включена.
-- `none` — история отключена.
-- `onlyFailed` — история сохраняется только для упавших тестов.
+- `all` — history is enabled.
+- `none` — history is disabled.
+- `onlyFailed` — history is saved only for failed tests.
-Некоторые плагины могут полагаться на эту историю, например, [html-reporter][html-reporter].
+Some plugins may rely on this history, such as [html-reporter][html-reporter].
-История доступна из следующих событий — `TEST_END`, `TEST_PASS`, `TEST_FAIL` — через `payload`. Пример плагина, который использует историю:
+History is accessible from the following events — `TEST_END`, `TEST_PASS`, `TEST_FAIL` — via `payload`. Example of a plugin that uses the history:
```typescript
exports = testplane => {
@@ -572,15 +569,15 @@ exports = testplane => {
};
```
-## Подготовка к снятию скриншотов {#prepare_to_take_screenshot}
+## Preparing for Screenshot Taking {#prepare_to_take_screenshot}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -588,37 +585,33 @@ exports = testplane => {
[`calibrate`](#calibrate)
`boolean`
`false`
- Выполнять калибровку перед снятием скриншота.
+ Perform calibration before taking a screenshot.
[`orientation`](#orientation)
`string`
`null`
-
- Ориентация окна браузера, которую нужно выставлять перед запуском каждого теста.
-
+ Browser window orientation to set before each test run.
[`waitOrientationChange`](#wait_orientation_change)
`boolean`
`true`
- Ждать реальной смены ориентации.
+ Wait for actual orientation change.
[`resetCursor`](#reset_cursor)
`boolean`
`true`
-
- Перемещать курсор в точку _(0, 0)_ в координатах _body_ перед каждым запуском теста.
-
+ Move cursor to point _(0, 0)_ in _body_ coordinates before each test run.
[`screenshotsDir`](#screenshots_dir)
`string | (test: Test) => string`
`"./testplane/screens"`
- Папка для сохранения эталонных скриншотов командой _assertView_. По умолчанию
- _testplane/screens_ относительно рабочей папки: _process.cwd()_.
+ Folder for saving reference screenshots with the _assertView_ command. By default
+ _testplane/screens_ relative to the working directory: _process.cwd()_.
@@ -626,36 +619,35 @@ exports = testplane => {
### calibrate {#calibrate}
-Выполнять калибровку перед снятием скриншота. В некоторых реализациях WebDriver'а при снятии скриншота на изображение могут попадать элементы UI самого браузера. Калибровка позволяет решить данную проблему. По умолчанию: `false`.
+Perform calibration before taking a screenshot. In some WebDriver implementations, when taking a screenshot, UI elements of the browser itself may appear on the image. Calibration helps solve this issue. Default: `false`.
### orientation {#orientation}
-Ориентация окна браузера, которую нужно выставлять перед запуском каждого теста. Доступные значения: `landscape`, `portrait`, `null`. По умолчанию: `null`.
+Browser window orientation to set before each test run. Available values: `landscape`, `portrait`, `null`. Default: `null`.
-
- Это зависит от того, в какой ориентации у вас выполняется большинство тестов. Если большая часть
- тестов у вас выполняется в режиме _landscape,_ то и значение _orientation_ нужно выставлять в
- _landscape._ Тогда тесты, которым нужна ориентация _portrait,_ будут самостоятельно выставлять
- нужную им ориентацию. А опция _orientation_ будет гарантировать, что для всех остальных тестов
- ориентация будет выставлена в _landscape_ автоматически перед их запуском, без необходимости
- задавать её в каждом тесте самостоятельно.
+
+ It depends on the orientation in which most of your tests are executed. If the majority of tests
+ are run in _landscape_ mode, set the _orientation_ value to _landscape_. Then, tests that
+ require _portrait_ orientation will set their desired orientation themselves. The _orientation_
+ option will ensure that all other tests will be run with the _landscape_ orientation
+ automatically without needing to set it in each test.
### waitOrientationChange {#wait_orientation_change}
-Ждать реальной смены ориентации. По умолчанию: `true`. При установке в значение `true` testplane гарантирует, что команда задания ориентации `setOrientation` будет завершаться только после реального изменения ориентации на заданную.
+Wait for actual orientation change. Default: `true`. When set to `true`, testplane ensures that the `setOrientation` command will complete only after the orientation is actually changed to the specified one.
### resetCursor {#reset_cursor}
-Перемещать курсор в точку _(0, 0)_ в координатах _body_ перед каждым запуском теста. По умолчанию: `true`. Может потребоваться в тех случаях, когда положение курсора по умолчанию влияет на выполнение тестов. Например, когда из-за курсора всплывает какая-нибудь подсказка _(hint)_, которая «портит» снимаемый скриншот.
+Move the cursor to point _(0, 0)_ in _body_ coordinates before each test run. Default: `true`. It may be needed in cases where the default cursor position affects test execution. For example, when a tooltip _(hint)_ pops up because of the cursor, which "spoils" the screenshot being taken.
- Рекомендуется сбрасывать курсор для десктопных браузеров и не сбрасывать для мобильных.
+ It is recommended to reset the cursor for desktop browsers and not for mobile ones.
### screenshotsDir {#screenshots_dir}
-Папка для сохранения эталонных скриншотов командой `assertView`. По умолчанию это папка `testplane/screens` относительно рабочей папки: `process.cwd()`. Значением данной опции может быть также функция, которой передается один аргумент — инстанс теста, внутри которого была вызвана команда `assertView`, например:
+Folder for saving reference screenshots with the `assertView` command. By default, it is the `testplane/screens` folder relative to the working directory: `process.cwd()`. The value of this option can also be a function that takes one argument — the test instance within which the `assertView` command was called, for example:
```typescript
const browserOptions = {
@@ -663,15 +655,15 @@ const browserOptions = {
};
```
-## Снятие и сравнение скриншотов {#taking_screenshots}
+## Taking and Comparing Screenshots {#taking_screenshots}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -680,8 +672,8 @@ const browserOptions = {
`number`
`2.3`
- Максимально разрешенная разница
- [CIEDE2000](http://en.wikipedia.org/wiki/Color_difference#CIEDE2000) между цветами.
+ Maximum allowed [CIEDE2000](http://en.wikipedia.org/wiki/Color_difference#CIEDE2000)
+ difference between colors.
@@ -689,56 +681,56 @@ const browserOptions = {
`number`
`4`
- Задает чувствительность определения антиалиасинга, который будет игнорироваться при
- сравнении скриншотов.
+ Sets the sensitivity for detecting antialiasing, which will be ignored when
+ comparing screenshots.
[`compareOpts`](#compare_opts)
`CompareOpts`
- _[см. ниже](#compare_opts)_
- Опции для сравнения изображений.
+ _[see below](#compare_opts)_
+ Options for image comparison.
[`buildDiffOpts`](#build_diff_opts)
`BuildDiffOpts`
- _[см. ниже](#build_diff_opts)_
- Опции для построения диффа (изображения с разницей между скриншотами).
+ _[see below](#build_diff_opts)_
+ Options for building the diff (image showing differences between screenshots).
[`assertViewOpts`](#assert_view_opts)
`AssertViewOpts`
- _[см. ниже](#assert_view_opts)_
- Опции для команды _assertView_, которые будут использоваться по умолчанию.
+ _[see below](#assert_view_opts)_
+ Default options for the _assertView_ command.
[`compositeImage`](#composite_image)
`boolean`
`true`
- Позволяет тестировать элементы, не влезающие во вьюпорт по высоте.
+ Allows testing elements that do not fit within the viewport height.
[`screenshotMode`](#screenshot_mode)
`"auto" | "fullpage" | "viewport"`
`"auto"`
- Режим снятия скриншота.
+ Screenshot mode.
[`screenshotDelay`](#screenshot_delay)
`number`
`0`
- Задержка перед снятием скриншота, в мс.
+ Delay before taking the screenshot, in ms.
### tolerance {#tolerance}
-Максимально разрешенная разница [CIEDE2000](http://en.wikipedia.org/wiki/Color_difference#CIEDE2000) между цветами. Используется только в нестрогом режиме. По умолчанию `2.3`. Начиная со значения `2.3` разница в цветах становится уже различимой человеческим глазом. Чем меньше это значение, тем строже будет сравнение скриншотов.
+Maximum allowed [CIEDE2000](http://en.wikipedia.org/wiki/Color_difference#CIEDE2000) difference between colors. Used only in non-strict mode. Default: `2.3`. Starting from the value `2.3`, the color difference becomes perceptible to the human eye. The smaller the value, the stricter the screenshot comparison.
-Не рекомендуется увеличивать значение `tolerance` на глобальном уровне. Попробуйте вместо этого задавать `tolerance` для конкретных наборов тестов или состояний.
+It is not recommended to increase the `tolerance` value globally. Instead, try setting `tolerance` for specific test suites or states.
-Так можно снять скриншот для конкретного состояния с индивидуальной настройкой `tolerance`:
+Here's how to take a screenshot for a specific state with an individual `tolerance` setting:
```typescript
it("some-test", async function (browser) {
@@ -749,15 +741,15 @@ it("some-test", async function (browser) {
### antialiasingTolerance {#antialiasing_tolerance}
-Задает чувствительность определения антиалиасинга, который будет игнорироваться при сравнении скриншотов.
+Sets the sensitivity for detecting antialiasing, which will be ignored when comparing screenshots.
-Читайте подробнее об этой опции в пакете [looks-same](https://github.com/gemini-testing/looks-same#comparing-images-with-ignoring-antialiasing).
+Read more about this option in the [looks-same](https://github.com/gemini-testing/looks-same#comparing-images-with-ignoring-antialiasing) package.
### compareOpts {#compare_opts}
-Дополнительные опции для сравнения изображений. Смотрите в документации пакета [looks-same](https://github.com/gemini-testing/looks-same#comparing-images) список доступных опций.
+Additional options for image comparison. See the list of available options in the [looks-same](https://github.com/gemini-testing/looks-same#comparing-images) documentation.
-По умолчанию:
+Default:
```typescript
const defaultCompareOpts = {
@@ -769,7 +761,7 @@ const defaultCompareOpts = {
### buildDiffOpts {#build_diff_opts}
-Дополнительные опции для построения диффа (изображения с разницей между скриншотами). Смотрите в документации пакета [looks-same](https://github.com/gemini-testing/looks-same#building-diff-image) список доступных опций. По умолчанию:
+Additional options for building the diff (image showing the differences between screenshots). See the list of available options in the [looks-same](https://github.com/gemini-testing/looks-same#building-diff-image) documentation. Default:
```typescript
const defaultBuildDiffOpts = {
@@ -780,13 +772,13 @@ const defaultBuildDiffOpts = {
### assertViewOpts {#assert_view_opts}
-Опции для команды снятия и сравнения скриншотов `assertView`, которые будут использоваться по умолчанию. Могут быть перезаписаны при вызове команды `assertView`.
+Options for the `assertView` command to take and compare screenshots, which will be used by default. They can be overridden when calling the `assertView` command.
-Доступны следующие опции для `assertView`:
+Available `assertView` options:
-По умолчанию:
+Default:
```typescript
const defaultAssertViewOpts = {
@@ -800,74 +792,74 @@ const defaultAssertViewOpts = {
### compositeImage {#composite_image}
-Позволяет тестировать элементы, не влезающие во вьюпорт по высоте. По умолчанию: `true`. Если тестируемый блок по высоте больше вьюпорта, то происходит склеивание изображений нескольких вьюпортов в одно изображение.
+Allows testing elements that do not fit within the viewport height. Default: `true`. If the tested block is taller than the viewport, the images of several viewports are stitched together into one image.
### screenshotMode {#screenshot_mode}
-Режим снятия скриншотов. По умолчанию: `auto`.
+Screenshot mode. Default: `auto`.
-Возможные значения:
+Possible values:
-- `"auto"` — режим будет определен автоматически.
-- `"fullpage"` — будет снят скриншот всей страницы.
-- `"viewport"` — будет снят скриншот только вьюпорта.
+- `"auto"` — the mode will be determined automatically.
+- `"fullpage"` — a screenshot of the entire page will be taken.
+- `"viewport"` — only the viewport will be captured in the screenshot.
-По умолчанию для android-браузеров выставляется режим `viewport`, чтобы обойти [багу в Chromium](https://bugs.chromium.org/p/chromedriver/issues/detail?id=2853).
+By default, the `viewport` mode is set for android browsers to bypass a [bug in Chromium](https://bugs.chromium.org/p/chromedriver/issues/detail?id=2853).
-В десктопных браузерах _прямо из коробки_ есть возможность получить изображение всей страницы, а не только видимого вьюпорта. При этом не нужно вручную склеивать изображения отдельных вьюпортов в один большой скриншот. Однако на мобильных устройствах такой функциональности нет.
+In desktop browsers, it is possible to get an image of the entire page out of the box, without manually stitching images of separate viewports into one large screenshot. However, on mobile devices, there is no such functionality.
### screenshotDelay {#screenshot_delay}
-Задержка в миллисекундах перед снятием скриншота. По умолчанию: `0` мс. Задержка может пригодиться в тех случаях, когда на странице есть элементы, использующие анимацию, или скроллбар, который исчезает не сразу и попадает на результирующий скриншот.
+Delay in milliseconds before taking the screenshot. Default: `0` ms. The delay can be helpful in cases where the page contains elements using animation or a scrollbar that does not disappear immediately and affects the resulting screenshot.
-## Параметры запросов и ответов {#params_of_requests_and_responses}
+## Request and Response Parameters {#params_of_requests_and_responses}
- **Параметр** **Тип** **По умолчанию** **Описание**
+ **Parameter** **Type** **Default** **Description**
- [`agent`](#agent) `object` `null` Позволяет задать свои [агенты][got-agent] для запросов по _http, https, http2_.
- [`headers`](#headers) `Record` `null` Позволяет настроить [заголовки][got-headers], которые будут передаваться в каждом запросе к WebDriver.
- [`transformRequest`](#transform_request) `TransformRequestFn` `null` Позволяет перехватывать и преобразовывать [опции][got-options] http-запроса перед запросом к WebDriver.
- [`transformResponse`](#transform_response) `TransformResponseFn` `null` Позволяет перехватывать и преобразовывать [http-ответ][got-response], полученный от WebDriver.
- [`strictSSL`](#strict_ssl) `boolean` `null` Должен ли SSL-сертификат быть действительным.
+ [`agent`](#agent) `object` `null` Allows setting custom [agents][got-agent] for _http, https, http2_ requests.
+ [`headers`](#headers) `Record` `null` Allows setting custom [headers][got-headers] to be sent with each WebDriver request.
+ [`transformRequest`](#transform_request) `TransformRequestFn` `null` Allows intercepting and transforming [http-request options][got-options] before the request is sent to WebDriver.
+ [`transformResponse`](#transform_response) `TransformResponseFn` `null` Allows intercepting and transforming [http-response][got-response] received from WebDriver.
+ [`strictSSL`](#strict_ssl) `boolean` `null` Whether the SSL certificate must be valid.
### agent {#agent}
-Позволяет задать свои [агенты][got-agent] для запросов по _http, https, http2_. По умолчанию: `null` (в таком случае будут использованы дефолтные http-агенты пакета [got][got]).
+Allows setting custom [agents][got-agent] for _http, https, http2_ requests. Default: `null` (in this case, default http agents from the [got][got] package will be used).
### headers {#headers}
-Позволяет настроить [заголовки][got-headers], которые будут передаваться в каждом запросе к WebDriver. По умолчанию: `null`. Смотрите также в [документации](https://webdriver.io/docs/options/#headers) `WebDriverIO`.
+Allows setting custom [headers][got-headers] to be sent with each WebDriver request. Default: `null`. See also in the `WebDriverIO` [documentation](https://webdriver.io/docs/options/#headers).
- Данные заголовки не передаются в запросы из браузера, в котором выполняются тесты. Они
- передаются только в запросах к WebDriver.
+ These headers are not sent in requests from the browser where the tests are executed. They are
+ sent only in requests to WebDriver.
### transformRequest {#transform_request}
-Позволяет перехватывать и преобразовывать [опции][got-options] http-запроса перед запросом к WebDriver. По умолчанию: `null`. Если передается функция, то первым аргументом ей будет передан объект `RequestOptions`. В ответ функция должна будет вернуть модифицированный `RequestOptions`.
+Allows intercepting and transforming [http-request options][got-options] before the request is sent to WebDriver. Default: `null`. If a function is passed, the `RequestOptions` object will be passed as the first argument. The function should return the modified `RequestOptions`.
-Тип функции:
+Function type:
```typescript
type TransformRequestFn = (req: RequestOptions) => RequestOptions;
```
-По умолчанию эта функция используется для генерации заголовка `X-Request-ID`. Этот заголовок имеет формат `${FIRST_X_REQ_ID}__${LAST_X_REQ_ID}`, где:
+By default, this function is used to generate the `X-Request-ID` header. This header has the format `${FIRST_X_REQ_ID}__${LAST_X_REQ_ID}`, where:
-- `FIRST_X_REQ_ID` - уникальный UUID для каждого теста (разный для каждого ретрая), позволяет найти все запросы, относящиеся к конкретному запуску теста;
-- `LAST_X_REQ_ID` - уникальный UUID для каждого запроса к браузеру в рамках одного теста, в сочетании с `FIRST_X_REQ_ID` позволяет найти конкретный запрос.
+- `FIRST_X_REQ_ID` - a unique UUID for each test (different for each retry), allows finding all requests related to the specific test run;
+- `LAST_X_REQ_ID` - a unique UUID for each request to the browser within one test, in combination with `FIRST_X_REQ_ID` it allows finding the specific request.
-Пример значения: `2f31ffb7-369d-41f4-bbb8-77744615d2eb__e8d011d8-bb76-42b9-b80e-02f03b8d6fe1`.
+Example value: `2f31ffb7-369d-41f4-bbb8-77744615d2eb__e8d011d8-bb76-42b9-b80e-02f03b8d6fe1`.
-Заголовок `X-Request-ID` может быть полезен для отладки проблемных запросов, если вы используете собственный браузерный грид и сохраняете логи запросов.
+The `X-Request-ID` header can be useful for debugging problematic requests if you use your own browser grid and save request logs.
-Вы можете генерировать `X-Request-ID` в своем формате используя `transformRequest`. Пример:
+You can generate `X-Request-ID` in your format using `transformRequest`. Example:
```typescript
const transformRequest = req => {
@@ -879,9 +871,9 @@ const transformRequest = req => {
### transformResponse {#transform_response}
-Позволяет перехватывать и преобразовывать [http-ответ][got-response], полученный от WebDriver. По умолчанию: `null`. Если передается функция, то первым аргументом ей будет передан объект `Response`, а вторым — `RequestOptions`. В ответ функция должна будет вернуть модифицированный `Response`.
+Allows intercepting and transforming the [http-response][got-response] received from WebDriver. Default: `null`. If a function is passed, the `Response` object will be passed as the first argument, and the `RequestOptions` as the second argument. The function should return the modified `Response`.
-Тип функции:
+Function type:
```typescript
type TransformResponsetFn = (res: Response, req: RequestOptions) => Response;
@@ -889,21 +881,21 @@ type TransformResponsetFn = (res: Response, req: RequestOptions) => Response;
### strictSSL {#strict_ssl}
-Должен ли SSL-сертификат быть действительным. Если не задано, будет использовано [значение по умолчанию][strict-ssl] от WebDriverIO.
+Whether the SSL certificate must be valid. If not set, the [default value][strict-ssl] from WebDriverIO will be used.
-## Облачные настройки {#cloud_settings}
+## Cloud Settings {#cloud_settings}
-Следующие настройки могут пригодиться, если вы захотите запускать свои testplane-тесты в браузерах облачных сервисов.
+The following settings may be useful if you want to run your testplane tests in browsers of cloud services.
-Примером такого облачного сервиса может быть [SauceLabs][sauce-labs], который [может предоставить](https://saucelabs.com/platform/cross-browser-testing) вам как десктопные, так и мобильные браузеры для запуска тестов в них.
+An example of such a cloud service could be [SauceLabs][sauce-labs], which [can provide](https://saucelabs.com/platform/cross-browser-testing) you with both desktop and mobile browsers for running tests.
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -911,44 +903,44 @@ type TransformResponsetFn = (res: Response, req: RequestOptions) => Response;
`user`
`string`
`null`
- Имя пользователя в облачном сервисе.
+ Username in the cloud service.
`key`
`string`
`null`
- Ключ доступа или секретный ключ для доступа в облачный сервис.
+ Access key or secret key for accessing the cloud service.
`region`
`string`
`null`
- Позволяет выбрать различные датацентры в облачном сервисе.
+ Allows selecting different data centers in the cloud service.
`headless`
`string`
`null`
- Позволяет запускать headless-браузер в облачном сервисе.
+ Allows running a headless browser in the cloud service.
### user {#user}
-Имя пользователя в облачном сервисе. По умолчанию: `null`.
+Username in the cloud service. Default: `null`.
### key {#key}
-Ключ доступа или секретный ключ для доступа в облачный сервис. По умолчанию: `null`.
+Access key or secret key for accessing the cloud service. Default: `null`.
### region {#region}
-Позволяет выбрать различные датацентры в облачном сервисе. По умолчанию: `null`.
+Allows selecting different data centers in the cloud service. Default: `null`.
### headless {#headless}
-Позволяет запускать headless-браузер в облачном сервисе. По умолчанию: `null`.
+Allows running a headless browser in the cloud service. Default: `null`.
[desired-caps]: https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities
[html-reporter]: ../../html-reporter/html-reporter-setup
diff --git a/docs/config/dev-server.mdx b/docs/config/dev-server.mdx
index eca79ad..d4576d7 100644
--- a/docs/config/dev-server.mdx
+++ b/docs/config/dev-server.mdx
@@ -2,21 +2,21 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
# devServer
-С помощью секции `devServer` можно запускать сервер, на который будут ходить тесты. Запуск происходит во время инициализации Testplane на событие INIT.
+With the `devServer` section, you can run a server that tests will interact with. The server starts during the initialization of Testplane on the INIT event.
-## Пример использования {#example}
+## Example Usage {#example}
-## Справка по секции devServer
+## devServer Section Reference
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -25,7 +25,7 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
`string`
_N/A_
- Команда для запуска dev сервера. Если не указана, dev сервер не будет запущен.
+ Command to start the dev server. If not specified, the dev server will not be started.
@@ -33,7 +33,7 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
`Record`
`{}`
- Переменные окружения, которые должны быть переданы процессу с dev сервером, в дополнение к `process.env` основного процесса.
+ Environment variables to be passed to the dev server process, in addition to the main process's `process.env`.
@@ -41,15 +41,15 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
`string[]`
`[]`
- Аргументы, которые должны быть переданы процессу с dev сервером.
+ Arguments to be passed to the dev server process.
[`cwd`](#cwd)
`string`
- _Ближайшая директория с package.json относительно конфига Testplane_
+ _The nearest directory with package.json relative to the Testplane config_
- Рабочая директория dev сервера.
+ Working directory of the dev server.
@@ -57,7 +57,7 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
`boolean`
`true`
- Включает стриминг логов dev сервера в консоль с префиксом `[dev server]`.
+ Enables streaming of dev server logs to the console with the prefix `[dev server]`.
@@ -65,7 +65,7 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
`(devServer: ChildProcess) => Promise | ReadinessProbeOpts`
`null`
- Проверка, что сервер готов принимать запросы. Если не указана, проверка отключена.
+ Check that the server is ready to accept requests. If not specified, the check is disabled.
@@ -73,43 +73,43 @@ import DevServerExample from "@site/docs/config/_partials/examples/_dev-server-e
### command {#command}
-Команда для запуска dev сервера. Если не указана, dev сервер не будет запущен.
+Command to start the dev server. If not specified, the dev server will not be started.
### env {#env}
-Переменные окружения, которые должны быть переданы процессу с dev сервером, в дополнение к `process.env` основного процесса.
+Environment variables to be passed to the dev server process, in addition to the main process's `process.env`.
### args {#args}
-Аргументы, которые должны быть переданы процессу с dev сервером.
+Arguments to be passed to the dev server process.
### cwd {#cwd}
-Рабочая директория dev сервера.
+Working directory of the dev server.
### logs {#logs}
-Включает стриминг логов dev сервера в консоль с префиксом `[dev server]`
+Enables streaming of dev server logs to the console with the prefix `[dev server]`.
### readinessProbe {#readiness-probe}
-Проверка, что сервер готов принимать запросы. Если не указана, проверка отключена.
+Check that the server is ready to accept requests. If not specified, the check is disabled.
-Если передана асинхронная функция, Testplane дождется, пока результирующий промис будет отрезолвлен. Тип функции:
+If an asynchronous function is provided, Testplane will wait until the resulting promise is resolved. The function type:
```typescript
type readinessProbeFn = (devServer: ChildProcess) => Promise;
```
-Может быть передан объект `ReadinessProbeOpts`:
+An object of type `ReadinessProbeOpts` can also be provided:
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -118,25 +118,25 @@ type readinessProbeFn = (devServer: ChildProcess) => Promise;
`string`
_N/A_
- URL, по которому Testplane может проверить, что сервер готов принимать запросы. Проверка отключается, если он не указан.
+ URL that Testplane can check to ensure the server is ready to accept requests. The check is disabled if not specified.
`isReady`
`(fetchResponse => bool | Promise)`
- _Функция, которая возвращает `true`, если статус ответа сервера 2xx_
+ _Function that returns `true` if the server response status is 2xx_
- Предикат, определяющий готовность сервера по ответу на запрос к `url`.
+ Predicate that determines the server's readiness based on the response to the `url` request.
`timeouts`
`ReadinessProbeTimeouts`
- _см. описание_
+ _see description_
- - `waitServerTimeout` — таймаут на ожидание готовности сервера в мс. По умолчанию: `60_000`.
- - `probeRequestTimeout` — таймаут одного запроса на проверку готовности в мс. По умолчанию: `10_000`.
- - `probeRequestInterval` — интервал между проверками в мс. По умолчанию: `1_000`.
+ - `waitServerTimeout` — timeout for waiting for the server to be ready in ms. Default: `60_000`.
+ - `probeRequestTimeout` — timeout for a single readiness check request in ms. Default: `10_000`.
+ - `probeRequestInterval` — interval between checks in ms. Default: `1_000`.
diff --git a/docs/config/last-failed.mdx b/docs/config/last-failed.mdx
index 737007a..e6911ae 100644
--- a/docs/config/last-failed.mdx
+++ b/docs/config/last-failed.mdx
@@ -2,29 +2,29 @@ import LastFailedExample from "@site/docs/config/_partials/examples/_last-failed
# lastFailed
-## Обзор {#overview}
+## Overview {#overview}
-Testplane умеет перезапускать упавшие в последнем прогоне тесты. Для этого он сохраняет json с информацией об упавших тестах после каждого запуска.
+Testplane can rerun tests that failed in the last run. To do this, it saves a JSON file with information about the failed tests after each run.
-С помощью секции `lastFailed` вы можете настроить расположение этого файла и другие опции.
+With the `lastFailed` section, you can configure the location of this file and other options.
-Чтобы запустить только упавшие тесты из CLI используйте опцию `--last-failed-only` или переменную окружения `testplane_last_failed_only=true`.
+To run only the failed tests from the CLI, use the `--last-failed-only` option or the environment variable `testplane_last_failed_only=true`.
-## Настройка {#setup}
+## Setup {#setup}
-Раздел `lastFailed` имеет следующий формат:
+The `lastFailed` section has the following format:
-### Расшифровка параметров конфигурации {#setup_description}
+### Configuration Parameter Descriptions {#setup_description}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -32,37 +32,37 @@ Testplane умеет перезапускать упавшие в последн
[`only`](#only)
`boolean`
`false`
- Включить / отключить режим перезапуска упавших тестов.
+ Enable / disable the rerun mode for failed tests.
[`input`](#input)
`string | string[]`
`".testplane/failed.json"`
- Путь или список путей для чтения списка упавших тестов.
+ Path or list of paths to read the list of failed tests.
[`output`](#output)
`string`
`".testplane/failed.json"`
- Путь для сохранения списка упавших тестов.
+ Path to save the list of failed tests.
### only {#only}
-Включает режим перезапуска упавших тестов. В этом режиме запускаются только тесты из списка, путь к которому указан в input, если установить значение в `true`.
+Enables the rerun mode for failed tests. In this mode, only tests from the list specified in `input` are run if set to `true`.
-По умолчанию: `false`.
+Default: `false`.
### input {#input}
-Путь или список путей для чтения списка упавших тестов. Если указан список путей к файлам, то перезапускаются все тесты, которые встречаются хотя бы в одном из них.
+Path or list of paths to read the list of failed tests. If a list of file paths is specified, all tests that appear in at least one of them are rerun.
-По умолчанию: `.testplane/failed.json`.
+Default: `.testplane/failed.json`.
### output {#output}
-Путь для сохранения списка упавших тестов. Используется всегда, независимо от опции `only`.
+Path to save the list of failed tests. Always used, regardless of the `only` option.
-По умолчанию: `.testplane/failed.json`.
+Default: `.testplane/failed.json`.
diff --git a/docs/config/main.mdx b/docs/config/main.mdx
index d01ca93..dea0208 100644
--- a/docs/config/main.mdx
+++ b/docs/config/main.mdx
@@ -5,88 +5,91 @@ sidebar_class_name: hidden
import MinimalConfig from "@site/docs/config/_partials/examples/_minimal-config.mdx";
import ConfigExample from "@site/docs/config/_partials/examples/_config-example.mdx";
-# Конфиг Testplane
+# Testplane Config
-По умолчанию Testplane при запуске ищет файл `.testplane.conf.ts` или `testplane.config.ts` в текущей рабочей папке.
+By default, when launched, Testplane looks for a `.testplane.conf.ts` or `testplane.config.ts` file in the current working directory.
-Вы можете задать свой конфигурационный файл с помощью CLI-опции `--config`.
+You can specify your configuration file using the `--config` CLI option.
-## Настройка {#setup}
+## Setup {#setup}
-Чтобы настроить Testplane, необходимо задать хотя бы один браузер:
+To set up Testplane, you need to specify at least one browser:
-По мере роста количества тестов в проекте, скорее всего вам пригодятся более продвинутые функции — сеты, плагины и больше браузеров. Ниже приводится пример более расширенной конфигурации:
+As the number of tests in the project grows, you will likely need more advanced features—sets, plugins, and more browsers. Below is an example of a more extended configuration:
-## Справка по конфигурации {#config_sections_description}
+## Configuration Reference {#config_sections_description}
-Единственным обязательным разделом в настройках Testplane является раздел `browsers`.
+The only mandatory section in Testplane settings is the `browsers` section.
-Все [настройки браузеров][browsers] (кроме `desiredCapabilities`) можно вынести на глобальный уровень, чтобы они применялись для всех браузеров. Например, это удобно для задания тайм-аутов для всех браузеров сразу.
+All [browser settings][browsers] (except `desiredCapabilities`) can be moved to the global level so that they apply to all browsers. For example, this is convenient for setting timeouts for all browsers at once.
- **Имя**
- **Описание**
+ **Name**
+ **Description**
[`browsers`][browsers]
- Обязательный раздел. В нем задаются настройки всех браузеров, в которых будут
- запускаться тесты.
+ Mandatory section. It specifies the settings for all browsers in which the tests
+ will be run.
[`sets`][sets]
- Раздел, позволяющий привязать набор тестов к определенным браузерам и запускать их
- сразу одной командой. Может пригодиться, например, для отдельного запуска десктопных
- и мобильных тестов.
+ Section that allows you to bind a set of tests to specific browsers and run them all
+ at once with a single command. This can be useful, for example, for separately
+ running desktop and mobile tests.
[`system`][system]
- Раздел системных настроек Testplane. Позволяет задать число подпроцессов, в которых
- будут запускаться тесты, включить режим дебага для WebDriver, и многое другое.
+ Section for Testplane's system settings. Allows you to set the number of
+ subprocesses in which tests will be run, enable debug mode for WebDriver, and much
+ more.
[`plugins`][plugins]
- Раздел, с помощью которого можно подключить к testplane внешние плагины.
+ Section through which you can connect external plugins to Testplane.
[`prepareBrowser`][prepare-browser]
- Функция, в которой можно подготовить браузер до того, как в нем будут запущены
- тесты. Например, в этой функции можно добавить новые команды для объекта _browser_.
+ Function in which you can prepare the browser before tests are run in it. For
+ example, you can add new commands to the _browser_ object in this function.
[`prepareEnvironment`][prepare-environment]
- Функция, в которой можно задать переменные окружения или, например, дополнить
- какие-то параметры конфига.
+ Function in which you can set environment variables or, for example, supplement some
+ config parameters.
[`devServer`][dev-server]
- Раздел для настройки автоматического запуска dev сервера перед прогоном тестов.
+
+ Section for setting up the automatic launch of the dev server before running tests.
+
[`lastFailed`][last-failed]
- Раздел для конфигурирования перезапуска только упавших тестов.
+ Section for configuring the rerun of only failed tests.
-Перейдите по ссылке или выберите нужный раздел в левом навигационном меню документации, чтобы узнать подробнее о соответствующих настройках.
+Follow the link or select the desired section in the left navigation menu of the documentation to learn more about the corresponding settings.
[browsers]: ../browsers
[sets]: ../sets
diff --git a/docs/config/plugins.mdx b/docs/config/plugins.mdx
index fa804bd..61ebc5f 100644
--- a/docs/config/plugins.mdx
+++ b/docs/config/plugins.mdx
@@ -4,74 +4,74 @@ import RegisterWorkersExample from "@site/docs/config/_partials/examples/_plugin
# plugins
-## Обзор {#overview}
+## Overview {#overview}
-С помощью раздела `plugins` вы можете подключить к Testplane внешние плагины, которые расширят доступную функциональность.
+With the `plugins` section, you can connect external plugins to Testplane, which will expand the available functionality.
-Например, плагины [html-reporter][html-reporter] или [@testplane/safari-commands](https://github.com/gemini-testing/testplane-safari-commands).
+For example, plugins like [html-reporter][html-reporter] or [@testplane/safari-commands](https://github.com/gemini-testing/testplane-safari-commands).
-Плагин — это модуль, который экспортирует одну функцию, принимающую следующие аргументы:
+A plugin is a module that exports a single function, which takes the following arguments:
-- инстанс Testplane
-- опции плагина из конфига Testplane
+- Testplane instance
+- Plugin options from the Testplane config
-Все плагины будут загружены до того, как Testplane запустит тесты.
+All plugins will be loaded before Testplane starts running tests.
- Выбирая название для плагина, добавьте к нему префикс _testplane-_. Тогда такой плагин будет
- проще искать.
+ When choosing a name for a plugin, add the prefix _testplane-_ to it. This will make it easier
+ to find such a plugin.
-Если имя плагина начинается с префикса `testplane-`, то этот префикс можно опустить при добавлении плагина в раздел `plugins`. Если на файловой системе будут находиться модули с обоими именами: _testplane-some-module_ и _some-module_, то предпочтение будет отдано модулю с префиксом `testplane-`.
+If the plugin name starts with the prefix `testplane-`, this prefix can be omitted when adding the plugin to the `plugins` section. If there are modules with both names on the file system: _testplane-some-module_ and _some-module_, preference will be given to the module with the `testplane-` prefix.
-## Схематичный пример {#example}
+## Schematic Example {#example}
-## Свойства инстанса testplane {#testplane_instance}
+## Testplane Instance Properties {#testplane_instance}
`config`
- Конфиг, который используется в test runner'е. Может быть изменен.
+ The config used in the test runner. Can be modified.
`events`
- Список событий, на которые можно подписаться.
+ List of events that can be subscribed to.
-Детальнее о событиях можно узнать на [соответствующей странице](../../reference/testplane-events).
+You can learn more about events on the [corresponding page](../../reference/testplane-events).
-## Параллельное исполнение плагинов
+## Parallel Execution of Plugins
-У раннера есть метод `registerWorkers`, с помощью которого можно зарегистрировать кастомные методы для запуска в воркерах Testplane.
+The runner has a `registerWorkers` method, which can be used to register custom methods for running in Testplane workers.
-Метод `registerWorkers` принимает 2 аргумента:
+The `registerWorkers` method takes 2 arguments:
-- `workerFilepath` — путь к файлу с функциями, строка с абсолютным путем.
-- `exportedMethods` — имена экспортируемых методов, массив строк.
+- `workerFilepath` — path to the file with functions, a string with an absolute path.
+- `exportedMethods` — names of exported methods, an array of strings.
-Метод возвращает объект с методами, перечисленными в `exportedMethods`, которые возвращают промисы с результатами.
+The method returns an object with the methods listed in `exportedMethods`, which return promises with results.
-Обратите внимание, что файл в `workerFilepath` должен экспортировать объект с соответствующими методами.
+Note that the file in `workerFilepath` must export an object with the corresponding methods.
-Пример:
+Example:
-## Полезные плагины
+## Useful Plugins
-Экосистема Testplane насчитывает десятки плагинов. Вот некоторые из них:
+The Testplane ecosystem includes dozens of plugins. Here are some of them:
- [html-reporter](https://github.com/gemini-testing/html-reporter)
- [@testplane/safari-commands](https://github.com/gemini-testing/testplane-safari-commands)
- [@testplane/headless-chrome](https://github.com/gemini-testing/testplane-headless-chrome)
-- ...и многие другие, которые можно найти в [gemini-testing](https://github.com/search?q=topic%3Atestplane-plugin+org%3Agemini-testing&type=Repositories).
+- ...and many others that can be found in [gemini-testing](https://github.com/search?q=topic%3Atestplane-plugin+org%3Agemini-testing&type=Repositories).
[html-reporter]: ../../html-reporter/html-reporter-setup
[testplane-test-repeater]: ../../plugins/testplane-test-repeater
diff --git a/docs/config/prepare-browser.mdx b/docs/config/prepare-browser.mdx
index 1e059d9..d589db8 100644
--- a/docs/config/prepare-browser.mdx
+++ b/docs/config/prepare-browser.mdx
@@ -6,54 +6,54 @@ import AddMultipleCommandsExample from "@site/docs/config/_partials/examples/_pr
# prepareBrowser
-## Обзор {#overview}
+## Overview {#overview}
-Данный параметр является хуком. Функция, заданная для данного параметра, будет автоматически вызвана перед тем, как запустить в браузере тесты. В качестве аргумента функция получает ссылку на сессию браузера.
+This parameter is a hook. The function specified for this parameter will be automatically called before running tests in the browser. The function receives a reference to the browser session as an argument.
-Обычно внутри данной функции к браузеру добавляют новые команды, или расширяют поведение уже существующих команд.
+Typically, new commands are added to the browser or the behavior of existing commands is extended within this function.
-## Примеры использования {#example}
+## Usage Examples {#example}
-### Пример 1: добавляем новую команду для браузера {#example_add_new_command_to_browser}
+### Example 1: Adding a new command to the browser {#example_add_new_command_to_browser}
-Для добавления новой команды воспользуемся функцией [browser.addCommand()][add-command].
+To add a new command, use the [browser.addCommand()][add-command] function.
-### Пример 2: добавляем новую команду для элемента {#example_2_add_new_command_to_element}
+### Example 2: Adding a new command to an element {#example_2_add_new_command_to_element}
-Можно добавить команду не для браузера, а для элемента. Тогда третьим аргументом функции [browser.addCommand()][add-command] надо указать `true`.
+You can add a command not to the browser, but to an element. In this case, the third argument of the [browser.addCommand()][add-command] function should be set to `true`.
- Если добавляется команда для элемента, а не для браузера, то функция выполняется в контексте
- элемента!
+ If a command is added to an element, not to the browser, the function is executed in the context
+ of the element!
-Внутри функции применяются команды [getLocation()][get-location] и [getSize()][get-size], которые доступны для элемента.
+Inside the function, the commands [getLocation()][get-location] and [getSize()][get-size], which are available for the element, are used.
-После добавления команды `getCoords()`, её можно использовать в тестах следующим образом:
+After adding the `getCoords()` command, it can be used in tests as follows:
```typescript
-const { left, top, right, bottom } = await browser.$(‘.selector’).getCoords();
+const { left, top, right, bottom } = await browser.$(".selector").getCoords();
```
-### Пример 3: меняем уже существующую команду {#example_3_overwrite_command}
+### Example 3: Overwriting an existing command {#example_3_overwrite_command}
-Чтобы изменить уже существующую команду, воспользуемся командой [browser.overwriteCommand()][overwrite-command].
+To change an existing command, use the [browser.overwriteCommand()][overwrite-command] command.
-Например, мы можем захотеть передавать в команду [browser.url()][url] отдельным аргументом объект с query-параметрами:
+For example, we might want to pass an object with query parameters as a separate argument to the [browser.url()][url] command:
-### Пример 4: добавляем набор команд из папки {#example_4_add_commands_from_folder}
+### Example 4: Adding a set of commands from a folder {#example_4_add_commands_from_folder}
-Если в проекте много своих специфических команд, то их удобно хранить в отдельной папке, а в `prepareBrowser` добавлять все команды сразу унифицированным образом. Например:
+If the project has many specific commands, it is convenient to store them in a separate folder, and add all commands at once in a unified manner in `prepareBrowser`. For example:
-Здесь используется команда [browser.getCookies][get-cookies].
+Here, the [browser.getCookies][get-cookies] command is used.
[url]: ../../commands/browser/url
[add-command]: ../../commands/browser/addCommand
diff --git a/docs/config/prepare-environment.mdx b/docs/config/prepare-environment.mdx
index a6bf4cf..6052ff4 100644
--- a/docs/config/prepare-environment.mdx
+++ b/docs/config/prepare-environment.mdx
@@ -2,12 +2,12 @@ import PrepareEnvironmentExample from "@site/docs/config/_partials/examples/_pre
# prepareEnvironment
-## Обзор {#overview}
+## Overview {#overview}
-Данный параметр является хуком. Функция, заданная для данного параметра, будет автоматически вызвана после чтения конфига Testplane. С помощью нее можно задать переменные окружения или, например, дополнить какие-то параметры конфига.
+This parameter is a hook. The function specified for this parameter will be automatically called after reading the Testplane config. With its help, you can set environment variables or, for example, supplement some config parameters.
-Контекстом функции является конфиг Testplane.
+The context of the function is the Testplane config.
-## Пример использования {#example}
+## Usage Example {#example}
diff --git a/docs/config/sets.mdx b/docs/config/sets.mdx
index 967b1cc..9dbcf33 100644
--- a/docs/config/sets.mdx
+++ b/docs/config/sets.mdx
@@ -3,33 +3,33 @@ import SetsExample from "@site/docs/config/_partials/examples/_sets-example.mdx"
# sets
-## Обзор {#overview}
+## Overview {#overview}
-Вы можете использовать сеты _(sets)_, чтобы привязать набор тестов к определенным браузерам и запускать их сразу одной командой — `testplane --set `.
+You can use sets to bind a set of tests to specific browsers and run them all at once with the command `testplane --set `.
-Это может быть удобно для запуска тестов по платформам: `desktop`, `touch-phone` и т. п. Также у вас может быть `common` сет, соответствующий общим тестам, которые вы будете запускать всегда во всех браузерах.
+This can be convenient for running tests by platforms: `desktop`, `touch-phone`, etc. You may also have a `common` set corresponding to common tests that you will always run in all browsers.
-Набор тестов задается как массив путей к ним или к папкам с ними на файловой системе. Также вы можете задать пути, которые нужно игнорировать при поиске тестов, чтобы ускорить процесс чтения тестов Testplane.
+A set of tests is specified as an array of paths to them or to folders containing them on the file system. You can also specify paths to ignore when searching for tests to speed up the Testplane test reading process.
-Если сетов в конфиге не будет, или вы не укажете их при запуске Testplane (см. раздел «[Использование](#usage)»), то будут запущены все тесты из папки `testplane` во всех браузерах, которые были указаны в разделе [browsers][browsers] конфига Testplane.
+If there are no sets in the config, or you do not specify them when running Testplane (see the “[Usage](#usage)” section), then all tests from the `testplane` folder will be run in all browsers specified in the [browsers][browsers] section of the Testplane config.
-## Настройка {#setup}
+## Setup {#setup}
-Раздел `sets` имеет следующий формат:
+The `sets` section has the following format:
-Где `` — это имя сета, которое используется для его идентификации.
+Where `` is the name of the set used for its identification.
-### Справка по секции sets {#setup_description}
+### Sets Section Reference {#setup_description}
- **Параметр**
- **Тип**
- **По умолчанию**
- **Описание**
+ **Parameter**
+ **Type**
+ **Default**
+ **Description**
@@ -38,8 +38,9 @@ import SetsExample from "@site/docs/config/_partials/examples/_sets-example.mdx"
`string | string[]`
_N/A_
- Список путей к файлам или папкам с тестами. В случае одного пути параметр можно
- задавать как строку. Также можно использовать [маски][fast-glob-patterns].
+ List of paths to files or folders with tests. In the case of a single path, the
+ parameter can be specified as a string. You can also use
+ [patterns][fast-glob-patterns].
@@ -47,40 +48,40 @@ import SetsExample from "@site/docs/config/_partials/examples/_sets-example.mdx"
`string | string[]`
`[ ]`
- Список путей или [масок][fast-glob-patterns], которые нужно игнорировать при поиске
- файлов с тестами. Данный параметр позволяет ускорить чтение тестов Testplane.
+ List of paths or [patterns][fast-glob-patterns] to ignore when searching for test
+ files. This parameter allows speeding up the Testplane test reading process.
`browsers`
`string[]`
- _все браузеры_
+ _all browsers_
- Список браузеров, в которых будут запускаться тесты. Можно указывать только
- браузеры, которые есть в разделе [browsers][browsers] конфига Testplane. По
- умолчанию: все браузеры из раздела [browsers][browsers].
+ List of browsers in which the tests will be run. You can specify only the browsers
+ listed in the [browsers][browsers] section of the Testplane config. Default: all
+ browsers from the [browsers][browsers] section.
-## Пример настройки {#setup_example}
+## Setup Example {#setup_example}
-В данном примере сет **common** содержит все тесты в директории `common` и будет запускаться во всех браузерах. Сет **desktop** содержит все тесты в директория `common` и `desktop`, но будет запускаться только в `chrome` и `firefox`.
+In this example, the **common** set contains all tests in the `common` directory and will run in all browsers. The **desktop** set contains all tests in the `common` and `desktop` directories but will only run in `chrome` and `firefox`.
-## Использование {#usage}
+## Usage {#usage}
-Используйте CLI-опцию `--set`, чтобы указать сет при запуске тестов.
+Use the CLI option `--set` to specify a set when running tests.
-Пример как запустить тесты для desktop-платформы в случае конфигурации, приведенной [выше](#setup_example):
+Example of how to run tests for the desktop platform with the configuration provided [above](#setup_example):
```bash
testplane --set desktop
```
-Если в конфиге нет сетов, или они есть, но опция `--set` не была указана, и testplane не были переданы пути через CLI, то будут запущены все тесты из папки `testplane` во всех [браузерах][browsers].
+If there are no sets in the config, or they exist but the `--set` option was not specified, and no paths were passed to testplane via CLI, then all tests from the `testplane` folder will be run in all [browsers][browsers].
[fast-glob-patterns]: https://github.com/mrmlnc/fast-glob#pattern-syntax
[browsers]: ../browsers
diff --git a/docs/config/system.mdx b/docs/config/system.mdx
index f2f85b0..924082f 100644
--- a/docs/config/system.mdx
+++ b/docs/config/system.mdx
@@ -4,57 +4,57 @@ import TestRunEnvExample from "@site/docs/config/_partials/examples/_system-test
# system
-## Обзор {#overview}
+## Overview {#overview}
-Раздел `system` в настройках Testplane не является обязательным.
+The `system` section in Testplane settings is not mandatory.
-Используйте его, чтобы:
+Use it to:
-- включить режим дебага для WebDriver'а;
-- изменить mocha-таймауты для тестов;
-- занести какие-либо данные в глобальный контекст, который будут видеть все тесты;
-- задать типы ошибок, при которых нужно закрывать текущую сессию браузера навсегда, а не пытаться её переиспользовать;
-- задать число подпроцессов, в которых будут запускаться тесты, чтобы ускорить их выполнение;
-- определить максимально доступное количество браузеров в один момент времени (может быть актуально, если вы получаете браузеры из облачного сервиса, где есть такие ограничения);
-- задать расширения файлов, среди которых Testplane будет искать тесты;
-- и т. д.
+- enable debug mode for WebDriver;
+- change mocha timeouts for tests;
+- add some data to the global context that all tests will see;
+- specify error types that should close the current browser session permanently instead of trying to reuse it;
+- set the number of subprocesses in which tests will run to speed up their execution;
+- define the maximum number of browsers available at one time (this can be relevant if you get browsers from a cloud service with such limitations);
+- set file extensions among which Testplane will search for tests;
+- etc.
-Пример конфигурации секции `system`:
+Example configuration of the `system` section:
-## Справка по секции system {#setup_description}
+## System Section Reference {#setup_description}
- **Параметр** **Тип** **По умолчанию** **Описание**
+ **Parameter** **Type** **Default** **Description**
- [`debug`](#debug) `boolean` `false` Включить / отключить режим отладки для WebDriver.
- [`expectOpts`](#expect_opts) `ExpectOpts` _[см. ниже](#expect_opts)_ Опции expect-webdriverio.
- [`mochaOpts`](#mocha_opts) `MochaOpts` _[см. ниже](#mocha_opts)_ Дополнительные опции для _mocha_.
- [`ctx`](#ctx) `Record` `{ }` Контекст, который будет доступен во всех тестах через метод _testplane.ctx._
- [`patternsOnReject`](#patterns_on_reject) `RegExp[]` `[ ]` Список шаблонов ошибок. Сессия будет закрыта, если тест упадет с ошибкой, соответствующей одному из указанных шаблонов. После чего будет создана новая сессия, чтобы исключить инфраструктурные проблемы.
- [`workers`](#workers) `number` `1` Число подпроцессов, которые будут запущены для выполнения тестов.
- [`testsPerWorker`](#tests_per_worker) `number` `Infinity` Максимальное количество тестов, которые будут запущены в одном подпроцессе, прежде чем подпроцесс будет перезапущен.
- [`diffColor`](#diff_color) `string` `"#ff00ff"` Цвет, которым нужно отображать дифф на скриншотах.
- [`parallelLimit`](#parallel_limit) `number` `1` Максимальное количество браузеров, которые могут быть запущены одновременно.
- [`fileExtensions`](#file_extensions) `string[]` `[".js", ".mjs", ".ts", ".mts", ".jsx", ".tsx"]` Расширения файлов, в которых Testplane будет искать тесты для запуска.
- [`testRunEnv`](#testrunenv) `nodejs` или `browser` или `Array` `nodejs` Возможно указать в каком окружении должны выполняться тесты.
+ [`debug`](#debug) `boolean` `false` Enable/disable debug mode for WebDriver.
+ [`expectOpts`](#expect_opts) `ExpectOpts` _[see below](#expect_opts)_ expect-webdriverio options.
+ [`mochaOpts`](#mocha_opts) `MochaOpts` _[see below](#mocha_opts)_ Additional options for _mocha_.
+ [`ctx`](#ctx) `Record` `{ }` Context that will be available in all tests via the _testplane.ctx_ method.
+ [`patternsOnReject`](#patterns_on_reject) `RegExp[]` `[ ]` List of error patterns. The session will be closed if a test fails with an error matching one of the specified patterns. A new session will then be created to avoid infrastructure issues.
+ [`workers`](#workers) `number` `1` Number of subprocesses that will be launched to run tests.
+ [`testsPerWorker`](#tests_per_worker) `number` `Infinity` Maximum number of tests that will be run in one subprocess before the subprocess is restarted.
+ [`diffColor`](#diff_color) `string` `"#ff00ff"` Color to display the diff in screenshots.
+ [`parallelLimit`](#parallel_limit) `number` `1` Maximum number of browsers that can be launched simultaneously.
+ [`fileExtensions`](#file_extensions) `string[]` `[".js", ".mjs", ".ts", ".mts", ".jsx", ".tsx"]` File extensions in which Testplane will search for tests to run.
+ [testRunEnv](#testrunenv) `nodejs` or `browser` or `Array` `nodejs` Ability to specify in which environment the tests should be run.
### debug {#debug}
-Включает режим отладки для WebDriver, если установить значение в `true`. В этом режиме в консоль будет выводиться подробная информация о каждой команде, отправленной браузеру.
+Enables debug mode for WebDriver if set to `true`. In this mode, detailed information about each command sent to the browser will be output to the console.
-По умолчанию: `false`.
+Default: `false`.
### expectOpts {#expect_opts}
-Опции для [expect-webdriverio](https://webdriver.io/docs/api/expect-webdriverio/). Позволяют менять тайм-аут и интервал между попытками найти элемент.
+Options for [expect-webdriverio](https://webdriver.io/docs/api/expect-webdriverio/). Allows changing the timeout and interval between attempts to find an element.
-По умолчанию:
+Default:
```typescript
const defaultExpectOpts = {
@@ -65,7 +65,7 @@ const defaultExpectOpts = {
### mochaOpts {#mocha_opts}
-Дополнительные опции для `mocha`, которые передаются в `mocha.setup`. См. список доступных опций в [документации для Mocha](https://mochajs.org/). По умолчанию: `{ timeout: 60000 }`.
+Additional options for `mocha`, which are passed to `mocha.setup`. See the list of available options in the [Mocha documentation](https://mochajs.org/). Default: `{ timeout: 60000 }`.
```typescript title="testplane.config.ts"
import type { ConfigInput } from "testplane";
@@ -82,9 +82,9 @@ export default {
### ctx {#ctx}
-Контекст, который будет доступен во всех тестах через метод `testplane.ctx`. Предназначен для совместного использования каких-либо данных между всеми тестами, без необходимости прибегать к использованию глобальных переменных.
+Context that will be available in all tests via the `testplane.ctx` method. Intended for sharing some data between all tests without resorting to using global variables.
-Пример использования:
+Example usage:
```typescript title="testplane.config.ts"
import type { ConfigInput } from "testplane";
@@ -105,15 +105,13 @@ it("awesome test", function () {
});
```
-
- Используйте в тестах _testplane.ctx_ вместо глобальных переменных.
-
+Use _testplane.ctx_ in tests instead of global variables.
### patternsOnReject {#patterns_on_reject}
-Сессия будет закрыта, если тест упадет с ошибкой, соответствующей одному из указанных шаблонов в `patternsOnReject`. После чего будет создана новая сессия, чтобы исключить инфраструктурные проблемы.
+The session will be closed if a test fails with an error matching one of the specified patterns in `patternsOnReject`. A new session will then be created to avoid infrastructure issues.
-Пример:
+Example:
```typescript title="testplane.config.ts"
import type { ConfigInput } from "testplane";
@@ -128,39 +126,41 @@ export default {
### workers {#workers}
-Testplane запускает все тесты в подпроцессах, чтобы уменьшить использование CPU для главного процесса и не упираться в ограничение по памяти для _Node.js._ Данная опция задает число подпроцессов, которые будут запущены для выполнения тестов. По умолчанию: `1`.
+Testplane runs all tests in subprocesses to reduce CPU usage for the main process and avoid memory limitations for _Node.js._ This option sets the number of subprocesses that will be launched to run tests. Default: `1`.
### testsPerWorker {#tests_per_worker}
-Максимальное количество тестов, которые будут запущены в одном подпроцессе, прежде чем подпроцесс будет перезапущен. По умолчанию: `Infinity`.
+Maximum number of tests that will be run in one subprocess before the subprocess is restarted. Default: `Infinity`.
### diffColor {#diff_color}
-Цвет для отображения диффа при визуальных проверках с помощью команды [`browser.assertView`](../../commands/browser/assertView).
+Color for displaying the diff in visual checks using the [`browser.assertView`](../../commands/browser/assertView) command.
-По умолчанию: `"#ff00ff"`.
+Default: `"#ff00ff"`.
### parallelLimit {#parallel_limit}
-По умолчанию Testplane запускает все браузеры одновременно. Иногда (например, при использовании облачных сервисов, таких как [SauceLabs][sauce-labs]) вам может понадобиться ограничить количество браузеров, которые могут быть запущены одновременно. Данная опция задает это ограничение. По умолчанию: `Infinity`.
+By default, Testplane launches all browsers simultaneously. Sometimes (e.g., when using cloud services like [SauceLabs][sauce-labs]) you may need to limit the number of browsers that can be launched simultaneously. This option sets that limit. Default: `Infinity`.
### fileExtensions {#file_extensions}
-Расширения файлов, в которых Testplane будет искать на файловой системе тесты для запуска. По умолчанию: `[".js", ".mjs", ".ts", ".mts", ".jsx", ".tsx"]`.
+File extensions in which Testplane will search the file system for tests to run. Default: `[".js", ".mjs", ".ts", ".mts", ".jsx", ".tsx"]`.
### testRunEnv
-Позволяют указать, в каком окружении необходимо запускать тесты. Доступны следующие окружения:
+Allows specifying the environment in which tests should be run. The following environments are available:
-- `nodejs` — Testplane будет запускать тесты в Node.
-- `browser` — Testplane будет запускать тесты в браузере.
+- `nodejs` — Testplane will run tests in Node.
+- `browser` — Testplane will run tests in the browser.
-При использовании значения `browser` можно указать дополнительные опции:
+When using the `browser` value, you can specify additional options:
-- `viteConfig` — кастомный [конфиг Vite](https://vitejs.dev/config/). Можно указать строку — путь к файлу конфигурации, объект — [UserConfig](https://github.com/vitejs/vite/blob/v5.1.6/packages/vite/src/node/config.ts#L127-L282) или функцию — с типом `(env: ConfigEnv) => UserConfig | Promise`.
+- `viteConfig` — custom [Vite config][vite-config]. You can specify a string — path to the configuration file, an object — [UserConfig][vite-user-config] or a function — with the type `(env: ConfigEnv) => UserConfig | Promise`.
-Примеры использования:
+Usage examples:
[sauce-labs]: https://saucelabs.com
+[vite-config]: https://vitejs.dev/config/
+[vite-user-config]: https://github.com/vitejs/vite/blob/v5.1.6/packages/vite/src/node/config.ts#L127-L282
diff --git a/docs/guides/android-testing.mdx b/docs/guides/android-testing.mdx
index f77c6db..1f3db5e 100644
--- a/docs/guides/android-testing.mdx
+++ b/docs/guides/android-testing.mdx
@@ -1,20 +1,20 @@
import Admonition from "@theme/Admonition";
-# Тестирование Android Приложений
+# Testing Android Applications
- Статья на данный момент содержит базовые сведения и будет улучшена в [testplane#1002](https://github.com/gemini-testing/testplane/issues/1002).
+ The article currently contains basic information and will be improved in [testplane#1002](https://github.com/gemini-testing/testplane/issues/1002).
- При возникновении вопросов обращайтесь в [discussions](https://github.com/gemini-testing/testplane/discussions) на GitHub.
+ If you have any questions, please refer to the [discussions](https://github.com/gemini-testing/testplane/discussions) on GitHub.
-## Обзор
+## Overview
-Testplane использует WebdriverIO для общения с браузерами и устройствами, поэтому из коробки есть поддержка тестирования нативных Android приложений на реальных устройствах или эмуляторах с помощью [Appium](https://appium.io/docs/en/latest/).
+Testplane uses WebdriverIO to communicate with browsers and devices, so out of the box, it supports testing native Android applications on real devices or emulators using [Appium](https://appium.io/docs/en/latest/).
-## Быстрый старт
+## Quick Start
-- [Шаблонный проект](https://github.com/webdriverio/appium-boilerplate) для запуска тестов на Android/iOS с помощью WebdriverIO и Appium
-- [Документация](https://webdriver.io/docs/api/appium) по взаимодействию с Appium с помощью WebdriverIO
-- [Документация Appium](https://appium.io/docs/en/2.0/intro/)
+- [Template Project](https://github.com/webdriverio/appium-boilerplate) for running tests on Android/iOS using WebdriverIO and Appium
+- [Documentation](https://webdriver.io/docs/api/appium) for interacting with Appium using WebdriverIO
+- [Appium Documentation](https://appium.io/docs/en/2.0/intro/)
diff --git a/docs/guides/component-testing.mdx b/docs/guides/component-testing.mdx
index 45262fb..1f08a3e 100644
--- a/docs/guides/component-testing.mdx
+++ b/docs/guides/component-testing.mdx
@@ -1,35 +1,35 @@
import Admonition from "@theme/Admonition";
-# Компонентное тестирование
+# Component Testing
-## Введение
+## Introduction
-Узнайте больше об этом в посте про Компонентное тестирование в нашем блоге.
+Read more about it in our blog post Component Testing .
-## Пример
+## Example
```typescript
import { render } from '@testing-library/react';
import Component from '../Component';
it('should render react component', async ({browser}) => {
- // Отрендерить компонент на изолированной странице
+ // Render component on isolated page
render( );
- // Найти кнопку внутри компонента и кликнуть по ней
+ // Found button inside component and click on it
const button = await browser.$("button");
await button.click();
- // Проверить, что текст кнопки имеет ожидаемое значение
+ // Assert that button text has expected value
await expect(button).toHaveText("count is 1");
});
```
-## Как начать?
+## How to get started?
-Давайте настроим тестирование реакт компонентов, написанных на Typescript.
+Let's set up testing of react components written in Typescript.
-### Шаг 1: Установка Testplane и необходимых зависимостей
+### Step 1: Install Testplane and the necessary dependencies
```bash
npm init testplane@latest
@@ -37,7 +37,7 @@ npm i vite @vitejs/plugin-react @testing-library/react --save-dev
npm i react --save
```
-### Шаг 2: Создание конфигурации Vite и подключение плагина react
+### Step 2: Create a Vite config and connect react plugin
```typescript title="vite.config.ts"
import { defineConfig } from "vite";
@@ -48,27 +48,31 @@ export default defineConfig({
});
```
-### Шаг 3: Настройка запуска тестов в браузере (используя опцию testRunEnv)
+### Step 3: Configure tests to run in the browser (using option [testRunEnv][test-run-env-option])
```typescript title=".testplane.conf.ts"
-export default {
+export const {
// ...
system: {
// ...
- testRunEnv: ["browser", { viteConfig: "./vite.config.ts" }],
+ testRunEnv: ['browser', { viteConfig: './vite.config.ts' }],
},
sets: {
linux: {
- files: ["src/tests/**/*.testplane.tsx"],
- browsers: ["chrome"],
+ files: [
+ 'src/tests/**/*.testplane.tsx'
+ ],
+ browsers: [
+ 'chrome'
+ ]
},
},
-};
+}
```
-### Шаг 4: Написание теста
+### Step 4: Write a test
-Чтобы проверить правильную конфигурацию, мы можем написать самый простой тест, в котором выводим значение document в консоль без использования команды [browser.execute][browser-execute]:
+To check the correct configuration, we can write the simplest test in which we output the `document` value to the console without using the [browser.execute][browser-execute] command:
```typescript title="src/tests/test.testplane.tsx"
it("should log document", async () => {
@@ -76,7 +80,7 @@ it("should log document", async () => {
});
```
-Если бы такой тест был выполнен в среде Node.js, то он упал бы с ошибкой: `ReferenceError: document is not defined`. Но в нашем случае он будет выполнен непосредственно в браузере, где глобальная переменная `document` доступна. Поэтому в консоли браузера и терминала мы увидим следующее:
+If such a test were performed in a Node.js environment, then it would have fallen with the error: `ReferenceError: document is not defined`. But in our case, it will be executed directly in the browser, where the global variable `document` is available. Therefore, in the browser and terminal log we will see the following:
```
{
@@ -95,26 +99,26 @@ it("should log document", async () => {
}
```
-Давайте напишем более сложный тест с рендером компонента:
+Let's write a more complex test with a render of the react component:
```typescript title="src/tests/test.testplane.tsx"
import { render } from '@testing-library/react';
import Component from '../Component';
it('should render react component', async ({browser}) => {
- // Отрендерить компонент на изолированной странице
+ // Render component on isolated page
render( );
- // Найти кнопку внутри компонента и кликнуть по ней
+ // Found button inside component and click on it
const button = await browser.$("button");
await button.click();
- // Проверить, что текст кнопки имеет ожидаемое значение
+ // Assert that button text has expected value
await expect(button).toHaveText("count is 1");
});
```
-И исходный код самого компонента:
+And the source code of the component itself:
```typescript title="src/Component.tsx"
import { useState } from 'react';
@@ -134,36 +138,36 @@ function Component() {
}
```
-Полностью работающие примеры можно найти [здесь][testplane-examples-component-testing].
+A fully working examples can be found [here][testplane-examples-component-testing].
-## Временные ограничения
+## Temporary restrictions
- - поддерживаются только компоненты, написанные на React в файлах .jsx и .tsx. Возможность
- написания тестов в файлах .js будет реализована в ближайшем будущем. Мы также планируем
- поддержку фреймворка Vue;
+ - only components written in React in files `.jsx` and `.tsx` are supported. Ability to write
+ tests in `.js` files will be implemented soon. We will also support the Vue framework in the
+ near future;
- - нет доступа к currentTest из it, beforeEach и afterEach. Это будет
- добавлено в ближайшем будущем;
+ - there is no access to `currentTest` from `it`, `beforeEach` and `afterEach`. It
+ will appear in the near future;
- - плагин [@testplane/global-hook][testplane-global-hook] в
- настоящее время временно не поддерживается.
+ - the [@testplane/global-hook][testplane-global-hook] plugin is
+ temporarily not supported.
-## Дополнительные возможности
+## Additional features
-### Горячая замена модулей (HMR)
+### Hot Module Replacement (HMR)
-[HMR][vite-hmr] поддерживается в Vite. Это означает, что если вы измените загруженный файл, либо компонент будет повторно монтироваться, либо страница будет полностью предварительно загружена. Если компонент описан в отдельном файле (т.е. не в том же файле, что и тест), произойдет повторная установка, но тест не будет перезапущен. А если вы измените файл теста, страница будет перезагружена, что заставит Testplane прервать выполнение текущего теста и запустить его заново. Благодаря этой функции вы можете быстро разрабатывать компоненты в Vite и писать для них тесты. Рекомендуется использовать ее вместе с [REPL режимом][repl-mode].
+[HMR][vite-hmr] is supported in Vite. It means if you change the loaded file, either the component will be remounted, or the page will be completely preloaded. If the component is described in a separate file (i.e. not in the same file as the test), a remount will be performed, but the test will not be restarted. And if you change the test file, the page will be reloaded, which will cause Testplane to interrupt the execution of the current test and start it again. Due to this feature, you can quickly develop components in Vite and write tests for them. It is recommended to use it together with the [REPL mode][repl-mode].
-### Использование экземпляров browser и expect напрямую в средствах разработчика браузера
+### Using the browser and expect instances directly in the browser DevTools
-Инстансы `browser` и `expect` доступны в глобальной области видимости браузера. Это довольно удобно использовать при отладке теста.
+Instances of the `browser` and `expect` are available inside of the browser's global scope. It is quite convenient to use it when debugging the test.
-### Логи из консоли браузера в терминале
+### Logs from the browser console in the terminal
-Вызов команд `log`, `info`, `warn`, `error`, `debug` и `table` на объекте `console` в браузере приводит к отображению информации не только в средствах разработчика браузера, но также в терминале, из которого был запущен Testplane. То есть, вы можете вызывать `console.log` в тесте/компоненте и увидеть результат его выполнения в терминале. Это особенно удобно при отладке тестов.
+Calling the `log`, `info`, `warn`, `error`, `debug` and `table` commands on the `console` object in the browser causes information to be displayed not only in the browser's DevTools, but also in the terminal from which Testplane was launched. I.e., you can call `console.log` in the test/component and you will be able to see the result of it execution in the terminal. This is especially handy when debugging the test.
[test-run-env-option]: ../config/system.mdx#testrunenv
[browser-execute]: ../commands/browser/execute.mdx
diff --git a/docs/guides/how-to-add-testing-library.mdx b/docs/guides/how-to-add-testing-library.mdx
index ba56f48..be079af 100644
--- a/docs/guides/how-to-add-testing-library.mdx
+++ b/docs/guides/how-to-add-testing-library.mdx
@@ -1,20 +1,20 @@
-# Как подключить testing-library в testplane
+# How to Connect testing-library in testplane
-## Введение {#preface}
+## Introduction {#preface}
-[Testing-library][testing-library] - это коллекция инструментов для тестирования пользовательского интерфейса веб-приложений, ориентированная на создание надежных и поддерживаемых тестов, сосредотачиваясь на пользовательском поведении. Основное преимущество `testing-library` заключается в фокусе на взаимодействии с элементами интерфейса. И в testplane можно пользоваться способами поиска элемента, представленными самой библиотекой `testing-library`.
+[Testing-library][testing-library] is a collection of tools for testing web application user interfaces, focused on creating reliable and maintainable tests by emphasizing user behavior. The main advantage of `testing-library` is its focus on interaction with interface elements. And in testplane, you can use the element search methods provided by the `testing-library` itself.
-## Подключение
+## Connection
-Для того чтобы появилась возможность использования [запросов (queries)][queries] из `testing-library` в testplane-тестах, необходимо выполнить всего несколько шагов.
+To be able to use [queries][queries] from `testing-library` in Testplane tests, you only need to follow a few steps.
-1. Установите npm-пакет `'@testing-library/webdriverio'`
+1. Install the npm package `'@testing-library/webdriverio'`
```bash
npm i -D @testing-library/webdriverio
```
-2. Подключите реализацию в конфиге testplane в секции `prepareBrowser`
+2. Include it in the Testplane config in the `prepareBrowser` section:
```javascript
// .testplane.conf.js
@@ -25,13 +25,13 @@ module.exports = {
setupBrowser(browser);
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-## Использование
+## Usage
-После подключения вы сможете использовать в тестах поиск по селекторам из `testing-library`, описанные в [официальной документации](https://testing-library.com/docs/queries/about/). Например, поиск элемента по его тексту
+After configuring, you will be able to use the search by selectors from `testing-library`, as described in the [official documentation](https://testing-library.com/docs/queries/about/). For example, searching for an element by its text:
```javascript
it("example", async ({ browser }) => {
@@ -43,7 +43,7 @@ it("example", async ({ browser }) => {
});
```
-В контексте найденных элементов эта возможность также будет доступна:
+This feature will also be available in the context of found elements:
```javascript
it("example", async ({ browser }) => {
@@ -56,9 +56,9 @@ it("example", async ({ browser }) => {
});
```
-Полный пример использования можно найти [здесь](https://github.com/gemini-testing/testplane/tree/master/examples/).
+For a complete usage example, visit [this link](https://github.com/gemini-testing/testplane/tree/master/examples/).
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
- [Testing-library][testing-library]
- [WebdriverIO Testing Library](https://testing-library.com/docs/webdriverio-testing-library/intro)
diff --git a/docs/guides/how-to-check-accessibility.mdx b/docs/guides/how-to-check-accessibility.mdx
index 7412047..e543b50 100644
--- a/docs/guides/how-to-check-accessibility.mdx
+++ b/docs/guides/how-to-check-accessibility.mdx
@@ -1,84 +1,83 @@
import Admonition from "@theme/Admonition";
-# Как протестировать доступность (accessibility) страницы
+# How to Test Page Accessibility
-## Обзор {#overview}
+## Overview {#overview}
-Данный рецепт работает только при использовании _Chrome DevTools Protocol (CDP)_.
+This recipe only works when using _Chrome DevTools Protocol (CDP) or Chrome_.
-Читайте подробности в разделе «[Как использовать CDP в Testplane][how-to-use-cdp]»
+Read more details in the section “[How to Use CDP in Testplane][how-to-use-cdp]”
-[Accessibility tree][accessibility-tree] — это дерево доступности, которое содержит иерархическую структуру доступных объектов. В отличие от DOM-дерева, которое предназначено для браузеров, accessibility-дерево предназначено для [скрин-ридеров][screen-reader] и других инструментов, помогающих взаимодействовать с сайтами людям с ограниченными возможностями.
+[Accessibility tree][accessibility-tree] is an accessibility tree that contains a hierarchical structure of accessible objects. Unlike the DOM tree, which is intended for browsers, the accessibility tree is intended for [screen readers][screen-reader] and other tools that help people with disabilities interact with websites.
-Для получения такого дерева в _puppeteer_ есть специальный [класс Accessibility][puppeteer-accessibility].
+To obtain such a tree, _puppeteer_ has a special [Accessibility class][puppeteer-accessibility].
-## Пример {#example}
+## Example {#example}
-Вот пример, как его можно использовать:
+Here's an example of how to use it:
```javascript
it("should get accessibility tree of yandex.ru", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
await this.browser.url("https://yandex.ru");
- // Получаем текущее состояние accessibility дерева
+ // Get the current state of the accessibility tree
const snapshot = await page.accessibility.snapshot();
console.log("snapshot:", JSON.stringify(snapshot, null, 4));
});
```
-## Accessibility-дерево {#accessibility_tree}
+## Accessibility Tree {#accessibility_tree}
-А вот как выглядит получаемое accessibility-дерево:
+And here's how the obtained accessibility tree looks:
```json
{
"role": "WebArea",
- "name": "Яндекс",
+ "name": "Yandex",
"children": [
{
"role": "link",
- "name": "Войти"
+ "name": "Login"
},
{
"role": "link",
- "name": "Почта"
+ "name": "Mail"
},
{
"role": "link",
- "name": "Диск"
+ "name": "Disk"
},
{
"role": "link",
- "name": "Попробовать Плюс"
+ "name": "Try Plus"
},
- // пропустим для краткости...
+ // omitted for brevity...
{
"role": "link",
- "name": "финансы"
+ "name": "finance"
},
{
"role": "link",
- "name": "политика"
+ "name": "politics"
}
]
}
-}
```
-Используя полученное дерево мы можем проверить, что все необходимые узлы содержатся в дереве и имеют правильную структуру.
+Using the obtained tree, we can check that all necessary nodes are contained in the tree and have the correct structure.
[how-to-use-cdp]: ../how-to-use-cdp
[accessibility-tree]: https://web.dev/the-accessibility-tree/
-[screen-reader]: https://ru.wikipedia.org/wiki/Экранное_считывающее_устройство
+[screen-reader]: https://en.wikipedia.org/wiki/Screen_reader
[puppeteer-accessibility]: https://pptr.dev/api/puppeteer.accessibility
diff --git a/docs/guides/how-to-check-test-stability.mdx b/docs/guides/how-to-check-test-stability.mdx
index 7de2917..52cd8ba 100644
--- a/docs/guides/how-to-check-test-stability.mdx
+++ b/docs/guides/how-to-check-test-stability.mdx
@@ -1,50 +1,50 @@
-# Как проверить стабильность теста
+# How to Check Test Stability
-## Проблема {#problem}
+## Problem {#problem}
-Существует масса причин, из-за которых тесты могут падать:
+There are many reasons why tests can fail:
-- проблемы с инфраструктурой — недоступность браузеров, некорректная работа сети, протухание доступов и т. п.
-- проблемы с внешними сервисами, к которым обращается тест —
-- гонки в самом тесте, когда какой-либо элемент не успел прорисоваться, а контрольное время его ожидания истекло;
-- внезапно возникающие попапы при выполнении теста, которые перекрывают нужный элемент, вносят дифф в отснятый скриншот, не дают кликнуть по нужному элементу;
-- и т. д. и т. п.
+- infrastructure issues – browser unavailability, network malfunctions, expired access, etc.
+- problems with external services the test interacts with;
+- races within the test itself, where an element does not render in time and the wait period expires;
+- unexpected popups during the test execution that obscure the necessary element, cause differences in screenshots, or prevent clicking the needed element;
+- and so on.
-Часто такие падения не воспроизводятся с первого раза. Поэтому, чтобы убедиться, что свеженаписанный тест стабилен, нужно запустить его много раз. Но есть одна проблема: если вы запустите свой тест в testplane _as is,_ то после первого же успешного прогона testplane прекратит запускать ваш тест. Тест прошел — всё ОК. Но для проверки стабильности этого недостаточно. Может быть, тест прошел случайно, и если запустить его повторно, то он упадет. Хотелось бы запустить его не 1 раз, и не 2, а например, 20 раз и посмотреть сколько раз он успешно пройдет при 20 повторах. Или 30. Или... и т. д.
+Often these failures do not reproduce on the first attempt. Therefore, to ensure a newly written test is stable, it needs to be run multiple times. But there is one problem: if you run your test in Testplane _as is,_ after the first successful run, Testplane will stop running your test. The test passed – everything is OK. But for stability verification, this is not enough. The test might have passed accidentally, and if you rerun it, it might fail. Ideally, you want to run it not just once or twice, but for example, 20 times and see how many times it passes out of 20. Or 30 times. Or... and so on.
-## Решение: testplane-test-repeater {#solution}
+## Solution: testplane-test-repeater {#solution}
-Для решения данной проблемы был разработан плагин [testplane-test-repeater][testplane-test-repeater].
+To solve this problem, the [testplane-test-repeater][testplane-test-repeater] plugin was developed.
-Плагин позволяет запустить один и тот же тест (или группу тестов) требуемое количество раз.
+The plugin allows you to run the same test (or group of tests) the required number of times.
-Плагин гарантирует, что тесты будут запущены столько раз, сколько вы задали, независимо от результатов их прогона в каждой попытке. Кроме того, плагин позволяет запускать тесты каждый раз в новой сессии браузера. Это исключает влияние деградации браузера или еще какие-либо побочные эффекты, которые могли бы возникнуть при повторных прогонах в одной и той же сессии браузера.
+The plugin ensures that the tests will be run as many times as you specify, regardless of the results of each run. Moreover, the plugin allows you to start the tests each time in a new browser session. This eliminates browser degradation or other side effects that might occur with repeated runs in the same browser session.
-Подробнее о том, как добавить этот плагин в проект, настроить и использовать его, читайте в [документации плагина][testplane-test-repeater].
+Read more about how to add this plugin to a project, configure, and use it in the [plugin documentation][testplane-test-repeater].
-## Примеры использования {#usage}
+## Usage Examples {#usage}
-Ниже приведены примеры прогонов тестов, в которых их прогнали 21 раз (1 основной + 20 ретраев), чтобы проверить их на стабильность.
+Below are examples of test runs, in which they were run 21 times (1 primary + 20 retries) to check their stability.
-### Пример сломанных тестов
+### Example of Broken Tests
-Как видно из скриншота тесты были запущены 21 раз и ни разу не завершились успешно:
+As seen in the screenshot, the tests were run 21 times and never completed successfully:
-![Неработающий тест](/img/docs/guides/how-to-check-test-stability.total-failure.png)
+![Broken Test](/img/docs/guides/how-to-check-test-stability.total-failure.png)
-### Пример стабильного теста
+### Example of Stable Test
-А здесь наоборот — все запуски прошли успешно:
+Here, on the contrary, all runs were successful:
-![Стабильный тест](/img/docs/guides/how-to-check-test-stability.total-success.png)
+![Stable Test](/img/docs/guides/how-to-check-test-stability.total-success.png)
-### Пример нестабильных тестов
+### Example of Unstable Tests
-На следующем скриншоте первый тест практически не рабочий — из 21 попытки только 1 раз тест прошел. А второй тест — достаточно стабильный, хотя 2 падения из 21 — это все равно не 100%-ная стабильность. И разработчик может попытаться разобраться, почему все-таки тест иногда падает.
+In the next screenshot, the first test is almost non-functional – out of 21 attempts, the test passed only once. The second test is quite stable, although 2 failures out of 21 is still not 100% stability. The developer may try to understand why the test fails occasionally.
-![Нестабильный тест](/img/docs/guides/how-to-check-test-stability.unstable-test.png)
+![Unstable Test](/img/docs/guides/how-to-check-test-stability.unstable-test.png)
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- testplane-test-repeater
diff --git a/docs/guides/how-to-debug-test.mdx b/docs/guides/how-to-debug-test.mdx
index 346dbdb..bde9824 100644
--- a/docs/guides/how-to-debug-test.mdx
+++ b/docs/guides/how-to-debug-test.mdx
@@ -1,29 +1,29 @@
import Admonition from "@theme/Admonition";
-# Как отладить работу теста
+# How to Debug a Test
-## Проблема {#problem}
+## Problem {#problem}
-При разработке тестов, рано или поздно, любой разработчик начинает сталкиваться с ошибками, которые трудно обнаружить с помощью обычного просмотра кода. И тогда приходится применять уже программные инструменты, чтобы понять, где закралась ошибка, или почему тест ведет себя не так, как от него ожидает разработчик.
+In the course of developing tests, any developer will sooner or later encounter errors that are hard to detect through normal code review. At such moments, it's necessary to use software tools to understand where the error occurred, or why the test is behaving differently than expected.
-Давайте разберемся, какие возможности есть у разработчика testplane-тестов.
+Let's explore the options available to a Testplane test developer.
-## Решение 1: опция --inspect или --inspect-brk {#solution_1}
+## Solution 1: --inspect or --inspect-brk option {#solution_1}
-Для того чтобы видеть как тест выполняется шаг за шагом, в testplane существует режим отладки. Этот режим опирается на [интеграцию V8 инспектора с Node.js](https://nodejs.org/dist/latest-v16.x/docs/api/debugger.html#advanced-usage).
+To see how a test is executed step by step, Testplane has a debug mode. This mode relies on the [V8 inspector integration with Node.js](https://nodejs.org/dist/latest-v16.x/docs/api/debugger.html#advanced-usage).
-Про интеграцию V8 инспектора с Node.js
+About V8 Inspector Integration with Node.js
-Интеграция с инспектором _V8_ позволяет подключать _Chrome DevTools_ к инстансу _Node.js_ для отладки и профилирования. Для этого используется протокол _Chrome DevTools._
+The integration with the _V8_ inspector allows connecting _Chrome DevTools_ to a _Node.js_ instance for debugging and profiling. This uses the _Chrome DevTools_ protocol.
-Инспектор _V8_ можно включить, передав опцию `--inspect` при запуске приложения на _Node.js._ Также можно указать пользовательский порт с этой опцией, например, `--inspect=9222` будет принимать подключения `DevTools` на порту `9222`.
+The _V8_ inspector can be enabled by passing the `--inspect` option when starting a _Node.js_ application. You can also specify a custom port with this option; for example, `--inspect=9222` will accept `DevTools` connections on port `9222`.
-Чтобы остановить выполнение кода на первой строке приложения, вместо опции `--inspect` используйте опцию `--inspect-brk`.
+To stop the code execution at the first line of the application, use the `--inspect-brk` option instead of `--inspect`.
```bash
$ node --inspect index.js
@@ -31,32 +31,32 @@ Debugger listening on ws://127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29
For help, see: https://nodejs.org/en/docs/inspector
```
-_В приведенном выше примере `UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29` в конце URL'а генерируется «на лету», и отличается в разных сеансах отладки._
+_In the example above, the `UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29` at the end of the URL is generated "on the fly," and varies in different debugging sessions._
-Если браузер Chrome старше `66.0.3345.0`, используйте `inspector.html` вместо `js_app.html` в приведенном выше URL-адресе.
+If the Chrome browser is older than `66.0.3345.0`, use `inspector.html` instead of `js_app.html` in the above URL.
-_Chrome DevTools_ пока не поддерживает отладку [рабочих потоков](https://nodejs.org/dist/latest-v16.x/docs/api/worker_threads.html). Для их отладки можно использовать [ndb](https://github.com/GoogleChromeLabs/ndb/).
+_Chrome DevTools_ does not yet support debugging for [worker threads](https://nodejs.org/dist/latest-v16.x/docs/api/worker_threads.html). To debug them, you can use [ndb](https://github.com/GoogleChromeLabs/ndb/).
-Чтобы запустить тест в этом режиме, используйте опцию `--inspect`. Если вы хотите, чтобы отладчик остановился на первой строке кода, то используйте опцию `--inspect-brk`.
+To run a test in this mode, use the `--inspect` option. If you want the debugger to stop at the first line of code, use the `--inspect-brk` option.
-Пример:
+Example:
```bash
testplane path/to/mytest.js --inspect
```
- В режиме отладки запускается только один рабочий процесс, и все тесты выполняются только в нем.
- Используйте этот режим с параметром _sessionsPerBrowser=1_ для отладки тестов по одному за раз.
+ In debug mode, only one worker process is started, and all tests are run in it. Use this mode
+ with the parameter _sessionsPerBrowser=1_ to debug tests one at a time.
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- --inspect
- --inspect-brk
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
-- [Про Chrome DevTools](https://developer.chrome.com/docs/devtools/)
+- [About Chrome DevTools](https://developer.chrome.com/docs/devtools/)
diff --git a/docs/guides/how-to-get-report.mdx b/docs/guides/how-to-get-report.mdx
index 2c8abe6..f9f8fd0 100644
--- a/docs/guides/how-to-get-report.mdx
+++ b/docs/guides/how-to-get-report.mdx
@@ -1,34 +1,51 @@
-# Как получить отчет о прогоне тестов
+# How to Get a Test Run Report
-## Отчет testplane {#testplane_report}
+## Testplane Report {#testplane_report}
-После завершения прогона всех тестов testplane пишет в консоль результат прогона в виде строки следующего вида:
+After completing all test runs, Testplane writes the result to the console in the form of a string like this:
```bash
Total: 1812 Passed: 1792 Failed: 0 Skipped: 20 Retries: 47
```
-Где:
+Where:
-
-Статус Описание
-
-
-Total Общее количество тестов, которые testplane прочитала с файловой системы при запуске.
-Passed Число тестов, которые успешно прошли.
-Failed Число тестов, которые упали.
-Skipped Количество тестов, которые были пропущены (заскипаны) при запуске.
-Retries Суммарное количество ретраев тестов, которые произошли во время прогона.
-
-
+
+
+ Status
+ Description
+
+
+
+
+ Total
+ Total number of tests that Testplane read from the file system during launch.
+
+
+ Passed
+ Number of tests that passed successfully.
+
+
+ Failed
+ Number of tests that failed.
+
+
+ Skipped
+ Number of tests that were skipped during the run.
+
+
+ Retries
+ Total number of test retries that occurred during the run.
+
+
-Однако этой информации может быть недостаточно, поэтому вы можете добавить в свой проект плагин [stat-reporter][stat-reporter].
+However, this information may not be sufficient, so you can add the [stat-reporter][stat-reporter] plugin to your project.
-## Отчет плагина stat-reporter {#stat_reporter_report}
+## stat-reporter Plugin Report {#stat_reporter_report}
-Если вы добавите в свой проект плагин [stat-reporter][stat-reporter], то тогда после завершения прогона всех тестов вы получите в консоли более подробный отчет о результатах прогона. Например:
+If you add the [stat-reporter][stat-reporter] plugin to your project, you will get a more detailed report of the run results in the console after completing all the tests. For example:
```bash
┌──────────────────────┬────────┬───────┬────────┬────────┬─────────┬─────────┬──────────┐
@@ -62,37 +79,37 @@ Total: 1812 Passed: 1792 Failed: 0 Skipped: 20 Retries: 47
└──────────────────────┴────────┴───────┴────────┴────────┴─────────┴─────────┴──────────┘
```
-В отличие от простого отчета testplane, в отчете плагина `stat-reporter` результаты прогонов разбиты по браузерам. Также выводятся максимальное время выполнения _(Duration)_ в минутах и секундах и результат прогона тестов _(Status)_ в каждом браузере.
+Unlike the simple Testplane report, the `stat-reporter` plugin report breaks down the results by browser. It also displays the maximum execution time _(Duration)_ in minutes and seconds and the test run result _(Status)_ in each browser.
-Такой отчет позволяет лучше понять в каких браузерах возникли проблемы, а именно: не проходит больше всего тестов или время выполнения резко возросло.
+Such a report allows for a better understanding of which browsers encountered problems, specifically: where the most tests failed or the execution time sharply increased.
-Плагин `stat-reporter` также позволяет формировать отчеты в виде html- или json-файлов. См. подробности в [описании плагина][stat-reporter].
+The `stat-reporter` plugin also allows generating reports in HTML or JSON formats. See details in the [plugin description][stat-reporter].
-Однако по своим возможностям плагин [stat-reporter][stat-reporter] значительно уступает плагину [html-reporter][html-reporter], который предоставляет разработчику гораздо более продвинутые способы работы с тестами и результатами их прогона.
+However, in terms of capabilities, the [stat-reporter][stat-reporter] plugin is significantly inferior to the [html-reporter][html-reporter] plugin, which provides much more advanced ways to work with tests and their run results.
-## Отчет плагина html-reporter {#html_reporter_report}
+## html-reporter Plugin Report {#html_reporter_report}
-Добавьте в свой проект плагин [html-reporter][html-reporter], чтобы получить графический html-отчет с результатами прогонов всех тестов. Также в полученном отчете вы сможете:
+Add the [html-reporter][html-reporter] plugin to your project to get a graphical HTML report with the results of all test runs. Additionally, in the generated report, you will be able to:
-- отфильтровать тесты по статусам завершения;
-- сгруппировать тесты по ошибкам или любому параметру из мета-информации теста;
-- посмотреть диффы в скриншотах 6 разными способами;
-- посмотреть отдельно все ретраи или ошибки в тестах.
+- filter tests by completion status;
+- group tests by errors or any parameter from the test metadata;
+- view screenshot differences in 6 different ways;
+- view all retries or errors in tests separately.
![html-reporter](/img/docs/guides/how-to-get-report.html-reporter.png)
-Кроме того, [html-reporter][html-reporter] позволяет запускать testplane в специальном GUI-режиме. В этом режиме вы можете запускать и перезапускать тесты, переснимать скриншоты, использовать специальные режимы отладки и многое другое.
+Moreover, the [html-reporter][html-reporter] allows running Testplane in a special GUI mode. In this mode, you can run and rerun tests, reshoot screenshots, use special debugging modes, and much more.
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- stat-reporter
- html-reporter
- gui
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
-- [Плагин stat-reporter][stat-reporter]
-- [Плагин html-reporter][html-reporter]
+- [stat-reporter Plugin][stat-reporter]
+- [html-reporter Plugin][html-reporter]
[stat-reporter]: ../../plugins/stat-reporter
[html-reporter]: ../../html-reporter/html-reporter-setup
diff --git a/docs/guides/how-to-hide-scrollbars-by-cdp.mdx b/docs/guides/how-to-hide-scrollbars-by-cdp.mdx
index 140f20c..1ab4ae7 100644
--- a/docs/guides/how-to-hide-scrollbars-by-cdp.mdx
+++ b/docs/guides/how-to-hide-scrollbars-by-cdp.mdx
@@ -1,47 +1,47 @@
import Admonition from "@theme/Admonition";
-# Как скрывать скроллбары с помощью Chrome DevTools Protocol
+# How to Hide Scrollbars Using Chrome DevTools Protocol
-## Обзор {#overview}
+## Overview {#overview}
-Данный рецепт работает только при использовании _Chrome DevTools Protocol (CDP)_.
+This recipe only works when using _Chrome DevTools Protocol (CDP)_.
-Читайте подробности в разделе «[Как использовать CDP в Testplane][how-to-use-cdp]»
+Read details in the section “[How to use CDP in Testplane][how-to-use-cdp]”
-Одна из причин падений тестов при тестировании верстки с помощью скриншотов — это появление скроллбара в браузере в момент снятия скриншота. Подробнее об этой проблеме и некоторых способах её решения, вы можете прочитать [здесь](../how-to-hide-scrollbars). Особенно часто эта проблема возникает в тестах с мобильной эмуляцией.
+One of the reasons for test failures when testing layouts using screenshots is the presence of scrollbars in the browser at the moment the screenshot is taken. You can read more about this problem and some ways to solve it [here](../how-to-hide-scrollbars). This problem arises particularly often in tests with mobile emulation.
-В CDP есть специальный метод [Emulation.setScrollbarsHidden][set-scrollbars-hidden], который позволяет скрыть скроллбар. Однако в _puppeteer_ отсутствует обертка над этим методом. Поэтому мы воспользуемся методом [CDPSession.send][cdp-session-send], чтобы выполнить команду [Emulation.setScrollbarsHidden][set-scrollbars-hidden].
+CDP has a special method [Emulation.setScrollbarsHidden][set-scrollbars-hidden] that allows hiding the scrollbar. However, _puppeteer_ lacks a wrapper for this method. Therefore, we will use the [CDPSession.send][cdp-session-send] method to execute the [Emulation.setScrollbarsHidden][set-scrollbars-hidden] command.
-## Пример: как отключить скроллбар с помощью CDP {#example}
+## Example: How to Hide Scrollbars Using CDP {#example}
-Вот как это будет выглядеть:
+Here's how it looks:
```javascript
it("should hide scrollbar", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
- // Создаем CDP-сессию
+ // Create a CDP session
const client = await page.target().createCDPSession();
- // Скрываем скроллбар
+ // Hide the scrollbar
await client.send("Emulation.setScrollbarsHidden", { hidden: true });
await this.browser.url("https://yandex.ru");
});
```
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
-Читайте также наш рецепт «[Как убрать скроллбары из скриншотов](../how-to-hide-scrollbars)».
+Also, read our recipe “[How to Hide Scrollbars from Screenshots](../how-to-hide-scrollbars)”.
-Там же вы узнаете про плагин [hermione-hide-scrollbars](../../plugins/hermione-hide-scrollbars), который реализован на основе метода [Emulation.setScrollbarsHidden][set-scrollbars-hidden] и который вы можете использовать, чтобы отключить скроллбары в CI для всех тестов в конкретных браузерах.
+There you will also learn about the [hermione-hide-scrollbars](../../plugins/hermione-hide-scrollbars) plugin, which is implemented based on the [Emulation.setScrollbarsHidden][set-scrollbars-hidden] method and which you can use to disable scrollbars in CI for all tests in specific browsers.
[how-to-use-cdp]: ../how-to-use-cdp
[set-scrollbars-hidden]: https://chromedevtools.github.io/devtools-protocol/tot/Emulation/#method-setScrollbarsHidden
diff --git a/docs/guides/how-to-hide-scrollbars.mdx b/docs/guides/how-to-hide-scrollbars.mdx
index 07469c1..dea9864 100644
--- a/docs/guides/how-to-hide-scrollbars.mdx
+++ b/docs/guides/how-to-hide-scrollbars.mdx
@@ -1,60 +1,60 @@
import Admonition from "@theme/Admonition";
-# Как убрать скроллбары из скриншотов
+# How to Hide Scrollbars from Screenshots
-## Проблема {#problem}
+## Problem {#problem}
-Одна из причин падений тестов при тестировании верстки с помощью скриншотов — это появление скроллбара в браузере в момент снятия скриншота. При этом возможны 3 варианта, когда при прогоне теста возникает дифф между эталонным скриншотом и текущим, который был заснят в тесте в момент прогона:
+One of the reasons for test failures when testing layouts using screenshots is the presence of scrollbars in the browser at the moment the screenshot is taken. There can be 3 scenarios where a diff occurs between the reference screenshot and the current one taken during the test run:
-1. В момент снятия эталонного скриншота скроллбара не было, но он появился при снятии текущего скриншота.
-2. В момент снятия эталонного скриншота скроллбар был, однако при снятии текущего скриншота скроллбар появиться не успел.
-3. Скроллбар есть и на эталонном скриншоте и на текущем, но положения скроллбаров, или их размеры, или прозрачность отличаются из-за разницы во времени, когда были сделаны скриншоты относительно появления скроллбара.
+1. There was no scrollbar when the reference screenshot was taken, but it appeared when taking the current screenshot.
+2. There was a scrollbar when the reference screenshot was taken, but it did not appear in time when taking the current screenshot.
+3. There is a scrollbar on both the reference and current screenshots, but the positions, sizes, or transparency of the scrollbars differ due to the timing of when the screenshots were taken relative to the appearance of the scrollbar.
-На скриншоте ниже приведен пример, который соответствует первому варианту:
+The screenshot below shows an example corresponding to the first scenario:
-![дифф из-за скроллбара](/img/docs/guides/how-to-hide-scrollbars.diff-in-screenshot.png)
+![diff due to scrollbar](/img/docs/guides/how-to-hide-scrollbars.diff-in-screenshot.png)
-## Решение 1: screenshotDelay {#solution_1}
+## Solution 1: screenshotDelay {#solution_1}
-В настройках testplane есть обязательная опция `browsers`, которая задает набор браузеров, доступных в проекте, и их свойства. Выберите браузер, в котором у вас возникают диффы из-за скроллбаров, и добавьте для него опцию `screenshotDelay`:
+In Testplane settings, there is a mandatory option `browsers` that specifies the set of browsers available in the project and their properties. Select the browser where you are experiencing diffs due to scrollbars and add the `screenshotDelay` option for it:
```javascript
module.exports = {
browsers: {
iphone: {
- screenshotDelay: 600, // Задержка перед снятием скриншота в мс
+ screenshotDelay: 600, // Delay before taking a screenshot in ms
- // другие настройки браузера...
+ // other browser settings...
},
- // другие браузеры...
+ // other browsers...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-Опция `screenshotDelay` задает паузу в миллисекундах, которую testplane должна выдержать перед снятием скриншота (прежде чем выполнять команду `assertView`).
+The `screenshotDelay` option sets a pause in milliseconds that Testplane should wait before taking a screenshot (before executing the `assertView` command).
-### Как это может помочь? {#how_can_it_help}
+### How can it help? {#how_can_it_help}
-Часто скриншоты возникают из-за того, что тест должен подскроллить страницу к требуемому элементу, прежде чем сделать скриншот. После того как подскролл выполнен, скроллбар может еще какое-то время «висеть» на экране и соответственно, попасть на скриншот, если тот будет выполнен немедленно. Задержка `screenshotDelay` дает скроллбару время на то, чтобы исчезнуть.
+Often screenshots generate diffs because the test needs to scroll the page to the required element just before taking the screenshot. After the scroll is performed, the scrollbar might still be visible on the screen for some time and thus, might appear in the screenshot if taken immediately. The `screenshotDelay` gives the scrollbar time to disappear.
-Однако, данный способ помогает далеко не всегда, так как зависит от реализации браузеров и их поведения.
+However, this method does not always work as it depends on the implementation and behavior of the browsers.
-## Решение 2: отключение скроллбаров {#solution_2}
+## Solution 2: Disabling Scrollbars {#solution_2}
-Если скроллбары возникают на скриншотах в Chrome-браузере, то их можно отключить с помощью [DevTools протокола][CDP].
+If scrollbars appear in screenshots in the Chrome browser, they can be disabled using the [DevTools protocol][CDP].
-Для этого добавьте в свой проект плагин [hermione-hide-scrollbars][hermione-hide-scrollbars] и укажите в его настройках список браузеров, для которых необходимо отключать скроллбары в тестах.
+To do this, add the [hermione-hide-scrollbars][hermione-hide-scrollbars] plugin to your project and specify in its settings the list of browsers for which you want to disable scrollbars in the tests.
- Обновите Chrome-браузер до версии 72.1 и выше, чтобы данная функциональность работала в ваших
- тестах. Так как более ранние версии Chrome-браузеров не поддерживают команду
- _Emulation.setScrollbarsHidden_, с помощью которой отключаются скроллбары.
+ Update the Chrome browser to version 72.1 or higher for this functionality to work in your
+ tests. Earlier versions of Chrome do not support the _Emulation.setScrollbarsHidden_ command,
+ which is used to disable the scrollbars.
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- screenshotDelay
- hermione-hide-scrollbars
diff --git a/docs/guides/how-to-intercept-requests-and-responses.mdx b/docs/guides/how-to-intercept-requests-and-responses.mdx
index 170c1d9..e143155 100644
--- a/docs/guides/how-to-intercept-requests-and-responses.mdx
+++ b/docs/guides/how-to-intercept-requests-and-responses.mdx
@@ -1,94 +1,94 @@
import Admonition from "@theme/Admonition";
-# Как отслеживать и перехватывать сетевые запросы и ответы
+# How to Track and Intercept Network Requests and Responses
-## Обзор {#overview}
+## Overview {#overview}
[//]: # "TODO: add screencasts"
-Данный рецепт работает только при использовании _Chrome DevTools Protocol (CDP)_.
+This recipe only works when using _Chrome DevTools Protocol (CDP)_.
-Читайте подробности в разделе «[Как использовать CDP в Testplane][how-to-use-cdp]»
+Read details in the section “[How to Use CDP in Testplane][how-to-use-cdp]”
-В CDP имеются домены [Fetch][fetch] и [Network][network], с помощью которых можно получить полный доступ ко всем сетевым запросам и ответам. При использовании Webdriver-протокола нам бы пришлось писать отдельный proxy-сервер и весь трафик направлять через него.
+CDP has [Fetch][fetch] and [Network][network] domains that provide full access to all network requests and responses. If we used the Webdriver protocol, we would have to write a separate proxy server and route all traffic through it.
-В _webdriverio_ для работы с сетевыми запросами существует метод [mock][mock], который использует API домена [Fetch][fetch].
+In _webdriverio_, there is a [mock][mock] method for working with network requests, which uses the API of the [Fetch][fetch] domain.
-С помощью этого метода мы можем:
+With this method, we can:
-- замокать запрос к ресурсу и вернуть свои данные;
-- отменить запрос, вернув необходимую ошибку;
-- модифицировать ответ от ресурса;
-- перенаправить с запрошенного ресурса на какой-то другой ресурс;
-- замокать ресурс и, например, собрать информацию о том, сколько раз этот ресурс вызывался и какой ответ он возвращал.
+- mock a request to a resource and return our own data;
+- cancel a request, returning a necessary error;
+- modify a response from a resource;
+- redirect from the requested resource to another resource;
+- mock a resource and, for example, collect information on how many times this resource was called and what response it returned.
-Давайте попробуем написать тесты с использованием этого API и покрыть разные кейсы. Сразу уточним, что все графические изображения с процессом выполнения тестов замедлены в 2 раза, так как тесты локально выполняются очень быстро и что-то разглядеть довольно проблематично.
+Let's try writing tests using this API and cover different cases. To clarify, all graphical representations of the test execution process are slowed down by a factor of 2 because locally the tests run very quickly, making it difficult to observe anything.
-## Пример 1: мокаем запрос к google.com и возвращаем свой ответ {#example_1}
+## Example 1: Mocking a Request to google.com and Returning Our Own Response {#example_1}
```javascript
it("should mock google.com", async function () {
- // Мокаем поход на google.com
+ // Mocking the request to google.com
const mock = await this.browser.mock("https://google.com");
- // Возвращаем строку "Hello, world!" вместо ответа от сайта.
- // Опция "fetchResponse" отвечает за то, нужно ли делать запрос
- // на замоканный ресурс, по умолчанию - true
+ // Returning the string "Hello, world!" instead of the response from the site.
+ // The "fetchResponse" option dictates whether the request should be made
+ // to the mocked resource; default is true.
mock.respond("Hello, world!", { fetchResponse: false });
await this.browser.url("https://google.com");
});
```
-По графическому изображению видно, что мы вернули свой текст, при этом в строке браузера отображается как будто мы выполнили переход на _google.com._ Также видно, что мы не замокали фавиконку и она приехала снаружи. Этот же самый пример мы можем написать с использованием API puppeteer'а, для этого в _webdriverio_ реализована команда [getPuppeteer()][get-puppeteer]:
+From the graphical representation, you can see that we returned our text, although the browser's address bar shows we navigated to _google.com._ Also, it's clear that we didn't mock the favicon, which was fetched from an external source. We can write this same example using the puppeteer API. For this, _webdriverio_ has the [getPuppeteer()][get-puppeteer] command:
```javascript
it("should mock google.com using puppeteer api", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
- // Активируем перехват всех запросов
+ // Enable request interception
await page.setRequestInterception(true);
page.on("request", async request => {
if (request.url() !== "https://google.com/") {
- // Если урл запроса не матчится на https://google.com/,
- // то выполняем запрос (т. е. не перехватываем его)
+ // If the request URL does not match https://google.com/,
+ // continue the request (i.e., don't intercept it)
return request.continue();
}
- // отвечаем своими данными
+ // Respond with our own data
return request.respond({ body: "Hello, world!" });
});
- // Здесь можно было бы вызвать и "page.goto('https://google.com')", но лучше вызывать "url",
- // так как в большинстве плагинов есть обертки команды "url", добавляющие дополнительную
- // логику. Например, в testplane добавляется урл в мету.
+ // Here, we could call "page.goto('https://google.com')", but it's better to call "url",
+ // because most plugins have wrappers for the "url" command adding additional logic.
+ // For example, in testplane, the URL is added to the meta.
await this.browser.url("https://google.com");
});
```
-### Хардкорный вариант с использованием CDP напрямую {#hardcore_example}
+### Hardcore Example Using CDP Directly {#hardcore_example}
-А теперь представим, что в _puppeteer_ еще нет API для мока запросов, но это уже реализовано в домене [Fetch][fetch] CDP. В этом случае воспользуемся методом этого домена через общение с CDP-сессией напрямую. Для этого в _puppeteer_ есть метод [CDPSession.send()][cdp-session-send]:
+Now, let's imagine that puppeteer doesn't yet have an API for mocking requests, but this is already implemented in the [Fetch][fetch] domain of CDP. In this case, we will use this domain's method by interacting with the CDP session directly. For this, puppeteer has the [CDPSession.send()][cdp-session-send] method:
```javascript
it("should mock google.com using cdp fetch domain", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
- // Создаем CDP-сессию
+ // Create a CDP session
const client = await page.target().createCDPSession();
- // Включаем возможность перехватить запрос с помощью подписки на событие "requestPaused"
+ // Enable request interception by subscribing to the "requestPaused" event
await client.send("Fetch.enable");
client.on("Fetch.requestPaused", event => {
@@ -99,12 +99,12 @@ it("should mock google.com using cdp fetch domain", async function () {
} = event;
if (url !== "https://google.com/") {
- // Если урл запроса не матчится на https://google.com/,
- // то выполняем запрос (т. е. не перехватываем его)
+ // If the request URL does not match https://google.com/,
+ // continue the request (i.e., don't intercept it)
return client.send("Fetch.continueRequest", { requestId });
}
- // Подменяем ответ на свой и упаковываем его в base64
+ // Replace the response with our own and encode it in base64
return client.send("Fetch.fulfillRequest", {
requestId,
responseCode: 200,
@@ -117,69 +117,69 @@ it("should mock google.com using cdp fetch domain", async function () {
});
```
-Очевидно, что при использовании API _webdriverio_ для мока запросов код получается сильно короче, но API _webdriverio_ сильно ограничен и для более сложных кейсов необходимо использовать API puppeteer'а. При этом в самом puppeteer'е тоже может не быть API для каких-то новых методов или доменов CDP. Поэтому в редких случаях может пригодиться общение по CDP напрямую с помощью [CDPSession.send()][cdp-session-send].
+Obviously, when using the _webdriverio_ API for mocking requests, the code is much shorter, but the _webdriverio_ API is very limited, and for more complex cases, it is necessary to use puppeteer's API. However, puppeteer itself might not have an API for some new methods or CDP domains. Therefore, in rare cases, direct communication via CDP using [CDPSession.send()][cdp-session-send] might come in handy.
-## Пример 2: отменяем запрос за логотипом гугла {#example_2}
+## Example 2: Canceling the Request for Google's Logo {#example_2}
```javascript
it("should abort request to logo on google.com", async function () {
- // В качестве урла можно использовать маску
+ // You can use a mask for the URL
const mock = await this.browser.mock("https://www.google.com/images/**/*.png");
- // Кидаем ошибку "ERR_FAILED" при загрузке ресурса, сматчившегося на маску мока
+ // Throw an error "ERR_FAILED" when loading a resource that matches the mask
mock.abort("Failed");
await this.browser.url("https://google.com");
});
```
-По графическому изображению видно, что логотип не отобразился и в логе присутствует ошибка `net::ERR_FAILED`. Такое решение может быть удобно для отключения каких-то скриптов, которые мешают быстрому выполнению теста. Например, можно отключить сбор аналитики.
+From the graphical representation, it is clear that the logo is not displayed, and there is a `net::ERR_FAILED` error in the log. This solution can be useful for disabling some scripts that hinder the quick execution of the test. For example, analytics collection scripts can be disabled.
-## Пример 3: при загрузке google.com берем ответ из фикстуры {#example_3}
+## Example 3: Loading google.com Using a Fixture for the Response {#example_3}
```javascript
it("should mock google.com and return answer from fixture", async function () {
- // Мокаем поход на google.com
+ // Mocking the request to google.com
const mock = await this.browser.mock("https://google.com");
- // Указываем путь, откуда нужно взять фикстуру, а с помощью
- // "fetchResponse: false" говорим, что выполнять реальный поход не нужно
+ // Specify the path from which to take the fixture, and with
+ // "fetchResponse: false", indicate that the real request should not be made
mock.respond("./fixtures/my-google.com.html", { fetchResponse: false });
await this.browser.url("https://google.com");
});
```
-По графическому изображению видно, что вместо выдачи _google.com_ отобразились данные из нашей фикстуры.
+From the graphical representation, it is clear that instead of google.com's content, our fixture's data is displayed.
-## Пример 4: перенаправляем запрос с google.com на yandex.ru {#example_4}
+## Example 4: Redirecting the Request from google.com to yandex.ru {#example_4}
```javascript
it("should redirect from google.com to yandex.ru", async function () {
- // Мокаем поход на google.com
+ // Mocking the request to google.com
const mock = await this.browser.mock("https://google.com");
- // Для редиректа необходимо просто указать урл
+ // For redirection, simply specify the URL
mock.respond("https://yandex.ru");
await this.browser.url("https://google.com");
});
```
-## Пример 5: модифицируем ответ от google.com в реальном времени {#example_5}
+## Example 5: Modifying google.com's Response in Real-Time {#example_5}
-В _puppeteer_ все еще не реализован API для удобного изменения ответа. Про это есть [issue#1191](https://github.com/puppeteer/puppeteer/issues/1191). Но такая возможность уже поддержана в CDP. Webdriverio использует CDP напрямую через [puppeteer][puppeteer] и, соответственно, в _webdriverio_ это работает.
+Puppeteer still does not have an API for conveniently modifying responses. There is an [issue#1191](https://github.com/puppeteer/puppeteer/issues/1191) on this. But this capability is already supported in CDP. Webdriverio uses CDP directly through [puppeteer][puppeteer], so it works in _webdriverio_.
-Заменим в ответе от _google.com_ все строки содержащие `Google` на `Yandex`:
+Replace all occurrences of the string `Google` with `Yandex` in google.com's response:
```javascript
it("should modify response from google.com", async function () {
- // Тут нужно мокать именно с www, так как переход на google.com
- // возвращает ответ 301 без body и перенаправляет нас на www
+ // Here, you need to mock with www because navigating to google.com
+ // returns a 301 response without a body and redirects to www
const mock = await this.browser.mock("https://www.google.com");
mock.respond(req => {
- // С помощью регулярки заменяем "Google" на "Yandex"
+ // Replace "Google" with "Yandex" using a regular expression
return req.body.replace(/Google/g, "Yandex");
});
@@ -187,15 +187,15 @@ it("should modify response from google.com", async function () {
});
```
-Кроме этого, мы можем видоизменять ответы от заранее неизвестных источников. Например, давайте модифицируем все скрипты, загружаемые на _google.com:_
+Additionally, we can modify responses from unknown sources in advance. For example, let's modify all scripts loaded on _google.com:_
```javascript
it("should modify response from google.com", async function () {
- // Первым аргументом указываем, что будем перехватывать абсолютно все запросы
+ // The first argument specifies that we will intercept all requests
const mock = await this.browser.mock("**", {
headers: headers => {
- // Фильтруем только запросы, в которых заголовок "content-type"
- // содержит значения "text/javascript" или "application/javascript"
+ // Filter only the requests where the "content-type"
+ // header contains values "text/javascript" or "application/javascript"
return (
headers["content-type"] &&
/^(text|application)\/javascript/.test(headers["content-type"])
@@ -204,27 +204,27 @@ it("should modify response from google.com", async function () {
});
mock.respond(req => {
- // В конец каждого скрипта добавляем свой console.log
- return (req.body += `\nconsole.log("This script was modified in realtime");`);
+ // Append our own console.log to the end of each script
+ return (req.body += `\nconsole.log("This script was modified in real time.");`);
});
await this.browser.url("https://google.com");
});
```
-## Пример 6: перехватываем все запросы к ресурсу yandex.ru и собираем список всех загружаемых урлов {#example_6}
+## Example 6: Intercepting All Requests to yandex.ru and Collecting a List of All Loaded URLs {#example_6}
-Предположим, что нам необходимо собрать список всех урлов, которые загружаются на странице. Используя эту информацию мы могли бы определить, есть ли у нас походы за внешними ресурсами или в соседние сервисы, которые мы никак не контролируем. Это означает, что они в любой момент могут не ответить и сломать нам тесты. Как мог бы выглядеть наш код:
+Let's say we need to collect a list of all URLs loaded on the page. Using this information, we could determine if we have requests for external resources or neighboring services that we do not control. This means they could fail at any time and break our tests. Here's what our code might look like:
```javascript
it("should mock yandex.ru and log all loaded urls", async function () {
- // Перехватываем абсолютно все запросы
+ // Intercept absolutely all requests
const mock = await this.browser.mock("**");
await this.browser.url("https://yandex.ru");
- // mock.calls содержит не только информацию о посещенном урле,
- // Но также ответ от источника, хэдеры запроса, хэдеры ответа и т. д.
+ // mock.calls contains not only the visited URL information
+ // but also the response from the source, the request headers, response headers, etc.
const urls = mock.calls.map(({ url }) => url);
console.log("visited urls:", JSON.stringify(urls, null, "\t"));
@@ -232,54 +232,54 @@ it("should mock yandex.ru and log all loaded urls", async function () {
});
```
-Скорее всего, ваши тесты сложнее этих примеров и у вас будут различные клики в элементы, которые открываются в новых табах. В таких случаях предыдущий код ничего не узнает об открытии новых вкладок, а также о том, что в них тоже нужно собрать список урлов. Поэтому для такого случая нужно использовать API puppeteer'а:
+Most likely, your tests are more complex than these examples and involve various clicks on elements that open in new tabs. In such cases, the previous code will not capture the opening of new tabs or that URLs need to be collected there as well. Therefore, in such cases, you need to use puppeteer's API:
```javascript
it("should mock yandex.ru and log all loaded urls (using puppeteer)", async function () {
- // В этой переменной будем накапливать список всех урлов
+ // Accumulative list of all URLs
const urls = [];
- // Хелпер, который на вход ожидает инстанс страницы из puppeteer:
+ // Helper that expects a page instance from puppeteer:
// https://pptr.dev/#?product=Puppeteer&version=v10.1.0&show=api-class-page
function urlsHandler(page) {
- // Подписываемся на все запросы, которые будут происходить на переданной странице
+ // Subscribe to all requests occurring on the given page
page.on("request", req => {
urls.push(req.url());
});
}
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем все открытые страницы на текущий момент
+ // Get all open pages at the current moment
const pages = await puppeteer.pages();
- // Подписываемся на все запросы, которые будут происходить на этих страницах
+ // Subscribe to all requests occurring on these pages
await Promise.all(pages.map(p => urlsHandler(p)));
- // Подписываемся на открытие новой страницы
+ // Subscribe to the creation of new pages
puppeteer.on("targetcreated", async target => {
- // Проверяем, что открытый таргет, действительно, является новой страницей
+ // Check that the opened target is indeed a new page
const page = await target.page();
if (!page) {
return;
}
- // Так как новая страница открывается уже с каким-то урлом,
- // то его необходимо записывать явно (подписка на запрос его не обнаружит)
+ // Since the new page opens with some URL,
+ // it needs to be explicitly recorded (the request subscription will not detect it)
urls.push(target.url());
- // Подписываемся на все запросы, которые будут происходить на новой вкладке
+ // Subscribe to all requests occurring on the new tab
urlsHandler(page);
});
await this.browser.url("https://yandex.ru");
- // Находим первым элемент в списке сервисов (на тот момент была страница с футболом)
+ // Find the first element in the list of services (at that time it was a football page)
const elem = await this.browser.$(".services-new__list-item > a");
- // Выполняем клик в сервис, который открывается в новой вкладке
+ // Click the service that opens in a new tab
await elem.click();
console.log("visited urls:", JSON.stringify(urls, null, "\t"));
@@ -287,9 +287,9 @@ it("should mock yandex.ru and log all loaded urls (using puppeteer)", async func
});
```
-## Пример 7: мокаем ресурс google.com во всех тестах Хрома {#example_7}
+## Example 7: Mocking the google.com Resource in All Chrome Tests {#example_7}
-Для того, чтобы не мокать одни и те же ресурсы явно во всех тестах, можно воспользоваться плагином [testplane-global-hook][testplane-global-hook]. Настроив его соответствующим образом в конфиге testplane:
+To avoid manually mocking the same resources in all tests, you can use the [testplane-global-hook][testplane-global-hook] plugin. Configure it appropriately in the Testplane config:
```javascript
// .testplane.conf.js
@@ -299,42 +299,42 @@ module.exports = {
enabled: true,
beforeEach: async function () {
- // Проверяем, что имя браузера не начинается на "chrome"
+ // Check that the browser name starts with "chrome"
if (!/^chrome$/i.test(this.browser.capabilities.browserName)) {
return;
}
- // Мокаем поход на google.com
+ // Mocking the request to google.com
const mock = await this.browser.mock("https://google.com");
mock.respond("hello world", { fetchResponse: false });
},
afterEach: function () {
- // Очищаем все моки в текущей сессии
+ // Clear all mocks in the current session
this.browser.mockRestoreAll();
},
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-А код теста теперь будет содержать только переход по URL:
+The test code will now only contain the URL transition:
```javascript
-// Явно укажем, чтобы тест выполнялся только в браузерах, название которых начинается с chrome
+// Explicitly indicate that the test is only executed in browsers whose name starts with chrome
testplane.only.in(/^chrome/);
it("should mock google.com inside global before each", async function () {
await this.browser.url("https://google.com");
});
```
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
-Ещё примеры использования можно посмотреть в руководстве "[Mocks and Spies][wdio-mocks-and-spies]" на сайте _webdriverio._
+More usage examples can be found in the "[Mocks and Spies][wdio-mocks-and-spies]" guide on the _webdriverio_ website.
[how-to-use-cdp]: ../how-to-use-cdp
[wdio-mocks-and-spies]: https://webdriver.io/docs/mocksandspies/
diff --git a/docs/guides/how-to-manage-cpu-performance.mdx b/docs/guides/how-to-manage-cpu-performance.mdx
index eec26b7..58de3aa 100644
--- a/docs/guides/how-to-manage-cpu-performance.mdx
+++ b/docs/guides/how-to-manage-cpu-performance.mdx
@@ -1,62 +1,62 @@
import Admonition from "@theme/Admonition";
-# Как управлять быстродействием процессора
+# How to Manage CPU Performance
-## Обзор {#overview}
+## Overview {#overview}
-Данный рецепт работает только при использовании _Chrome DevTools Protocol (CDP)_.
+This recipe only works when using _Chrome DevTools Protocol (CDP)_.
-Читайте подробности в разделе «[Как использовать CDP в Testplane][how-to-use-cdp]»
+Read details in the section “[How to Use CDP in Testplane][how-to-use-cdp]”
-Скорость работы процессора на мобильных устройствах сильно уступает скорости на компьютерах. Поэтому для эмуляции скорости CPU в _puppeteer_ существует метод [emulateCPUThrottling][emulate-cpu-throttling].
+The CPU speed on mobile devices is significantly slower than on computers. Therefore, to emulate CPU speed in _puppeteer_, there is a method called [emulateCPUThrottling][emulate-cpu-throttling].
-## Пример: замедляем скорость процессора в 8 раз {#example}
+## Example: Slowing Down CPU Speed by 8x {#example}
-Воспользуемся этим методом, чтобы замедлить скорость процессора в 8 раз:
+Let's use this method to slow down CPU speed by 8 times:
```javascript
it("should open yandex.ru with emulation 8x slower CPU", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
- // Замедляем скорость процессора в 8 раз
+ // Slow down the CPU speed by 8 times
await page.emulateCPUThrottling(8);
await this.browser.url("https://yandex.ru");
});
```
-## Небольшая история об одном обходном пути {#workaround_in_the_past}
+## A Small Story About a Workaround {#workaround_in_the_past}
-Изначально в _webdriverio_ не было поддержки метода `page.emulateCPUThrottling`, так как в _webdriverio_ использовалась версия _puppeteer-core@9.1.0,_ а не _puppeteer-core@10.1.0_, в которой этот метод был поддержан.
+Initially, _webdriverio_ did not support the `page.emulateCPUThrottling` method because _webdriverio_ used _puppeteer-core@9.1.0,_ not _puppeteer-core@10.1.0_, which supports this method.
-Однако это ограничение можно было обойти с помощью метода _puppeteer_ [CDPSession.send()][cdp-session-send], отправив браузеру команду [Emulation.setCPUThrottlingRate][emulation-set-cpu-throttling-rate] по CDP:
+However, this limitation could be bypassed using puppeteer's [CDPSession.send()][cdp-session-send] method by sending the browser the [Emulation.setCPUThrottlingRate][emulation-set-cpu-throttling-rate] command via CDP:
```javascript
it("should open yandex.ru with emulation 8x slower CPU", async function () {
- // Получаем инстанс puppeteer'а
+ // Get puppeteer instance
const puppeteer = await this.browser.getPuppeteer();
- // Получаем первую открытую страницу (считаем, что она активная в данный момент)
+ // Get the first open page (considering it to be currently active)
const [page] = await puppeteer.pages();
- // Создаем CDP-сессию
+ // Create a CDP session
const client = await page.target().createCDPSession();
- // Замедляем скорость процессора в 8 раз
+ // Slow down the CPU speed by 8 times
await client.send("Emulation.setCPUThrottlingRate", { rate: 8 });
await this.browser.url("https://yandex.ru");
});
```
-Позже мы донесли в _webdriverio_ необходимый [пулл-реквест](https://github.com/webdriverio/webdriverio/pull/7135) с апдейтом версии _puppeteer-core_ и теперь метод [emulateCPUThrottling][emulate-cpu-throttling] доступен в testplane прямо из коробки.
+Later, we submitted a requisite [pull request](https://github.com/webdriverio/webdriverio/pull/7135) to _webdriverio_ to update the version of _puppeteer-core_. Now, the [emulateCPUThrottling][emulate-cpu-throttling] method is available in Testplane right out of the box.
[how-to-use-cdp]: ../how-to-use-cdp
[emulate-cpu-throttling]: https://pptr.dev/api/puppeteer.page.emulatecputhrottling
diff --git a/docs/guides/how-to-manage-network-bandwidth.mdx b/docs/guides/how-to-manage-network-bandwidth.mdx
index 8641ff7..5ca620d 100644
--- a/docs/guides/how-to-manage-network-bandwidth.mdx
+++ b/docs/guides/how-to-manage-network-bandwidth.mdx
@@ -1,19 +1,19 @@
import Admonition from "@theme/Admonition";
-# Как управлять пропускной способностью сети
+# How to Manage Network Bandwidth
-## Обзор {#overview}
+## Overview {#overview}
-Данный рецепт работает только при использовании _Chrome DevTools Protocol (CDP)_.
+This recipe only works when using _Chrome DevTools Protocol (CDP)_.
-Читайте подробности в разделе «[Как использовать CDP в Testplane][how-to-use-cdp]».
+Read details in the section “[How to use CDP in Testplane][how-to-use-cdp]”.
-Огромное количество пользователей пользуются сервисами с мобильных устройств, на которых скорость интернета бывает довольно медленной или совсем пропадает на время. В _webdriverio_ мы можем ограничить пропускную способность сети с помощью метода [throttle][throttle] и таким образом протестировать поведение сайта в сетях с разной пропускной способностью.
+A large number of users access services from mobile devices where internet speed can be quite slow or may even drop out intermittently. In _webdriverio_, we can limit network bandwidth using the [throttle][throttle] method, thereby testing the website's behavior under various network conditions.
-Помимо индивидуальных настроек метод [throttle][throttle] поддерживает следующие готовые пресеты:
+Besides custom settings, the [throttle][throttle] method supports the following ready-made presets:
- offline | online
- GPRS
@@ -23,31 +23,31 @@ import Admonition from "@theme/Admonition";
- DSL
- WiFi
-## Пример 1: эмуляция 2G-соединения {#example_1}
+## Example 1: Emulating a 2G Connection {#example_1}
-Сэмулируем 2G-соединение и откроем yandex.ru в Хроме с эмуляцией телефона:
+Let's emulate a 2G connection and open yandex.ru in Chrome with phone emulation:
```javascript
it("should open yandex.ru with emulation of 2G-connection", async function () {
- // Имитируем 2G-соединение
+ // Emulate a 2G connection
await this.browser.throttle("Good2G");
await this.browser.url("https://yandex.ru");
});
```
-## Пример 2: эмуляция сети с заданными характеристиками {#example_2}
+## Example 2: Emulating a Network with Given Characteristics {#example_2}
-Также мы можем сэмулировать соединение с конкретными характеристиками:
+We can also emulate a connection with specific characteristics:
```javascript
it("should open yandex.ru with emulation of custom connection", async function () {
- // Имитируем соединение в сети с заданными характеристиками
+ // Emulate a network connection with specified characteristics
await this.browser.throttle({
- offline: false, // имитация отключения от интернета
- downloadThroughput: (10 * 1024) / 8, // максимальная пропускная способность загрузки (byte/sec)
- uploadThroughput: (10 * 1024) / 8, // максимальная пропускная способность отправки (byte/sec)
- latency: 10, // минимальная задержка от отправки запроса до получения заголовков ответа
+ offline: false, // emulate offline state
+ downloadThroughput: (10 * 1024) / 8, // max download bandwidth (byte/sec)
+ uploadThroughput: (10 * 1024) / 8, // max upload bandwidth (byte/sec)
+ latency: 10, // min latency from sending the request to receiving the response headers
});
await this.browser.url("https://yandex.ru");
diff --git a/docs/guides/how-to-minify-screenshots.mdx b/docs/guides/how-to-minify-screenshots.mdx
index e6a42d9..3429c10 100644
--- a/docs/guides/how-to-minify-screenshots.mdx
+++ b/docs/guides/how-to-minify-screenshots.mdx
@@ -1,35 +1,35 @@
import Admonition from "@theme/Admonition";
-# Как уменьшить вес скриншотов
+# How to Reduce Screenshot Size
-## Введение {#preface}
+## Introduction {#preface}
-Одна из ключевых функций testplane — это возможность тестировать верстку с помощью скриншотов. Для этого в тестах, при разных состояниях веб-страницы, можно снять скриншот и сравнить его с эталонным.
+One of the key features of Testplane is the ability to test layouts using screenshots. For this, you can take a screenshot during different states of a web page in your tests and compare it with a reference.
-Пример такого сравнения:
+An example of such a comparison:
-![Сравнение скриншотов](/img/docs/guides/how-to-minify-screenshots.diff-in-screenshot.png)
+![Screenshot Comparison](/img/docs/guides/how-to-minify-screenshots.diff-in-screenshot.png)
-
-**Откуда берутся эталонные скриншоты?**
+
+**Where do reference screenshots come from?**
-Вы написали тест с использованием команды testplane _assertView_. Команда _assertView_ сравнивает актуальный скриншот с эталонным. Актуальный скриншот — это скриншот, который тест делает во время своего прогона. Он отражает текущее состояние вашей веб-страницы. При первом прогоне вашего теста эталонного скриншота у вас ещё нет. А значит команда _assertView_ упадет с сообщением, что эталонный скриншот не найден. При этом у вас будет актуальный скриншот. Если актуальный скриншот отражает то состояние вашей веб-страницы, которое вы ожидаете (считаете эталонным), то вам нужно _принять (accept)_ актуальный скриншот в качестве эталонного. Чтобы это сделать нужно запускать testplane с дополнительной опцией _--update-refs_. Или же воспользоваться режимом GUI, который предоставляет плагин _html-reporter_. С помощью него вы можете просматривать отчет о прогоне в GUI-режиме, убеждаться, что актуальные скриншоты именно такие, как вы ожидаете, и принимать их с помощью кнопки _Accept_.
+You wrote a test using the Testplane _assertView_ command. The _assertView_ command compares the actual screenshot with the reference screenshot. An actual screenshot is one that the test takes during its run. It reflects the current state of your web page. On the first run of your test, you don't yet have a reference screenshot. Therefore, the _assertView_ command will fail with a message that the reference screenshot is not found. At the same time, you will have an actual screenshot. If the actual screenshot reflects the state of your web page you expect (consider as reference), then you need to _accept_ the actual screenshot as the reference one. To do this, you need to run Testplane with an additional _--update-refs_ option. Alternatively, you can use the GUI mode provided by the _html-reporter_ plugin. With it, you can view the run report in GUI mode, ensure the actual screenshots are as you expect, and accept them using the _Accept_ button.
-## Проблема {#problem}
+## Problem {#problem}
-Если в вашем проекте много тестов, в которых используется валидация верстки с помощью скриншотов, то значит, в вашем проекте будет много скриншотов. Иногда эти скриншоты — довольно большие и могут занимать много места на файловой системе.
+If your project has many tests that use layout validation via screenshots, then your project will have many screenshots. Sometimes these screenshots are quite large and can take up a lot of space on the file system.
-Если в проекте идет активная разработка, то на каждый пулл-реквест будет формироваться свой отчет о прогоне тестов, в котором будут содержаться сотни (или тысячи) эталонных скриншотов. Чем больше вес скриншотов, тем больше будут весить ваши отчеты. А значит — дольше скачиваться, занимать больше места на диске и т. д.
+If the project is actively developed, each pull request will generate its own test run report, containing hundreds (or thousands) of reference screenshots. The larger the screenshots, the larger your reports will be. This means they will take longer to download, occupy more disk space, and so on.
-## Решение: testplane-image-minifier {#solution}
+## Solution: testplane-image-minifier {#solution}
-Чтобы уменьшить место, которое скриншоты занимают на диске, подключите в своем проекте плагин [testplane-image-minifier][testplane-image-minifier]. Данный плагин поддерживает 8 степеней сжатия изображений без потерь.
+To reduce the space screenshots occupy on disk, add the [testplane-image-minifier][testplane-image-minifier] plugin to your project. This plugin supports 8 levels of lossless image compression.
-Как подключить и настроить плагин читайте в [документации][testplane-image-minifier] плагина.
+How to add and configure the plugin is detailed in the [plugin documentation][testplane-image-minifier].
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- testplane-image-minifier
diff --git a/docs/guides/how-to-optimize-test-code.mdx b/docs/guides/how-to-optimize-test-code.mdx
index 1185dcc..7f7514f 100644
--- a/docs/guides/how-to-optimize-test-code.mdx
+++ b/docs/guides/how-to-optimize-test-code.mdx
@@ -1,22 +1,22 @@
-# Как избавиться от дублирования в тестах
+# How to Eliminate Duplication in Tests
-## Проблема {#problem}
+## Problem {#problem}
-Часто, перед тем как запустить очередной testplane-тест, нужно выполнить определенную подготовительную работу, например:
+Often, before running the next Testplane test, certain preparatory work needs to be done, such as:
-- очистить все cookies;
-- почистить localStorage;
-- инициализировать какую-либо переменную теста.
+- clearing all cookies;
+- cleaning localStorage;
+- initializing some test variable.
-Аналогично, после завершения основных проверок в testplane-тесте, вы можете захотеть всегда проверять наличие ошибок в клиентском коде, срабатывание нужных метрик и т. п.
+Similarly, after completing the main checks in a Testplane test, you may always want to check for errors in the client code, the triggering of required metrics, etc.
-## Решение: testplane-global-hook {#solution}
+## Solution: testplane-global-hook {#solution}
-Чтобы не повторять эти действия каждый раз в своих тестах, подключите плагин [testplane-global-hook][testplane-global-hook] и опишите их в настройках плагина в виде функций для хуков `beforeEach` и `afterEach`.
+To avoid repeating these actions each time in your tests, add the [testplane-global-hook][testplane-global-hook] plugin and describe them in the plugin settings as functions for the `beforeEach` and `afterEach` hooks.
-Подробнее о том, как подключить и настроить плагин, читайте в [документации][testplane-global-hook] плагина.
+Learn more about how to add and configure the plugin in the [plugin documentation][testplane-global-hook].
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- testplane-global-hook
diff --git a/docs/guides/how-to-run-specified-test.mdx b/docs/guides/how-to-run-specified-test.mdx
index 5cfba56..950e1f8 100644
--- a/docs/guides/how-to-run-specified-test.mdx
+++ b/docs/guides/how-to-run-specified-test.mdx
@@ -1,50 +1,50 @@
-# Как запустить конкретные тесты
+# How to Run Specific Tests
-## Проблема {#problem}
+## Problem {#problem}
-Иногда вам может потребоваться запустить конкретные тесты, а не весь набор тестов, которые есть в вашем проекте.
+Sometimes you may need to run specific tests rather than the entire set of tests in your project.
-Например, вы разработали какую-либу фичу и покрыли ее функциональными тестами. И хотите в первую очередь проверить корректность выполнения новых тестов.
+For example, you developed a feature and covered it with functional tests. You might want to first check the correctness of the new tests.
-Или вы чините плавающий тест, нашли в нем баги, исправили их и хотите проверить, что теперь тест корректно проходит.
+Or you are fixing a flaky test, found bugs, fixed them, and want to verify that the test now passes correctly.
-## Решение 1: запуск конкретного файла {#solution_1}
+## Solution 1: Running a Specific File {#solution_1}
-Если вы хотите запустить всю группу тестов, которые находятся в конкретном файле, то укажите путь к этому файлу в качестве входного параметра для testplane:
+If you want to run a whole group of tests located in a specific file, specify the path to this file as an input parameter for testplane:
```bash
testplane src/features/Reviews/Reviews.test/MyReview/MyReview.a11y@touch-phone.testplane.js
```
-## Решение 2: опция --grep {#solution_2}
+## Solution 2: --grep Option {#solution_2}
-Если же вы хотите запустить конкретный тест, то воспользуйтесь опцией `--grep`, указав в качестве ее значения полное имя теста:
+If you want to run a specific test, use the `--grep` option by providing the full name of the test as its value:
```bash
-testplane --grep "Доступность Оставление отзыва"
+testplane --grep "Accessibility Leaving a review"
```
-## Решение 3: директива .only {#solution_3}
+## Solution 3: .only Directive {#solution_3}
-Ещё вы можете воспользоваться директивой `.only` для набора тестов `describe` и конкретного теста `it`, аналогично тому как это реализовано в `mocha` (см. раздел [exlusive tests](https://mochajs.org/#exclusive-tests)):
+You can also use the `.only` directive for a suite of tests (`describe`) or a specific test (`it`), similar to what is implemented in `mocha` (see the [exclusive tests](https://mochajs.org/#exclusive-tests) section):
-Например:
+For example:
```javascript
-describe.only("Доступность", function () {
- // набор тестов...
+describe.only("Accessibility", function () {
+ // Test suite...
});
```
-или
+or
```javascript
-it.only("Оставление отзыва", async function () {
- // код теста...
+it.only("Leaving a review", async function () {
+ // Test code...
});
```
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- grep
- describe.only
diff --git a/docs/guides/how-to-skip-test-in-browsers.mdx b/docs/guides/how-to-skip-test-in-browsers.mdx
index e7b8988..8a755cc 100644
--- a/docs/guides/how-to-skip-test-in-browsers.mdx
+++ b/docs/guides/how-to-skip-test-in-browsers.mdx
@@ -1,18 +1,18 @@
-# Как пропустить тест в заданном браузере
+# How to Skip a Test in a Specific Browser
-## Проблема {#problem}
+## Problem {#problem}
-Иногда вам нужно пропустить запуск теста только в определенном браузере, а не во всех браузерах. То есть вы не хотели бы отключать или удалять весь тест, а хотели бы только ограничить количество браузеров, на которых он будет запускаться.
+Sometimes you need to skip running a test in a specific browser, rather than in all browsers. That is, you don't want to disable or delete the entire test, but only want to limit the number of browsers in which it will run.
-Например, это может быть связано с ограниченной функциональностью соответствующего браузера: отсутствием в нем необходимых возможностей, которые используются на веб-странице и проверяются тестом.
+For example, this could be due to the limited functionality of the respective browser: the absence of necessary features that are used on the web page and checked by the test.
-Ещё такая необходимость может возникнуть при нестабильной работе теста в каком-либо браузере, из-за неучета каких-то особенностей реализации в браузере.
+Another reason could be the unstable behavior of the test in a particular browser due to certain implementation nuances in the browser.
-В testplane вы можете сделать это с помощью специальных хелперов (директив) `skip` и `only`.
+In testplane, you can do this using special helpers (directives) `skip` and `only`.
-## Решение 1: директива .skip.in {#solution_1}
+## Solution 1: .skip.in Directive {#solution_1}
-Например, если вы не хотите запускать тест в браузере `IE8`:
+For example, if you don't want to run the test in `IE8`:
```javascript
describe("feature", function () {
@@ -23,17 +23,17 @@ describe("feature", function () {
});
```
-При использовании директивы `testplane.skip.in` вы увидите в отчете сообщение о том, что запуск в соответствующем браузере был пропущен.
+When using the `testplane.skip.in` directive, you will see a message in the report indicating that the run was skipped in the respective browser.
-Чтобы пропустить запуск тестов без уведомлений в отчете, вы можете передать хелперу специальный флаг `silent` в качестве третьего аргумента:
+To skip the test runs without notifications in the report, you can pass a special flag `silent` to the helper as the third argument:
```javascript
testplane.skip.in("ie8", "skipReason", { silent: true });
```
-## Решение 2: директива .skip.notIn {#solution_2}
+## Solution 2: .skip.notIn Directive {#solution_2}
-Также вы можете захотеть запускать тест только в конкретном браузере, например, в `Chrome`:
+You might also want to run the test only in a specific browser, for example, in `Chrome`:
```javascript
describe("feature", function () {
@@ -44,33 +44,33 @@ describe("feature", function () {
});
```
-Аналогично, чтобы избавиться от уведомлений в отчете, вы можете передать хелперу специальный флаг `silent` в качестве третьего аргумента:
+Similarly, to avoid notifications in the report, you can pass a special flag `silent` to the helper as the third argument:
```javascript
testplane.skip.notIn("chrome", "skipReason", { silent: true });
```
-## Решение 3: директивы .only.in и .only.notIn {#solution_3}
+## Solution 3: .only.in and .only.notIn Directives {#solution_3}
-Ещё вы можете воспользоваться хелперами `only.in` и `only.notIn`, логика которых противоположна хелперам `skip.in` и `.skip.notIn`. Плюс эти хелперы по умолчанию не выводят никаких уведомлений в отчете:
+You can also use the helpers `only.in` and `only.notIn`, whose logic is the opposite of the helpers `skip.in` and `.skip.notIn`. Additionally, these helpers do not, by default, produce any notifications in the report:
```javascript
-testplane.only.in("chrome"); // запустить тест только в chrome
+testplane.only.in("chrome"); // run the test only in Chrome
```
```javascript
-testplane.only.notIn("ie8"); // запустить тест во всех браузерах, кроме ie8
+testplane.only.notIn("ie8"); // run the test in all browsers except IE8
```
-## Решение 4: директива .also.in и браузерная опция passive {#solution_4}
+## Solution 4: .also.in Directive and Passive Browser Option {#solution_4}
-В случае если вы внедряете новый браузер и вам необходимо его запускать только в нескольких тестах, а у вас их тысячи, то использовать хелпер `.skip.in` неудобно. Для решения этой проблемы можно воспользоваться браузерной опцией [passive][passive-option] и хелпером `.also.in`:
+If you are introducing a new browser and need to run it only in a few tests while having thousands of them, using the `.skip.in` helper may be inconvenient. To solve this problem, you can use the [passive][passive-option] browser option and the helper `.also.in`:
```javascript
-testplane.also.in("ie8"); // запустить тест в пассивном браузере ie8
+testplane.also.in("ie8"); // run the test in the passive browser IE8
```
-## Ключевые слова {#keywords}
+## Keywords {#keywords}
- testplane.skip.in
- testplane.skip.notIn
diff --git a/docs/guides/how-to-update-browsers.mdx b/docs/guides/how-to-update-browsers.mdx
index f7438ec..0fc15d8 100644
--- a/docs/guides/how-to-update-browsers.mdx
+++ b/docs/guides/how-to-update-browsers.mdx
@@ -3,33 +3,33 @@ import TabItem from "@theme/TabItem";
import Admonition from "@theme/Admonition";
-# Как обновлять браузеры в больших проектах
+# How to Update Browsers in Large Projects
-## Проблема
+## Problem
-В большом проекте, над которым работают несколько команд, как правило, много тестов. И тогда обновление браузеров в проекте превращается в настоящую головную боль. Ведь изменение версии браузера часто требует переснятия скриншотов, так как в браузере могут меняться механизмы рендеринга, анимации, антиалиасинга и пр. Достаточно малейшего изменения во внутренней реализации рендеринга в браузере, чтобы это привело к появлению диффов между эталонными и актуальными скриншотами в тестах.
+In a large project, handled by multiple teams, there are usually a lot of tests. Updating browsers in such a project can become a real headache. Changing the browser version often requires retaking screenshots because the browser's rendering, animation, and antialiasing mechanisms might change. Even the slightest changes in the internal rendering implementation of a browser can lead to diffs between reference and actual screenshots in tests.
-Пересняв тысячи скриншотов, разработчик создает пулл-реквест, который ему надо влить в главную ветку проекта. И влитие такого пулл-реквеста становится крайне сложной задачей из-за постоянно возникающих мерж-конфликтов. Так как разработка не стоит на месте, и какие-то команды в это время меняют тесты: переснимают эталонные скриншоты, чтобы учесть внедрение новой функциональности, или удаляют неактуальные тесты, и, соответственно, их скриншоты. А значит, пулл-реквест с большим количеством измененных файлов будет быстро устаревать и требовать постоянного ребейза относительно главной ветки проекта. При чем этот ребейз требует целого ряда действий: нужно не только обновить кодовую базу, но и заново запустить соответствующие тесты, чтобы переснять скриншоты. Так как простым выбором «правильной» стороны мерж-конфликта между скриншотами здесь не обойтись. Оба скриншота при мерж-конфликте будут неправильными: один — устаревшим, а другой — не соответствующим новой версии браузера.
+After retaking thousands of screenshots, a developer creates a pull request that needs to be merged into the main branch of the project. Merging such a pull request becomes extremely challenging due to the constantly occurring merge conflicts. Development doesn’t stop, and teams might change tests, retake reference screenshots to account for new functionality, or delete outdated tests and their screenshots. This means a pull request with a large number of changed files quickly becomes outdated and requires constant rebasing relative to the main branch. Moreover, this rebase involves a series of actions: not only updating the codebase but also rerunning the tests to retake the screenshots. Simply resolving the merge conflict between screenshots will not work. Both conflicting screenshots will be incorrect: one outdated and the other not corresponding to the new browser version.
-Таким образом, если какая-либо команда хочет обновить версию браузера, в котором прогоняются её тесты, она вынуждена обновлять тесты для всего проекта и сталкиваться во всеми описанными выше трудностями.
+Thus, if a team wants to update the version of the browser in which their tests are run, they are forced to update the tests for the entire project and face the difficulties described above.
-Есть 3 варианта решения данной проблемы.
+There are three ways to solve this problem.
-## Решение 1: testplane.browser().version()
+## Solution 1: testplane.browser().version()
-Testplane позволяет переопределить версию браузера для конкретного теста или набора тестов с помощью специального хелпера `testplane.browser().version()`.
+Testplane allows you to override the browser version for a specific test or set of tests using the `testplane.browser().version()` helper.
-Например:
+For example:
```javascript
-// Переопределяем версию браузера chrome-desktop на 70.3 для всего набора тестов
+// Override the browser version for chrome-desktop to 70.3 for the entire test suite
testplane.browser("chrome-desktop").version("70.3");
describe("suite", function () {
it("test 1", function () {
// ...
});
- // Переопределяем версию браузера chrome-desktop на 70.1 для конкретного теста
+ // Override the browser version for chrome-desktop to 70.1 for a specific test
testplane.browser("chrome-desktop").version("70.1");
it("test 2", function () {
// ...
@@ -37,13 +37,13 @@ describe("suite", function () {
});
```
-Недостаток такого подхода заключается в том, что нужно вручную изменять файлы самих тестов. При большом количестве файлов это может занять довольно длительное время.
+The drawback of this approach is that you need to manually change the test files themselves. With many files, this can take quite a long time.
-## Решение 2: Browser Version Changer
+## Solution 2: Browser Version Changer
-Можно воспользоваться плагином [hermione-browser-version-changer][hermione-browser-version-changer], который позволяет определять версию браузера для конкретного теста на основе специального словаря _(store)_ и предикатов для всех доступных в проекте версий браузеров.
+You can use the [hermione-browser-version-changer][hermione-browser-version-changer] plugin, which allows you to define the browser version for a specific test based on a special dictionary _(store)_ and predicates for all available browser versions in the project.
-Пример использования плагина:
+Example usage of the plugin:
```javascript
module.exports = {
@@ -51,7 +51,7 @@ module.exports = {
"hermione-browser-version-changer": {
enabled: true,
initStore: async () => {
- // Подготавливаем словарь с произвольными признаками для разметки
+ // Prepare a dictionary with arbitrary tags for labeling
return {
"title-test1": "tag1",
"title-test2": "tag1",
@@ -60,14 +60,14 @@ module.exports = {
},
browsers: {
"chrome-desktop": {
- // Ключ "70.1" – версия браузера, значение – предикат
- // Если функция вернет истинное значение, для браузера установится данная версия
+ // Key "70.1" – browser version, value – predicate
+ // If the function returns a true value, this version will be set for the browser
70.1: (test, version, store) => {
- // test – текущий тест
- // version – предлагаемая версия "70.1"
- // store – словарь, который был подготовлен в методе initStore
+ // test – current test
+ // version – proposed version "70.1"
+ // store – dictionary prepared in the initStore method
- // Установить версию браузера 70.1, если тест относится к "tag1"
+ // Set browser version 70.1 if the test belongs to "tag1"
return store[test.title] === "tag1";
},
80: (test, version, store) => {
@@ -77,14 +77,14 @@ module.exports = {
},
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-Приведенный пример — очень условный и, вполне возможно, что в вашем проекте вам даже не понадобится использовать _store_, а хватит проверки соответствия теста заданному паттерну регулярного выражения.
+The provided example is very conditional, and it is possible that in your project you won’t even need to use a _store_, and checking the test against a given regex pattern will be sufficient.
[hermione-browser-version-changer]: ../../plugins/hermione-browser-version-changer
[testplane]: https://github.com/gemini-testing/testplane
diff --git a/docs/guides/how-to-use-cdp.mdx b/docs/guides/how-to-use-cdp.mdx
index a93a571..07463cd 100644
--- a/docs/guides/how-to-use-cdp.mdx
+++ b/docs/guides/how-to-use-cdp.mdx
@@ -1,23 +1,23 @@
import Admonition from "@theme/Admonition";
-# Как использовать Chrome DevTools Protocol в testplane
+# How to Use Chrome DevTools Protocol in Testplane
-## Введение {#preface}
+## Introduction {#preface}
- Установите в своем проекте testplane 4-й версии и выше, чтобы использовать _Chrome DevTools
- Protocol (CDP)_ в testplane-тестах.
+ Install Hermione (Testplane) version 4 or higher in your project to use _Chrome DevTools
+ Protocol (CDP)_ in Testplane tests.
-Протокол `WebDriver` используется в testplane уже давно, а вот возможность использования [CDP][CDP] появилась только после переезда на _[WebdriverIO@7](https://webdriver.io/versions)_ в testplane 4-й версии.
+The `WebDriver` protocol has been used in Testplane for a long time, but the possibility of using [CDP][CDP] appeared only after migrating to _[WebdriverIO@7](https://webdriver.io/versions)_ in Hermione version 4.
-Поддержка CDP в _WebdriverIO@7_ реализована с помощью [puppeteer][puppeteer]. Который, в свою очередь, является оберткой с удобным API над CDP.
+CDP support in _WebdriverIO@7_ is implemented using [puppeteer][puppeteer], which is a wrapper with a convenient API over CDP.
-Про сравнение протоколов _WebDriver_ и _CDP_ читайте в разделе Справочника «[WebDriver vs CDP][webdriver-vs-cdp]».
+For a comparison of the _WebDriver_ and _CDP_ protocols, see the "WebDriver vs CDP" section in the Reference Manual.
-## Локальное использование {#local_usage}
+## Local Usage {#local_usage}
-Для работы с браузером по CDP локально — добавьте опцию `automationProtocol: 'devtools'` к настройкам браузера в конфиге testplane:
+To work with the browser via CDP locally, add the `automationProtocol: 'devtools'` option to the browser settings in the Testplane config:
```javascript
// .testplane.conf.js
@@ -31,33 +31,39 @@ module.exports = {
},
},
- // настройки других браузеров...
+ // other browser settings...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-После этого все последующие запуски будут выполняться в вашем локально установленном Хроме.
+After this, all subsequent runs will be performed in your locally installed Chrome.
-Но если вам нужно запустить браузер с поддержкой CDP один раз, то удобнее использовать специальную CLI-опцию:
+But if you need to run a browser with CDP support just once, it's more convenient to override this option using an environment variable:
```bash
-npx testplane ... --devtools
+testplane_browsers_chrome_automation_protocol=devtools npx testplane ...
```
-## Удаленное использование {#remote_usage}
+Or set it as a CLI option:
-При использовании CDP на удаленной машине (например, в гриде) testplane сначала поднимет браузер с использованием WebDriver-протокола и только потом, по запросу пользователя (т. е. при вызове CDP-команды), перейдет на подключение по CDP. Таким образом, с удаленным браузером в одном тестовом сценарии мы будем общаться сразу по двум протоколам.
+```bash
+npx testplane ... --browsers-chrome-automation-protocol=devtools
+```
+
+## Remote Usage {#remote_usage}
+
+When using CDP on a remote machine (e.g., in a grid), Testplane will first start the browser using the WebDriver protocol and then, upon user request (i.e., when calling a CDP command), switch to CDP connection. Thus, in a single test scenario with a remote browser, we will interact using both protocols.
-Выглядит это примерно так:
+It looks something like this:
-![Схема удаленного использования CDP](/img/docs/guides/how-to-use-cdp.remote-scheme.png)
+![Remote CDP Usage Diagram](/img/docs/guides/how-to-use-cdp.remote-scheme.png)
-Чтобы подключиться по CDP к удаленному браузеру необходимо:
+To connect to a remote browser via CDP, you need to:
-- использовать `automationProtocol: webdriver` (значение по умолчанию);
-- в `desiredCapabilities` браузера добавить вендорное поле `selenoid:options`: данная опция необходима, чтобы _webdriverio_ понял, что нужно подключиться именно к удаленной машине, а не к локальному браузеру.
+- use `automationProtocol: webdriver` (default value);
+- add the vendor-specific field `selenoid:options` in the browser’s `desiredCapabilities`: this option is necessary for _webdriverio_ to understand that it needs to connect to a remote machine instead of a local browser.
```javascript
// .testplane.conf.js
@@ -70,36 +76,36 @@ module.exports = {
// ...
},
- // другие настройки браузера...
+ // other browser settings...
},
- // настройки других браузеров...
+ // other browser settings...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-
- Полноценно использовать CDP можно только начиная с **Chrome@77** и выше. Это связано с
- внутренней реализацией в _webdriverio._
+
+ Full CDP usage is only supported from **Chrome@77** and higher. This is due to the internal
+ implementation in _webdriverio._
-## Какие возможности открывает CDP {#what_does_cdp_give}
+## What Capabilities Does CDP Provide {#what_does_cdp_give}
-С помощью CDP вы можете:
+With CDP, you can:
-- [отслеживать и перехватывать сетевые запросы и ответы][how-to-intercept-requests-and-responses]
-- [тестировать доступность (accessibility) страницы][how-to-check-accessibility]
-- [управлять пропускной способностью сети][how-to-manage-network-bandwidth]
-- [управлять быстродействием процессора][how-to-manage-cpu-performance]
-- [скрывать скроллбары][how-to-hide-scrollbars-by-cdp]
+- [track and intercept network requests and responses][how-to-intercept-requests-and-responses]
+- [test page accessibility][how-to-check-accessibility]
+- [manage network bandwidth][how-to-manage-network-bandwidth]
+- [control CPU performance][how-to-manage-cpu-performance]
+- [hide scrollbars][how-to-hide-scrollbars-by-cdp]
-## Полезные ссылки {#useful_links}
+## Useful Links {#useful_links}
- [WebDriver vs CDP][webdriver-vs-cdp]
- [Web Performance Recipes With Puppeteer](https://addyosmani.com/blog/puppeteer-recipes/)
-- [Про Chrome DevTools Protocol][CDP]
+- [About Chrome DevTools Protocol][CDP]
- [puppeteer][puppeteer]
[CDP]: https://chromedevtools.github.io/devtools-protocol/
diff --git a/docs/html-reporter/html-reporter-api.mdx b/docs/html-reporter/html-reporter-api.mdx
index 7cee0cc..a7ebea6 100644
--- a/docs/html-reporter/html-reporter-api.mdx
+++ b/docs/html-reporter/html-reporter-api.mdx
@@ -1,43 +1,43 @@
-# API плагина
+# Html-Reporter API
-## Обзор {#overview}
+## Overview {#overview}
-Html-reporter добавляет к объекту `testplane` объект `htmlReporter` со своим API.
+Html-reporter adds an `htmlReporter` object to the `testplane` object with its own API.
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-[events](#events) Object Список событий, на которые можно подписаться.
-[extraItems](#extraitems) Object Дополнительные элементы, которые будут добавлены в бургер-меню отчета.
-[imagesSaver](#imagessaver) Object Интерфейс для сохранения изображений в хранилище пользователя.
-[reportsSaver](#reportssaver) Object Интерфейс для сохранения sqlite баз данных в хранилище пользователя.
-[addExtraItem](#addextraitem) Method Добавляет дополнительный пункт в бургер-меню отчета.
-[downloadDatabases](#downloaddatabases) Method Скачивает все базы данных из переданных файлов типа _databaseUrls.json_.
-[mergeDatabases](#mergedatabases) Method Объединяет все переданные базы данных и сохраняет итоговый отчет по заданному пути.
-[getTestsTreeFromDatabase](#getteststreefromdatabase) Method Возвращает дерево тестов из переданной базы данных.
+[events](#events) Object A list of events to subscribe to.
+[extraItems](#extraitems) Object Additional elements to be added to the burger menu of the report.
+[imagesSaver](#imagessaver) Object Interface for saving images to the user's storage.
+[reportsSaver](#reportssaver) Object Interface for saving sqlite databases to the user's storage.
+[addExtraItem](#addextraitem) Method Adds an additional item to the burger menu of the report.
+[downloadDatabases](#downloaddatabases) Method Downloads all databases from the given files of the type _databaseUrls.json_.
+[mergeDatabases](#mergedatabases) Method Merges all given databases and saves the final report on the specified path.
+[getTestsTreeFromDatabase](#getteststreefromdatabase) Method Returns the test tree from the passed database.
## events
-Список событий, на которые можно подписаться.
+A list of events to subscribe to.
-Смотрите подробнее в разделе «[События отчета](../html-reporter-events)».
+For more information, see the section "[Events](../html-reporter-events)".
## extraItems
-Дополнительные элементы, которые будут добавлены в бургер-меню отчета.
+Additional elements to be added to the burger menu of the report.
-Для добавления элементов используйте метод [addExtraItem](#addextraitem).
+To add elements, use the [addExtraItem](#addextraitem) method.
## imagesSaver
-Интерфейс для сохранения изображений в хранилище пользователя.
+Interface for saving images to the user's storage.
-### Пример использования {#images_saver_usage_example}
+### Usage example {#images_saver_usage_example}
```javascript
const MyStorage = require("my-storage");
@@ -47,14 +47,14 @@ module.exports = (testplane, opts) => {
testplane.on(testplane.events.INIT, async () => {
testplane.htmlReporter.imagesSaver = {
/**
- * Сохранить изображение в пользовательское хранилище.
- * Функция может быть как асинхронной, так и синхронной.
- * Функция должна возвращать путь или URL к сохраненному изображению.
- * @property {String} localFilePath – путь к изображению на файловой системе
+ * Save the image to a custom storage.
+ * The function can be either asynchronous or synchronous.
+ * The function should return the path or URL to the saved image.
+ * @property {String} localFilePath – the path to the image on the file system
* @param {Object} options
- * @param {String} options.destPath – путь к изображению в html-отчете
- * @param {String} options.reportDir - путь к папке html-отчета
- * @returns {String} путь или URL к изображению
+ * @param {String} options.destPath – the path to the image in the html-report
+ * @param {String} options.reportDir - path to the html-report folder
+ * @returns {String} the path or URL to the image
*/
saveImg: async (localFilePath, options) => {
const { destPath, reportDir } = options;
@@ -71,9 +71,9 @@ module.exports = (testplane, opts) => {
## reportsSaver
-Интерфейс для сохранения sqlite баз данных в хранилище пользователя.
+Interface for saving sqlite databases to the user's storage.
-### Пример использования {#reports_saver_usage_example}
+### Usage example {#reports_saver_usage_example}
```javascript
const MyStorage = require("my-storage");
@@ -83,14 +83,14 @@ module.exports = (testplane, opts) => {
testplane.on(testplane.events.INIT, async () => {
testplane.htmlReporter.reportsSaver = {
/**
- * Сохранить sqlite базу данных в пользовательское хранилище.
- * Функция может быть как асинхронной, так и синхронной.
- * Функция должна возвращать путь или URL к сохраненной sqlite базе данных.
- * @property {String} localFilePath – путь к sqlite базе данных на файловой системе
+ * Save sqlite database to user storage.
+ * The function can be either asynchronous or synchronous.
+ * The function should return the path or URL to the saved sqlite database.
+ * @property {String} localFilePath – the path to the sqlite database on the file system
* @param {Object} options
- * @param {String} options.destPath – путь к sqlite базе данных в html-отчете
- * @param {String} options.reportDir - путь к папке html-отчета
- * @returns {String} путь или URL к сохраненной sqlite базе данных
+ * @param {String} options.destPath – the path to the sqlite database in the html-report
+ * @param {String} options.reportDir - path to the html-report folder
+ * @returns {String} the path or URL to the sqlite database
*/
saveReportData: async (localFilePath, options) => {
const { destPath, reportDir } = options;
@@ -107,34 +107,34 @@ module.exports = (testplane, opts) => {
## addExtraItem
-Добавляет дополнительный пункт в виде ссылки в бургер-меню html-отчета.
+Adds an additional item to the burger menu of the report.
-### Пример вызова {#add_extra_item_call_example}
+### Example of a call {#add_extra_item_call_example}
```javascript
testplane.htmlReporter.addExtraItem(caption, url);
```
-### Параметры вызова {#add_extra_item_call_params}
+### Call parameters {#add_extra_item_call_params}
-Все параметры являются обязательными.
+All parameters are required.
-**Имя параметра** **Тип** **Описание**
+**Parameter name** **Type** **Description**
-caption String Название пункта, который надо добавить в бургер-меню.
-url String URL, на который будет ссылаться добавляемый пункт меню.
+caption String The name of the item to add to the burger menu.
+url String The URL to which the menu item to be added will link.
## downloadDatabases
-Скачивает все базы данных из переданных файлов `databaseUrls.json`.
+Downloads all databases from the given files of the type `databaseUrls.json`.
-### Пример вызова {#download_databases_call_example}
+### Example of a call {#download_databases_call_example}
```javascript
const dbPaths = await testplane.htmlReporter.downloadDatabases([".databaseUrls.json"], {
@@ -142,50 +142,50 @@ const dbPaths = await testplane.htmlReporter.downloadDatabases([".databaseUrls.j
});
```
-### Параметры вызова {#download_databases_call_params}
+### Call parameters {#download_databases_call_params}
-Функция принимает 2 аргумента — список путей до файлов `databaseUrls.json` в виде массива строк и объект с ключом `pluginConfig`, в значении которого хранится конфиг плагина.
+The function takes 2 arguments—a list of paths to the files `databaseUrls.json` in the form of an array of strings and an object with the key `pluginConfig`, in the value of which the plugin config is stored.
-Функция возвращает список путей к сохраненным базам данных.
+The function returns a list of paths to saved databases.
## mergeDatabases
-Объединяет все переданные базы данных и сохраняет итоговый отчет по заданному пути.
+Merges all given databases and saves the final report on the specified path.
-### Пример вызова {#merge_databases_call_example}
+### Example of a call {#merge_databases_call_example}
```javascript
await testplane.htmlReporter.mergeDatabases(srcDbPaths, path);
```
-### Параметры вызова {#merge_databases_call_params}
+### Call parameters {#merge_databases_call_params}
-**Имя параметра** **Тип** **Описание**
+**Parameter name** **Type** **Description**
-srcDbPaths String[] Пути к базам данных.
-path String Путь, по которому будет сохранена итоговая база данных.
+srcDbPaths String[] Paths to databases.
+path String The path where the resulting database will be saved.
## getTestsTreeFromDatabase
-Возвращает дерево тестов из переданной базы данных.
+Returns the test tree from the passed database.
-### Пример вызова {#get_tests_tree_from_database_call_example}
+### Example of a call {#get_tests_tree_from_database_call_example}
```javascript
const dbTree = testplane.htmlReporter.getTestsTreeFromDatabase(mergedDbPath);
```
-### Параметры вызова {#get_tests_tree_from_database_call_params}
+### Call parameters {#get_tests_tree_from_database_call_params}
-Функция принимает один аргумент — путь к базе данных с результатом прогона тестов.
+The function takes one argument—the path to the database with the result of the tests run.
-### Пример использования {#get_tests_tree_from_database_usage_example}
+### Usage example {#get_tests_tree_from_database_usage_example}
```javascript
function getSuccessTestRunIds({ testplane, mergedDbPath }) {
diff --git a/docs/html-reporter/html-reporter-commands.mdx b/docs/html-reporter/html-reporter-commands.mdx
index 6acd392..03c1302 100644
--- a/docs/html-reporter/html-reporter-commands.mdx
+++ b/docs/html-reporter/html-reporter-commands.mdx
@@ -1,26 +1,25 @@
-# Команды плагина
+# Html-Reporter Commands
-## Обзор {#overview}
+## Overview {#overview}
-Плагин `html-reporter` добавляет к Testplane следующие команды:
+The `html-reporter` plugin adds the following commands to Testplane:
-- [gui](#gui) — чтобы запускать Testplane в GUI-режиме;
-- [remove-unused-screens](#remove-unused-screens) — чтобы удалять неиспользуемые в тестах эталонные скриншоты;
-- [merge-reports](#merge-reports) — чтобы объединять отдельные отчеты Testplane в один общий отчет.
+- [gui](#gui)—to run Testplane in GUI mode;
+- [remove-unused-screens](#remove-unused-screens)—to remove reference screenshots that are not used in tests;
+- [merge-reports](#merge-reports)—to merge Testplane's separate reports into one general report.
## gui
-Используйте команду `gui`, чтобы запустить Testplane в GUI-режиме.
+Use the `gui` command to launch Testplane in GUI mode.
-GUI-режим позволяет:
+GUI mode allows you to:
-- интерактивно запускать тесты;
-- переключать режимы работы с дампами прямо из отчета без перезапуска testplane;
-- обновлять скриншоты — визуально отсматривая их и принимая только нужные диффы;
-- переиспользовать отчеты из CI;
-- фильтровать результаты прогона по ошибкам, ключам из меты, и пр.
+- run tests interactively;
+- update screenshots—visually viewing them and taking only the necessary diffs;
+- reuse reports from CI;
+- filter the results of the run by errors, keys from meta, etc.
-### Использование {#gui_usage}
+### Usage {#gui_usage}
```bash
npx testplane gui
@@ -28,57 +27,57 @@ npx testplane gui
## remove-unused-screens
-Используйте команду `remove-unused-screens`, чтобы удалить неиспользуемые в тестах эталонные скриншоты.
+Use the `remove-unused-screens` command to remove the reference screenshots that are not used in tests.
-### Как это работает?
+### How does it work?
-Сначала команда ищет скриншоты, для которых на файловой системе нет тестов.
+First, the command looks for screenshots for which there are no tests on the file system.
-Далее команда ищет скриншоты, которые не были использованы в успешном тестировании (результат тестов берется из базы данных SQLite). Для этого html-отчет должен существовать на файловой системе и содержать результаты прогона тестов. Это означает, что вы должны до запуска команды `remove-unused-screens` запустить тесты локально или загрузить отчет из CI.
+Next, the command searches for screenshots that were not used in successful testing (the test result is taken from the SQLite database). To do this, the html-report must exist on the file system and contain the results of the tests run. This means that you must run the tests locally or download the report from CI before running the `remove-unused-screens` command.
-### Использование {#remove_unused_screens_usage}
+### Usage {#remove_unused_screens_usage}
-Команда `remove-unused-screens` поддерживает несколько опций:
+The `remove-unused-screens` command supports several options:
-**Опция** **Описание**
+**Option** **Description**
--p, --pattern <pattern> Шаблон для поиска скриншотов на файловой системе.
---skip-questions Не задавать вопросов во время выполнения (использовать значения по умолчанию).
--h, --help Вывести справочную информацию по команде в терминал.
+-p, --pattern <pattern> A pattern for finding screenshots on the file system.
+--skip-questions Do not ask questions during execution (use default values).
+-h, --help Output the reference information on the command to the terminal.
-#### Примеры использования {#usage_examples}
+#### Usage examples {#usage_examples}
-Указываем папку, в которой надо искать неиспользуемые скриншоты:
+Specifying the folder in which to search for unused screenshots:
```bash
npx testplane remove-unused-screens -p 'testplane-screens-folder'
```
-Задаем маску, по которой будем искать скриншоты:
+Setting the pattern by which to search for screenshots:
```bash
npx testplane remove-unused-screens -p 'screens/**/*.png'
```
-Задаем несколько масок для поиска скриншотов:
+Setting several patterns by which to search for screenshots:
```bash
npx testplane remove-unused-screens -p 'screens/**/chrome/*.png' -p 'screens/**/firefox/*.png'
```
-Задаем папку для поиска скриншотов и просим не задавать вопросов:
+Specifying the folder in which to search for unused screenshots and setting _do-not-ask-questions_ option:
```bash
npx testplane remove-unused-screens -p 'testplane-screens-folder' --skip-questions
```
-Выводим справочную информацию о команде:
+Getting the reference information about the command:
```bash
npx testplane remove-unused-screens --help
@@ -86,25 +85,25 @@ npx testplane remove-unused-screens --help
## merge-reports
-Используйте команду `merge-reports`, чтобы объединить отдельные отчеты testplane в один общий отчет.
+Use the `merge-reports` command to merge Testplane's separate reports into one general report.
-Команда принимает пути к файлам баз данных или к файлам `databaseUrls.json` из других html-отчетов. Она создает новый html-отчет в папке назначения с общим файлом `databaseUrls.json`, который будет содержать ссылку на файл базы данных или на файлы `databaseUrls.json` из входных параметров. Файлы баз данных в папку назначения не копируются при этом.
+The command accepts paths to database files or to `databaseUrls.json` files from other html-reports. It creates a new html-report in the destination folder with a single file `databaseUrls.json`, which will contain a link to the database file or to the files `databaseUrls.json` from the input parameters. Database files are not copied to the destination folder at the same time.
-### Использование {#merge_reports_usage}
+### Usage {#merge_reports_usage}
-Команда `merge-reports` поддерживает следующую обязательную опцию:
+The `merge-reports` command supports the following required option:
-**Опция** **Описание**
+**Option** **Description**
--d, --destination <folder> Путь к папке, в которую нужно сохранить итоговый отчет.
+-d, --destination <folder> The path to the folder where you want to save the final report.
-Пример использования:
+Usage example:
```bash
npx testplane merge-reports path-to-database.db path-to-databaseUrls.json -d dest-report
diff --git a/docs/html-reporter/html-reporter-custom-gui.mdx b/docs/html-reporter/html-reporter-custom-gui.mdx
index ae9a05c..7433bdd 100644
--- a/docs/html-reporter/html-reporter-custom-gui.mdx
+++ b/docs/html-reporter/html-reporter-custom-gui.mdx
@@ -1,74 +1,72 @@
import Admonition from "@theme/Admonition";
-# Кастомизация GUI
+# Html-Reporter Customizing GUI
-## Обзор {#overview}
+## Overview {#overview}
-Данный способ кастомизации GUI устарел.
-
-Вместо него рекомендуется использовать [плагины для отчета](../html-reporter-plugins).
-
+ This method of GUI customization is outdated. It is recommended to use [report
+ plugins](../html-reporter-plugins) instead.
-Используйте опцию `customGui` в конфиге плагина `html-reporter`, чтобы добавить собственные элементы управления для GUI-режима.
+Use the `customGui` option in the `html-reporter` plugin config to add custom controls for GUI mode.
-Для элементов управления задается их тип (кнопка или радиокнопка), надписи и значения, а также функции инициализации и основного действия по нажатию. Элементы управления должны быть разбиты на отдельные разделы в зависимости от их назначения. Как минимум, должен быть указан один раздел.
+For controls, their type (button or radio button), labels and values, as well as initialization functions and the main click action are set. The controls should be divided into separate sections depending on their purpose. At least one section must be specified.
-По умолчанию значение опции `customGui`: `{}`.
+By default, the value of the `customGui` option is `{}`.
-## Настройка {#setup}
+## Setup {#setup}
-Опция `customGui` требует для своего значения объект следующего формата:
+The `customGui` option requires an object of the following format for its value:
```javascript
customGui: {
- '<название раздела>': [
+ '': [
{
- type: '<тип элементов управления>', // 'button' или 'radiobutton'
+ type: '', // 'button' or 'radiobutton'
controls: [
{
- label: '<надпись на элементе управления>',
- value: '<значение элемента управления>'
+ label: '',
+ value: ''
},
- // другие элементы управления...
+ // other controls...
],
initialize: async ({ testplane, ctx }) => {
- // код инициализации
- // возвращаемое значение будет проигнорировано
+ // initialization code
+ // the return value will be ignored
},
action: async ({ testplane, ctx, control }) => {
- // код действия
- // возвращаемое значение будет проигнорировано
+ // action code
+ // the return value will be ignored
}
},
- // другие группы элементов управления...
+ // other groups of controls...
],
- // другие разделы...
+ // other sections...
}
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Название** **Тип** **Описание**
+**Parameter** **Type** **Description**
-type String Обязательный параметр. Тип элементов управления. Доступные значения: _'button'_ и _'radiobutton'_.
-controls Array Массив объектов, каждый из которых описывает элемент управления. Объект должен состоять из двух ключей: _label_ и _value_, которые задают надпись на элементе управления и его значение.
-initialize Function Необязательный параметр. Асинхронная функция, которая будет выполнена на серверной стороне при старте Testplane в GUI-режиме. В функцию будет передан объект вида _\{ testplane, ctx }_, где _testplane_ — это инстанс testplane, а _ctx_ — объект, описывающий группу элементов, для которых вызывается функция инициализации.
-action Function Обязательный параметр. Асинхронная функция, которая будет выполнена на серверной стороне, когда пользователь нажмет на элемент управления. В функцию будет передан объект вида _\{ testplane, ctx, control }_, где _testplane_ — это инстанс testplane, _ctx_ — объект, описывающий группу элементов, для которых вызывается _action_-функция, и _control_ — ссылка на элемент управления, по которому кликнул пользователь.
+type String Required parameter. The type of controls. Available values: _'button'_ and _'radiobutton'_.
+controls Array An array of objects, each of which describes a control. The object must consist of two keys: _label_ and _value_, which specify the label on the control and its value.
+initialize Function Optional parameter. Asynchronous function that will be executed on the server side when Testplane starts in GUI mode. An object of the form _\{ testplane, ctx }_ will be passed to the function, where _testplane_ is an instance of testplane, and _ctx_ is an object describing a group of elements for which the initialization function is called.
+action Function Required parameter. Asynchronous function that will be executed on the server side when the user clicks on the control. An object of the form _\{ testplane, ctx, control }_ will be passed to the function, where _testplane_ is an instance of testplane, _ctx_ is an object describing a group of elements for which the _action_ function is called, and _control_ is a link to the control that the user clicked on.
-## Пример использования {#usage_example}
+## Usage example {#usage_example}
-Добавляем радиокнопки для изменения baseUrl'а в GUI-режиме:
+Adding radio buttons to change the base URL in GUI mode:
```javascript
customGui: {
diff --git a/docs/html-reporter/html-reporter-events.mdx b/docs/html-reporter/html-reporter-events.mdx
index 8fa4ab9..7b8c4d1 100644
--- a/docs/html-reporter/html-reporter-events.mdx
+++ b/docs/html-reporter/html-reporter-events.mdx
@@ -1,32 +1,32 @@
-# События плагина
+# Html-Reporter Events
-## Обзор {#overview}
+## Overview {#overview}
-Плагин `html-reporter` добавляет в интерфейс Testplane специальный объект _htmlReporter_, через который, в том числе, можно подписаться на события отчета. Для этого `testplane.htmlReporter` предоставляет свойство `events` со списком событий, на которые можно подписаться:
+The `html-reporter` plugin adds a special _htmlReporter_ object to Testplane's interface, through which, among other things, you can subscribe to report events. To do this, `testplane.htmlReporter` provides the `events` property with a list of events to subscribe to:
-- [DATABASE_CREATED](#database_created) — событие, которое триггерится сразу после создания sqlite базы данных;
-- [TEST_SCREENSHOTS_SAVED](#test_screenshots_saved) — событие, которое триггерится после сохранения скриншотов теста;
-- [REPORT_SAVED](#report_saved) — событие, которое триггерится после сохранения всех файлов отчета.
+- [DATABASE_CREATED](#database_created)—an event that is triggered immediately after the sqlite database is created;
+- [TEST_SCREENSHOTS_SAVED](#test_screenshots_saved)—the event that is triggered after saving screenshots of the test;
+- [REPORT_SAVED](#report_saved)—the event that is triggered after saving all the report files.
## DATABASE_CREATED
**sync | master**
-Событие `DATABASE_CREATED` триггерится сразу после создания sqlite базы данных. Обработчик события выполняется синхронно.
+The `DATABASE_CREATED` event is triggered immediately after the sqlite database is created. The event handler is executed synchronously.
-### Подписка на событие {#database_created_subscription}
+### Event subscription {#database_created_subscription}
```javascript
testplane.htmlReporter.on(testplane.htmlReporter.events.DATABASE_CREATED, db => {
- console.info(`Выполняется обработка события DATABASE_CREATED...`);
+ console.info(`DATABASE_CREATED event processing is in progress...`);
});
```
-#### Параметры обработчика {#database_created_handler_params}
+#### Handler parameters {#database_created_handler_params}
-В обработчик события передается инстанс базы данных.
+A database instance is passed to the event handler.
-### Пример использования {#database_created_example}
+### Usage example {#database_created_example}
```javascript
const parseConfig = require("./config");
@@ -35,12 +35,12 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled || testplane.isWorker()) {
- // или плагин отключен, или мы находимся в контексте воркера – уходим
+ // either the plugin is disabled, or we are in the context of a worker – we leave
return;
}
- // свойство "htmlreporter" гарантированно есть в объекте "testplane"
- // в момент срабатывания события INIT
+ // the "htmlReporter" property is guaranteed to be in the "testplane" object
+ // at the time the INIT event is triggered
testplane.on(testplane.events.INIT, () => {
testplane.htmlReporter.on(testplane.htmlReporter.events.DATABASE_CREATED, db => {
db.prepare(`CREATE TABLE IF NOT EXISTS testTable (foo TEXT, bar TEXT)`).run();
@@ -53,9 +53,9 @@ module.exports = (testplane, opts) => {
**async | master**
-Событие `TEST_SCREENSHOTS_SAVED` триггерится после сохранения скриншотов очередного теста. Обработчик события может быть асинхронным.
+The `TEST_SCREENSHOTS_SAVED` event is triggered after saving screenshots of the next test. The event handler can be asynchronous.
-### Подписка на событие {#test_screenshots_saved_subscription}
+### Event subscription {#test_screenshots_saved_subscription}
```javascript
testplane.htmlReporter.on(
@@ -85,15 +85,15 @@ testplane.htmlReporter.on(
);
```
-#### Параметры обработчика {#test_screenshots_saved_handler_params}
+#### Handler parameters {#test_screenshots_saved_handler_params}
-В обработчик события передается объект с информацией о тесте следующего вида:
+An object with information about the test of the following type is passed to the event handler:
```javascript
{
- testId, // идентификатор теста вида "."
- attempt, // номер попытки выполнения теста
- imagesInfo; // информация о скриншотах (см. выше пример подписки на событие)
+ testId, // id of the test: "."
+ attempt, // test execution attempt number
+ imagesInfo; // information about screenshots (see above example of event subscription)
}
```
@@ -101,24 +101,24 @@ testplane.htmlReporter.on(
**async | master**
-Событие `REPORT_SAVED` триггерится после сохранения всех файлов отчета. Обработчик события может быть асинхронным.
+The `REPORT_SAVED` event is triggered after saving all the report files. The event handler can be asynchronous.
-### Подписка на событие {#report_saved_subscription}
+### Event subscription {#report_saved_subscription}
```javascript
testplane.htmlReporter.on(testplane.htmlReporter.events.REPORT_SAVED, async ({ reportPath }) => {
- console.info(`Выполняется обработка события REPORT_SAVED, report path = ${reportPath}...`);
+ console.info(`REPORT_SAVED event processing is in progress, report path = ${reportPath}...`);
});
```
-#### Параметры обработчика {#report_saved_handler_params}
+#### Handler parameters {#report_saved_handler_params}
-В обработчик передается объект с ключом `reportPath`, в значении которого хранится путь к сохраненному отчету.
+An object with the key `reportPath` is passed to the handler, the value of which stores the path to the saved report.
-### Пример использования {#report_saved_example}
+### Usage example {#report_saved_example}
```javascript
testplane.htmlReporter.on(testplane.htmlReporter.events.REPORT_SAVED, async ({ reportPath }) => {
- await uploadDirToS3(reportPath); // загружаем отчет в хранилище S3
+ await uploadDirToS3(reportPath); // uploading the report to S3 storage
});
```
diff --git a/docs/html-reporter/html-reporter-plugins.mdx b/docs/html-reporter/html-reporter-plugins.mdx
index 6c373c8..234a1b6 100644
--- a/docs/html-reporter/html-reporter-plugins.mdx
+++ b/docs/html-reporter/html-reporter-plugins.mdx
@@ -1,18 +1,18 @@
-# Плагины для отчета
+# Html-Reporter Plugins
-## Обзор {#overview}
+## Overview {#overview}
-Используйте опцию `plugins` в конфиге плагина `html-reporter`, чтобы расширить функциональность отчета с помощью собственных плагинов к отчету.
+Use the `plugins` option in the `html-reporter` plugin config to extend the functionality of the report using your own plugins to the report.
-Чтобы ваши плагины в отчете заработали, включите опцию [pluginsEnabled][plugins-enabled] в конфиге плагина `html-reporter`, установив её значение в `true`.
+To make your plugins work in the report, enable the [pluginsEnabled][plugins-enabled] option in the `html-reporter` plugin config by setting its value to `true`.
-Список плагинов задается в виде массива с их описаниями. По умолчанию список считается пустым: `[]`.
+The list of plugins is set as an array with their descriptions. By default, the list is considered empty: `[]`.
-Плагины позволяют добавить в отчет собственные UI-компоненты (как для статического отчета, так и для GUI-режима), а также серверные «ручки» _(routes)_ (для GUI-режима).
+Plugins allow you to add your own UI components to the report (both for a static report and for GUI mode), as well as server "handles" _(routes)_ (for GUI mode).
-## Настройка {#setup}
+## Setup {#setup}
-Описание плагинов выглядит следующим образом:
+The description of plugins looks like this:
```javascript
plugins: [
@@ -34,79 +34,79 @@ plugins: [
];
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **Описание**
+**Parameter** **Type** **Description**
-[name](#name) String Обязательный параметр. Имя пакета с плагином для отчета. Предполагается, что плагин можно будет подключить с помощью _require(name)_.
-[component](#component) String Имя React-компонента из плагина.
-[point](#point) String Имя точки расширения в плагине _html-reporter_.
-[position](#position) String Определяет способ, с помощью которого компонент будет размещен в точке расширения.
-[config](#config) Object Конфигурация плагина.
+[name](#name) String Required parameter. The name of the package with the plugin for the report. It is assumed that the plugin can be connected using _require(name)_.
+[component](#component) String The name of the React component from the plugin.
+[point](#point) String The name of the extension point in the _html-reporter_ plugin.
+[position](#position) String Defines the method by which the component will be placed at the extension point.
+[config](#config) Object Plugin configuration.
-Плагин, для которого задан только параметр `name`, может быть использован для переопределения существующей мидлвари GUI-сервера.
+A plugin for which only the `name` parameter is set can be used to override an existing GUI server middleware.
-Плагин может определять больше одного компонента. Каждый компонент может быть применен к нескольким точкам расширения и/или несколько раз к одной и той же точке (с отдельными конфигурационными записями). Порядок применения компонентов определяется порядком конфигурации.
+A plugin can define more than one component. Each component can be applied to multiple extension points and/or multiple times to the same point (with separate configuration entries). The order in which components are applied is determined by the configuration order.
### name
-Обязательный параметр. Имя пакета с плагином для отчета. Предполагается, что плагин можно будет подключить с помощью _require(name)_.
+Required parameter. The name of the package with the plugin for the report. It is assumed that the plugin can be connected using _require(name)_.
### component
-Имя React-компонента из плагина.
+The name of the React component from the plugin.
### point
-Имя точки расширения в плагине _html-reporter_.
+The name of the extension point in the _html-reporter_ plugin.
-Определяет конкретное месторасположение указанного компонента внутри пользовательского интерфейса html-отчета.
+Defines the specific location of the specified component inside the html-reporter user interface.
-Подробнее смотрите в разделе «Точки расширения».
+For more information, see the section "[Extension points](#extension_points)".
### position
-Определяет способ, с помощью которого компонент будет размещен в точке расширения пользовательского интерфейса html-отчета.
+Defines the method by which the component will be placed at the extension point of the html-report user interface.
-Доступны следующие значение:
+The following values are available:
-**Значение** **Описание**
+**Value** **Description**
-wrap обернуть точку расширения в UI
-before разместить компонент перед точкой расширения
-after разместить компонент после точки расширения
+wrap wrap the extension point in the UI
+before place the component before the extension point
+after place the component after the extension point
### config
-Конфигурация плагина.
+Plugin configuration.
-## Код плагинов для отчета {#plugins_code}
+## Plugin code for the report {#plugins_code}
-Примеры плагинов можно [посмотреть в функциональных тестах][html-reporter-plugins].
+Examples of plugins can be [viewed in functional tests][html-reporter-plugins].
-Плагин `html-reporter` — это объект с некоторым набором React-компонентов, заданных в виде его ключей, и необязательным ключом `reducers` с массивом redux-редьюсеров для управления состоянием компонентов, которые позже объединяются с помощью [reduce-reducers][reduce-reducers].
+The `html-reporter` plugin is an object with some set of React components specified as its keys, and an optional `reducers` key with an array of redux-reducers to control the state of components, which are later combined using [reduce-reducers][reduce-reducers].
-Ожидается, что плагин для отчета будет иметь следующие модульные файлы в корне своего пакета: `plugin.js` и/или `middleware.js`.
+The plugin for the report is expected to have the following module files in the root of its package: `plugin.js` and/or `middleware.js`.
### plugin.js
-Опциональный модуль. Файл, который должен экспортировать объект (или набор именованных экспортов) или функцию, возвращающую такой объект или массив с некоторой определенной структурой.
+Optional module. A file that should export an object (or a set of named exports) or a function that returns such an object or array with some specific structure.
-Можно повторно использовать зависимости `html-reporter` в плагинах (React, Redux и др.). Для этого из модуля должен быть экспортирован массив со списком необходимых зависимостей, за которым следует функция, с переданными ей соответствующими зависимостями, и возвращающая сам плагин.
+You can reuse the `html-reporter` dependencies in plugins (React, Redux, etc.). To do this, an array with a list of necessary dependencies must be exported from the module, followed by a function with the corresponding dependencies passed to it, and returning the plugin itself.
-Например:
+For example:
```javascript
import "plugin-styles.css";
@@ -115,7 +115,7 @@ export default [
"react",
function (React, options) {
class PluginComponent extends React.Component {
- // реализация компонента
+ // component implementation
}
return {
@@ -126,13 +126,13 @@ export default [
];
```
-Стили для плагина должны загружаться вместе с `plugin.js`, и итоговый файл должен быть одним бандлом.
+Styles for the plugin must be loaded together with `plugin.js`, and the resulting file should be one bundle.
-Значение, экспортируемое из `plugin.js`, должно передаваться в `__testplane_html_reporter_register_plugin__`.
+Value exported from `plugin.js`, should be passed to `__testplane_html_reporter_register_plugin__`.
-Это можно сделать двумя способами.
+There are two ways to do this.
-Например, настроить сборку _webpack_ так, чтобы она создавала соответствующую библиотеку `jsonp`:
+For example, configure the build by _webpack_ so that it creates the corresponding `jsonp` library:
```javascript
// ...
@@ -145,7 +145,7 @@ output: {
// ...
```
-Или передать значение, экспортируемое из `plugin.js`, явно:
+Or pass the value exported from `plugin.js`, clearly:
```javascript
__testplane_html_reporter_register_plugin__([
@@ -159,22 +159,22 @@ __testplane_html_reporter_register_plugin__([
### middleware.js
-Опциональный модуль. Экспортирует функцию, принимающую `Router` от [express][express]. Ожидается, что «ручки» плагина будут подключены к роутеру. А роутер затем подключается к «ручке» `/plugin-routes/:pluginName/`.
+Optional module. Exports a function that accepts `Router` from [express][express]. It is expected that the "routes" of the plugin will be connected to the router. And the router then connects to the "route" `/plugin-routes/:PluginName/`.
```javascript
module.exports = function (pluginRouter) {
pluginRouter.get("/plugin-route", function (req, res) {
- // реализация «ручки»
+ // "route" implementation
});
};
```
-Затем «ручки» могут быть вызваны из React-компонентов плагина, определенных в `plugin.js `. Для удобства имя плагина всегда передается с опциями под названием `pluginName`, когда для экспорта используется функция или массив функций:
+Then the "routes" can be called from the React components of the plugin defined in `plugin.js`. For convenience, the plugin name is always passed with options called `pluginName` when a function or an array of functions is used for export:
```javascript
export default ['react', 'axios', function(React, axios, { pluginName, pluginConfig, actions, actionNames, selectors }) {
class PluginComponent extends React.Component {
- // ... где-то внутри компонента ...
+ // ... somewhere inside the component ...
const result = await axios.get(`/plugin-routes/${pluginName}/plugin-route`);
}
@@ -185,25 +185,25 @@ export default ['react', 'axios', function(React, axios, { pluginName, pluginCon
}
```
-В этом примере также можно увидеть следующие свойства:
+In this example, you can also see the following properties:
-**Свойство** **Описание**
+**Property** **Description**
-pluginName имя плагина
-pluginConfig конфигурация плагина
-actions Redux-действия
-actionNames имена действий в _html-reporter_, которые используются в Redux-действиях, чтобы иметь возможность подписаться на события отчета
-selectors закэшированные селекторы отчета, которые были созданы с помощью библиотеки [reselect][redux-reselect]
+pluginName plugin name
+pluginConfig plugin configuration
+actions Redux-actions
+actionNames action names in _html-reporter_ that are used in Redux-actions, allow to subscribe to report events
+selectors cached report selectors that were created using the [reselect][redux-reselect] library
-### Доступные зависимости {#available_deps}
+### Available dependencies {#available_deps}
-В плагинах доступны следующие зависимости:
+The following dependencies are available in plugins:
- [react][react]
- [redux][redux]
@@ -218,47 +218,47 @@ export default ['react', 'axios', function(React, axios, { pluginName, pluginCon
- [reselect][redux-reselect]
- [axios][axios]
-### Доступные компоненты {#available_components}
+### Available components {#available_components}
#### ` `
-Компонент, с помощью которого можно переключать отображение контента (аналог ката).
+A component with which you can switch the display of content.
-Пример использования:
+Usage example:
```javascript
-// ...внутри вашего React-компонента
+// ...inside your React component
render() {
return console.log('clicked')} // а также свой обработчик
+ content='Some content' // content that will appear by clicking on the title
+ extendClassNames='some_class_name' // you can add your own css classes to the component
+ onClick={() => console.log('clicked')} // as well as your handler
/>
}
```
-где:
+where:
-**Свойство** **Тип** **Описание**
+**Property** **Type** **Description**
-title String или JSX.Element Обязательный параметр. Заголовок, описывающий информацию, скрытую под ним.
-content Function или String или String[] или JSX.Element Обязательный параметр. Контент, который будет появляться по нажатию на заголовок.
-extendClassNames String или String[] Css-классы, которые нужно добавить к компоненту. Необязательный параметр.
-onClick Function Обработчик, который будет вызван по нажатию на заголовок. Необязательный параметр.
+title String or JSX.Element Required parameter. A header describing the information hidden under it.
+content Function or String or String[] or JSX.Element Required parameter. The content that will appear when you click on the title.
+extendClassNames String or String[] CSS classes to add to the component. Optional parameter.
+onClick Function The handler that will be called by clicking on the header. Optional parameter.
-## Точки расширения {#extension_points}
+## Extension points {#extension_points}
-Точки расширения — это места в пользовательском интерфейсе отчета, которые доступны для расширения с помощью React-компонентов, экспортируемых _плагинами для отчета_.
+Extension points are places in the user interface of the report that are available for extension using React components exported by _plugins for the report_.
-Каждая точка расширения может передавать определенные props'ы компонентам плагина в зависимости от самой точки. Поскольку некоторые плагины могут полагаться на конкретное размещение и, следовательно, на конкретные props'ы, то можно ограничить компоненты плагина определенными точками расширения, указав статическое свойство `point` для таких компонентов плагина:
+Each extension point can pass certain props to plugin components depending on the point itself. Since some plugins may rely on a specific placement and, therefore, on specific props, it is possible to restrict plugin components to certain extension points by specifying a static `point` property for such plugin components:
```javascript
class PluginComponent extends React.Component {
@@ -267,25 +267,25 @@ class PluginComponent extends React.Component {
}
```
-В данный момент доступны следующие точки расширения:
+The following extension points are currently available:
-**Точка** **Описание**
+**Point** **Description**
-result Позволяет расширить каждый результат теста. Добавляет props'ы _resultId_ и _testName_ в компонент плагина.
-result_meta Позволяет расширить мета-информацию для каждого результата теста. Добавляет props'ы _resultId_ и _testName_ в компонент плагина.
-menu-bar Позволяет расширить меню.
-root Позволяет добавить такие плавающие элементы, как модальное окно или попап.
+result Allows you to extend each test result. Adds the _resultId_ and _testName_ props to the plugin component.
+result_meta Allows you to extend the meta information for each test result. Adds the _resultId_ and _testName_ props to the plugin component.
+menu-bar Allows you to extend the menu.
+root Allows you to add floating elements such as a modal window or a popup.
-Точка расширения может быть расширена более чем одним компонентом. В этом случае порядок применения компонентов определяется порядком настройки плагинов. Каждый следующий компонент применяется ко всем ранее составленным компонентам в точке расширения.
+An extension point can be extended by more than one component. In this case, the order in which components are applied is determined by the order in which plugins are configured. Each subsequent component is applied to all previously composed components at the extension point.
[plugins-enabled]: ../html-reporter-setup#pluginsenabled
-[html-reporter-plugins]: https://github.com/gemini-testing/html-reporter/blob/master/test/func/fixtures/plugins
+[html-reporter-plugins]: https://github.com/gemini-testing/html-reporter/blob/master/test/func/fixtures/plugins/.testplane.conf.js
[reduce-reducers]: https://github.com/redux-utilities/reduce-reducers
[express]: https://github.com/expressjs/express
[redux-reselect]: https://github.com/reduxjs/reselect
diff --git a/docs/html-reporter/html-reporter-setup.mdx b/docs/html-reporter/html-reporter-setup.mdx
index 486ab27..0a63ac4 100644
--- a/docs/html-reporter/html-reporter-setup.mdx
+++ b/docs/html-reporter/html-reporter-setup.mdx
@@ -7,52 +7,53 @@ import TabItem from "@theme/TabItem";
import Admonition from "@theme/Admonition";
-# Подключение html-reporter
+# Html-Reporter Setup
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [html-reporter][html-reporter], чтобы получить html-отчет о прогоне тестов.
+Use the [html-reporter][html-reporter] plugin to get an html-report on the tests run.
-![Html-отчет](/img/docs/html-reporter/html-reporter.overview.png)
+[//]: # "![Html-report](_images/html-reporter.overview.png)"
-
- Для корректной работы плагина _html-reporter_ требуется [testplane][testplane] версии 4 и выше.
+
+ For the html-reporter plugin to work correctly, [hermione][testplane] version 4 and higher is
+ required.
-Плагин сохраняет результаты прогона тестов в базу данных [SQLite][sqlite]. Поэтому вы не сможете открыть локальный отчет как файл с помощью `file://` протокола.
+The plugin saves the tests run results to the [SQLite][sqlite] database. Therefore, you will not be able to open the local report as a file using the `file://` protocol.
-Чтобы посмотреть отчет, запустите testplane в GUI-режиме:
+To view the report, run Testplane in GUI mode:
```bash
npx testplane gui
```
-Или запустите [http-server][http-server] в папке с отчетом:
+Or run [http-server][http-server] in the report folder:
```bash
npx http-server -p 8000
```
-Если вы запускаете локальный сервер не из папки с отчетом, то укажите путь к отчету:
+If you are starting a local server not from the folder with the report, then specify the path to the report:
```bash
npx http-server ./testplane-report -p 8000
```
-После чего откройте страницу `http://localhost:8000` в браузере.
+Then open the page `http://localhost:8000` in the browser.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D html-reporter
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the Testplane config:
-
+
```javascript
module.exports = {
plugins: {
@@ -60,16 +61,16 @@ npm install -D html-reporter
enabled: true
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-
+
```javascript
module.exports = {
plugins: {
@@ -88,87 +89,87 @@ npm install -D html-reporter
],
customScripts: [
function() {
- // кастомный скрипт
+ // custom script
},
- // другие скрипты...
+ // other scripts...
],
customGui: {
- // DEPRECATED (этот параметр устарел)
- // дополнительные элементы управления для GUI-режима
- // используйте plugins (плагины для отчета) вместо customGui
+ // DEPRECATED
+ // additional controls for GUI mode
+ // use report plugins instead of customGui
},
pluginsEnabled: true,
plugins: [
- // плагины для отчета...
+ // report plugins...
],
yandexMetrika: {
counter: 1234567
}
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
- }
+ // other Testplane settings...
+ };
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-[enabled](#enabled) Boolean true Включить / отключить плагин.
-[path](#path) String "testplane-report" Путь к папке для сохранения файлов html-отчета.
-[saveErrorDetails](#saveerrordetails) Boolean false Сохранять / не сохранять подробности ошибок в json-файлах.
-[defaultView](#defaultview) String "all" Режим фильтрации тестов при отображении, который будет установлен по умолчанию.
-[diffMode](#diffmode) String "3-up" Режим просмотра диффов, который будет установлен по умолчанию.
-[baseHost](#basehost) String _N/A_ Заменяет оригинальный адрес хоста для просмотра в браузере.
-[errorPatterns](#errorpatterns) Object[] или String[] [ ] Паттерны ошибок с подсказками для улучшения UX отчета.
-[metaInfoBaseUrls](#metainfobaseurls) Object `{ }` Базовые URL-адреса для формирования ссылок в разделе _Meta_ на основе мета-информации о прогоне теста.
-[saveFormat](#saveformat) String "sqlite" ПАРАМЕТР УСТАРЕЛ. Позволяет задать формат, в котором будут сохранены результаты прогона тестов.
-[customGui](#customgui) Object `{ }` ПАРАМЕТР УСТАРЕЛ. Используйте вместо него [plugins](#plugins). Описание собственных элементов управления для GUI-режима.
-[pluginsEnabled](#pluginsenabled) Boolean false Включить плагины для отчета.
-[plugins](#plugins) Object[] [ ] Список плагинов с их настройками.
-[customScripts](#customscripts) Function[] [ ] Список функций, реализующих кастомные скрипты. Например, скрипты Яндекс.Метрики или Жучка.
-[yandexMetrika](#yandexmetrika) Object `{ }` [Яндекс.Метрика][yandex-metrika].
+[enabled](#enabled) Boolean true Enable / disable the plugin.
+[path](#path) String "testplane-report" The path to the folder for saving html-report files.
+[saveErrorDetails](#saveerrordetails) Boolean false Save / do not save error details in json files.
+[defaultView](#defaultview) String "all" The test filtering mode when displayed, which will be set by default.
+[diffMode](#diffmode) String "3-up" The mode of viewing diffs, which will be set by default.
+[baseHost](#basehost) String _N/A_ Replaces the original host address for viewing in the browser.
+[errorPatterns](#errorpatterns) Object[] or String[] [ ] Error patterns with hints to improve the UX of the report.
+[metaInfoBaseUrls](#metainfobaseurls) Object `{ }` Base URLs for generating links in the _Meta_ section based on meta information about the tests run.
+[saveFormat](#saveformat) String "sqlite" DEPRECATED. Allows you to set the format in which the results of the tests run will be saved.
+[customGui](#customgui) Object `{ }` DEPRECATED. Use [plugins](#plugins) instead. Description of custom controls for GUI mode.
+[pluginsEnabled](#pluginsenabled) Boolean false Enable plugins for the report.
+[plugins](#plugins) Object[] [ ] A list of plugins with their settings.
+[customScripts](#customscripts) Function[] [ ] A list of functions that implement custom scripts. For example, Yandex.Metrika scripts or a Bug.
+[yandexMetrika](#yandexmetrika) Object `{ }` [Yandex.Metrika][yandex-metrika].
### enabled
-Включает или отключает плагин.
+Enables or disables the plugin.
### path
-Путь к папке для сохранения файлов html-отчета. По умолчанию файлы будут сохранены в папку `testplane-report` в текущей рабочей папке.
+The path to the folder for saving html-report files. By default, the files will be saved to the `testplane-report` folder in the current working folder.
### saveErrorDetails
-Сохранять или не сохранять подробности ошибок в json-файлах (в папку `error-details`).
+Save or not save error details in json files (to the `error-details` folder).
-По умолчанию «не сохранять»: `false`.
+By default, "do not save": `false`.
-Любой плагин testplane может добавить какие-либо подробности в объект ошибки при её возникновении. Эти подробности могут помочь пользователю в отладке проблем, которые возникли в тесте. Html-reporter сохраняет эти детали в папке `error-details` в файле с именем: `<хэш от полного названия теста>-<браузер>_<номер ретрая>_<временная метка>.json`.
+Any Testplane plugin can add any details to the error object when it occurs. These details can help the user in debugging problems that have occurred in the test. Html-reporter saves these details in the `error-details` folder in a file named: `-__.json`.
-Под стектрейсом html-reporter добавляет раздел `Error details` со ссылкой ``, указывающей на json-файл. Пользователь может открыть этот файл либо в браузере, либо в любой IDE.
+Under the stack trace, the html-reporter adds an `Error details` section with a `` link pointing to the json file. The user can open this file either in the browser or in any IDE.
-Пример как добавить подробности в объект ошибки из плагина:
+Example of how to add details to an error object from a plugin:
```javascript
const err = new Error("some error");
err.details = {
title: "description, will be used as url title",
- data: {}, // или [], или String
+ data: {}, // or [], or String
};
throw err;
@@ -176,115 +177,115 @@ throw err;
### defaultView
-Режим фильтрации тестов при отображении, который будет установлен по умолчанию. Доступны следующие значения:
+The test filtering mode when displayed, which will be set by default. The following values are available:
-**Режим** **Описание**
+**View mode** **Description**
-all все тесты
-passed только успешные тесты
-failed только упавшие тесты
-retried только те тесты, в которых были ретраи (повторные запуски)
-skipped только отключенные (заскипанные) тесты
+all all tests
+passed only passed tests
+failed only failed tests
+retried only those tests in which there were retries (re-runs)
+skipped only disabled (skipped) tests
-По умолчанию: `all`, то есть если параметр не задан, то будут показываться все тесты.
+By default: `all`, that is, if the parameter is not set, all tests will be displayed.
### diffMode
-Режим просмотра диффов, который будет установлен по умолчанию. Доступны следующие значения:
+The mode of viewing diffs, which will be set by default. The following values are available:
-**Режим** **Описание**
+**Diff mode** **Description**
-3-up все изображения _(expected, actual, diff)_ в одном столбце, друг под другом
-3‑up‑scaled все изображения _(expected, actual, diff)_ в один ряд так, чтобы они помещались на экране
-only-diff только дифф _(diff)_
-switch эталонное изображение с возможностью переключаться на актуальное изображение по клику мыши
-swipe актуальное изображение поверх эталонного, с разделителем открывающим эталонное изображение
-onion-skin актуальное изображение поверх эталонного с возможностью менять прозрачность актуального изображения
+3-up all images _(expected, actual, diff)_ in one column, under each other
+3‑up‑scaled all images _(expected, actual, diff)_ in one row so that they fit on the screen
+only-diff only diff image
+switch reference image with the ability to switch to the actual image by mouse click
+swipe the actual image on top of the reference image, with a separator opening the reference image
+onion-skin the actual image on top of the reference with the ability to change the transparency of the actual image
-По умолчанию: `3-up`.
+By default: `3-up`.
### baseHost
-Заменяет оригинальный адрес хоста для просмотра в браузере. По умолчанию оригинальный адрес хоста не изменяется.
+Replaces the original host address for viewing in the browser. By default, the original host address is not changed.
### errorPatterns
-Паттерны ошибок используются:
+Error patterns are used:
-- чтобы показать более понятную информацию об ошибках, если они соответствуют паттернам, для которых есть подробное описание;
-- в режиме отображения `Group by` с выбранным ключом `error`.
+- to show more understandable error information if they correspond to patterns for which there is a detailed description;
+- in the `Group by` display mode with the `error` key selected.
-Паттерны ошибок можно задавать как в виде объектов, так и в виде строк.
+Error patterns can be set either as objects or as strings.
-Чтобы задать паттерн ошибки в виде объекта, используйте следующий формат:
+To set the error pattern as an object, use the following format:
```javascript
{
- name: '<название ошибки>',
- pattern: '<паттерн ошибки>',
- hint: '<подсказка пользователю>'
+ name: '',
+ pattern: '',
+ hint: ''
}
```
-где:
+where:
-**Параметр** **Тип** **Описание**
+**Parameter** **Type** **Description**
-name String Название ошибки.
-pattern String или RegExp Регулярное выражение или обычная строка, которой должна соответствовать ошибка.
-hint String Необязательный параметр. Подсказка, что можно сделать с данной ошибкой: почему она возникла, как её исправить и т. п.
+name String Error name.
+pattern String or RegExp A regular expression or a regular string that the error should match.
+hint String Optional parameter. A hint of what can be done with this error: why it occurred, how to fix it, etc.
-Если паттерн ошибки задан в виде строки, например: `<ошибка>`, то эта строка автоматически рассматривается как объект вида:
+If the error pattern is specified as a string, for example: ``, then this string is automatically treated as an object of the form:
```javascript
{
- name: '<ошибка>',
- pattern: '<ошибка>'
+ name: '',
+ pattern: ''
}
```
-Такой способ задания паттерна удобен для тех ошибок, у которых `name` и `pattern` полностью совпадают.
+This way of setting a pattern is convenient for those errors where `name` and `pattern` are completely the same.
-Когда один из шаблонов ошибок совпадает с сообщением об ошибке, то:
+When one of the error patterns matches the error message, then:
-- `name` шаблона ошибки будет отображаться как заголовок сообщения об ошибке, а исходное сообщение об ошибке будет скрыто под катом;
-- `hint` для ошибки будет отображаться после поля ошибки `stack`. Подсказка может быть задана в виде html-строки. Например, `some-useful-hint
`.
+- the `name` of the error template will be displayed as the title of the error message, and the original error message will be hidden under the cut;
+- the `hint` for the error will be displayed after the error field `stack`. The hint can be specified as an html string. For example, `some-useful-hint
`.
-В режиме `Group by` _(группировать по)_ с выбранным ключом `error` тест будет связан с группой, если ошибка теста совпадает с шаблоном ошибок группы. Если тест не может быть связан с существующими группами, то будет создана новая группа.
+In the `Group by` mode with the selected `error` key, the test will be associated with the group if the test error matches the group error pattern. If the test cannot be linked to existing groups, a new group will be created.
### metaInfoBaseUrls
-Базовые URL-адреса для формирования ссылок в разделе `Meta` на основе мета-информации о прогоне теста.
+Base URLs for generating links in the `Meta` section based on meta information about the tests run.
-Параметр задается в виде объекта:
+The parameter is set as an object:
```javascript
{
- '<опция-1>': 'значение опции 1',
- '<опция-2>': 'значение опции 2',
- // и т. д.
+ '': 'value of option 1',
+ '': 'value of option 2',
+ // etc.
}
```
-Например:
+For example:
```javascript
{
@@ -294,41 +295,41 @@ throw err;
### saveFormat
-**Параметр устарел**
+**DEPRECATED**
-Позволяет задать формат, в котором будут сохранены результаты прогона тестов.
+Allows you to set the format in which the results of the tests run will be saved.
-Доступным осталось только одно значение, которое используется по умолчанию:
+Only one value is available now, which is used by default:
-- `sqlite` — сохранить результаты прогона тестов в базе данных формата SQLite.
+- `sqlite` — save the results of the tests run in the database of SQLite format.
### customGui
-**Параметр устарел**
+**DEPRECATED**
- Вместо _customGui_ рекомендуется использовать [плагины для отчета](#plugins).
+ Instead of customGui, it is recommended to use [report plugins](#plugins).
-Описание собственных элементов управления для GUI-режима.
+Description of custom controls for GUI mode.
-Смотрите подробнее в разделе «[Кастомизация GUI](../html-reporter-custom-gui)».
+See more in the section "[Customizing GUI](../html-reporter-custom-gui)".
### pluginsEnabled
-Включить плагины для `html-reporter`.
+Enable plugins for `html-reporter`.
### plugins
-Список плагинов с их настройками.
+A list of plugins with their settings.
-Смотрите подробнее в разделе «[Плагины для отчета](../html-reporter-plugins)».
+See more details in the section "[Plugins](../html-reporter-plugins)".
### customScripts
-Список кастомных скриптов в виде массива функций. С помощью этого параметра можно добавить любой скрипт на страницу html-отчета. Например, для сбора каких-либо метрик или реализации дополнительной функциональности. Скрипты будут выполнены сразу после рендеринга страницы.
+A list of custom scripts in the form of an array of functions. Using this parameter, you can add any script to the html-report page. For example, to collect any metrics or implement additional functionality. The scripts will be executed immediately after rendering the page.
-Пример:
+For example:
```javascript
customScripts: [
@@ -345,18 +346,18 @@ customScripts: [
### yandexMetrika
-Данный параметр позволяет добавить в отчет [Яндекс.Метрику][yandex-metrika]. Параметр задается в виде объекта с ключом `counterNumber` _(номер счетчика)_. В качестве значения ключа необходимо указать номер счетчика Яндекс.Метрики (см. «[Как создать счетчик][how-to-create-counter]»). Номер должен задаваться как число _(Number)_, а не строка.
+This parameter allows you to add [Yandex.Metrika][yandex-metrika] to the report. The parameter is set as an object with the key `counterNumber`. As the key value, you must specify the Yandex.Metrica counter number (see "[How to create a counter][how-to-create-counter]"). The number should be set as a Number, not a String.
-Также в интерфейсе Яндекс.Метрики необходимо перейти в разделе настроек на вкладку _«Счетчик»_, нажать кнопку _«Скопировать»_ и вставить код счетчика в поле [customScripts](#customscripts).
+Also, in the Yandex.Metrika interface, go to the _"Counter"_ tab in the settings section, click _"Copy"_ and paste the counter code into the [customScripts](#customscripts) field.
-С помощью метрики вы сможете узнать как разработчики взаимодействуют с вашим отчетом и с какого рода проблемами они сталкиваются.
+With the help of metrics, you can find out how developers interact with your report and what kind of problems they face.
-Отчет поддерживает следующие [цели для метрики][yandex-metrika-goals]:
+The report supports the following [goals of metrics][yandex-metrika-goals]:
-- **ACCEPT_SCREENSHOT** — было нажатие на кнопку _Accept_ для принятия скриншота;
-- **ACCEPT_OPENED_SCREENSHOTS** — было нажатие на кнопку _Accept opened_ для принятия скриншотов из открытых тестов.
+- **ACCEPT_SCREENSHOT**—there was a click on the _Accept_ button to accept a screenshot;
+- **ACCEPT_OPENED_SCREENSHOTS**—there was a click on the _Accept opened_ button to accept screenshots from open tests.
-Пример настройки _Яндекс.Метрики_ в одном из проектов:
+Example of setting up Yandex.Metrika in one of the projects:
```javascript
module.exports = {
@@ -365,27 +366,27 @@ module.exports = {
customScripts: [
function(){(function(m,e,t,r,i,k,a){m[i]=m[i]function(){(m[i].a=m[i].a []).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(56782912, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true })},
- // другие скрипты...
+ // other scripts...
],
yandexMetrika: {
counterNumber: 1234567
},
- // другие настройки плагина...
+ // other plugin settings...
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--html-reporter-` для опций командной строки и `html_reporter_` — для переменных окружения.
+All plugin parameters that can be defined in the config can also be passed as command line options or through environment variables during Testplane startup. Use the prefix `--html-reporter-` for command line options and `html_reporter_` for environment variables.
-Например, параметр настроек [path](#path) можно передать следующими способами:
+For example, the settings parameter [path](#path) can be passed in the following ways:
```bash
testplane path/to/mytest.js --html-reporter-path custom/dir
@@ -395,23 +396,23 @@ testplane path/to/mytest.js --html-reporter-path custom/dir
html_reporter_path=custom/dir testplane path/to/mytest.js
```
-## Хранение данных {#data_storage}
+## Data storage {#data_storage}
-Как уже было сказано выше, `html-reporter` сохраняет результаты прогона тестов в базу данных [SQLite][sqlite].
+As mentioned above, `html-reporter` saves the tests run results to the [SQLite][sqlite] database.
-Почему мы используем SQLite? Потому что он:
+Why do we use SQLite? Because it is:
-- бессерверный, легко подключаемый и не требует настроек
-- кросс-платформенный, запускается на любой операционной системе
-- одно-файловый, легко переиспользовать отчеты и делиться ими
-- быстрее, чем если хранить отчет на файловой системе
-- компактный и имеет полноценный SQL.
+- serverless, easy to connect and requires no configuration
+- cross-platform, runs on any operating system
+- single-file, easy to reuse reports and share them
+- faster than if you store the report on the file system
+- compact and has full SQL.
-Файлы, который создаются во время выполнения тестов:
+Files that are created during the execution of tests:
-- `sqlite.db` — база данных Sqlite с результатами прогона тестов
-- `data.js` — конфиг отчета
-- `databaseUrls.json` — абсолютные или относительные URL-адреса на базы данных SQLite (`sqlite.db`) и/или URL-адреса других файлов `databaseUrls.json` (см. команду [merge-reports][merge-reports])
+- `sqlite.db`—Sqlite database with tests run results
+- `data.js`—report configuration
+- `databaseUrls.json`—absolute or relative URLs to SQLite databases (`sqlite.db`) and/or URLs of other `databaseUrls.json` files (see command [merge-reports][merge-reports]).
[html-reporter]: https://github.com/gemini-testing/html-reporter
[testplane]: https://github.com/gemini-testing/testplane
diff --git a/docs/index.mdx b/docs/index.mdx
index 89553cc..2d51eae 100644
--- a/docs/index.mdx
+++ b/docs/index.mdx
@@ -1,93 +1,95 @@
-# Обзор
+---
+sidebar_position: 1
+---
-## О Testplane
+# Overview
-**Testplane** — это инструмент для автоматизации тестирования пользовательских сценариев в web-интерфейсах.
+**Testplane** — a tool for automating testing of user scenarios in web interfaces.
-С помощью неё вы можете протестировать функциональность своего сайта или проекта, а также проверить, что ваша верстка при любых обстоятельствах соответствует эталонной. В вашем распоряжении — весь [спектр команд][commands], которые предоставляет [WebDriverIO v8][webdriverio-api] и [все возможности протокола Chrome DevTools][how-to-use-cdp]. А ещё — привычный синтаксис [Mocha][mocha].
+With Testplane, you can test the functionality of your site or project and ensure that your layout consistently matches what's expected under any circumstances. At your disposal, you have the full range of [commands][commands] provided by [WebDriverIO v8][webdriverio-api] and [all the capabilities of the Chrome DevTools protocol][how-to-use-cdp]. Additionally, you have the familiar [Mocha][mocha] syntax.
-В вашем проекте становится всё больше и больше тестов? — Testplane позволит вам легко масштабировать их прогон, не теряя в юзабилити. Она умеет не только запускать тесты параллельно, в разных браузерах, на разных платформах, но и собирать все результаты прогонов в единый html-отчет, с возможностями гибкого просмотра, группировки и фильтрации тестов.
+Is your testing workload growing as your project evolves? — Testplane allows you to easily scale your test runs without losing usability. It not only runs tests in parallel, across different browsers and platforms, but also gathers all the test results into a single HTML report with flexible viewing, grouping, and filtering capabilities.
-Вам не хватает какой-то функциональности? — Не проблема! Вы можете написать свой плагин и решить свою задачу с максимальной эффективностью. Или найти уже готовый плагин и добавить его к своему проекту.
+Lacking some functionality? — Not an issue! You can write your own plugin to address your needs with maximum efficiency. Or find an existing plugin and add it to your project.
-И это не всё.
+And that’s not all.
-## Почему именно Testplane? {#why-testplane}
+## Why Testplane? {#why-testplane}
-- [Легкая настройка и большие возможности](#easystart_great_features)
-- [Быстрое выполнение тестов](#fast)
-- [Гибкий запуск тестов](#flexible)
-- [Умное поведение при ошибках](#smart)
-- [Подробный отчет о прогоне тестов](#user_friendly)
-- [Интерактивный запуск тестов](#interactive)
-- [Богатые возможности для отладки](#debuggable)
-- [Расширяемость](#extendable)
+- [Easy Setup and Great Features](#easystart_great_features)
+- [Fast Test Execution](#fast)
+- [Flexible Test Running](#flexible)
+- [Smart Error Handling](#smart)
+- [Detailed Test Run Report](#user_friendly)
+- [Interactive Test Running](#interactive)
+- [Rich Debugging Capabilities](#debuggable)
+- [Extensibility](#extendable)
-### Легкая настройка и большие возможности {#easystart_great_features}
+### Easy Setup and Great Features {#easystart_great_features}
-- быстрое создание проекта с помощью [create-testplane][create-testplane];
-- все ключевые параметры имеют [оптимальные дефолты][defaults];
-- легко писать тесты, так как в основе [Mocha][mocha];
-- большой [спектр команд][commands], «под капотом» — [WebdriverIO v8][webdriverio-api];
-- своя мощная команда [assertView][assert-view] для снятия и сравнения скриншотов;
-- при сравнении скриншотов [можно гибко управлять параметрами][assert-view-opts] для отдельных тестов;
-- при снятии скриншотов можно указать какие области игнорировать;
-- автоматическая склейка больших изображений, выходящих за пределы вьюпорта.
+- quickly create a project using [create-testplane][create-testplane];
+- all key parameters have [optimal defaults][defaults];
+- easy to write tests based on [Mocha][mocha];
+- a wide [range of commands][commands], powered by [WebdriverIO v8][webdriverio-api];
+- a robust [assertView][assert-view] command for taking and comparing screenshots;
+- flexible [parameters management][assert-view-opts] for individual tests when comparing screenshots;
+- specify areas to ignore when taking screenshots;
+- automatic stitching of large images that exceed the viewport.
-### Быстрое выполнение тестов {#fast}
+### Fast Test Execution {#fast}
-- за счет [параллельности внутри Testplane][testplane-workers];
-- масштабирование с помощью [testplane-chunks][testplane-chunks];
-- [повторное реиспользование сессий][sessions-reuse];
-- кэширование сессий с браузерами;
-- 20000 тестов за 10 минут — легко!
+- thanks to [parallelism within Testplane][testplane-workers];
+- scale using [testplane-chunks][testplane-chunks];
+- [reusing sessions][sessions-reuse];
+- session caching with browsers;
+- 20,000 tests in 10 minutes.
-### Гибкий запуск тестов {#flexible}
+### Flexible Test Running {#flexible}
-- в конкретном браузере;
-- [по платформам (sets)][testplane-sets] — на десктопных и мобильных браузерах;
-- [по совпадению с маской][testplane-option-grep];
-- [из конкретного файла][how-to-run-test-in-file];
-- [заданное количество раз для проверки стабильности][how-to-check-test-stability];
-- [хелперы only.in, only.notIn, skip.in, skip.notIn, also.in][how-to-skip-tests].
+- in a specific browser;
+- [across platforms (sets)][testplane-sets] — on desktop and mobile browsers;
+- [by matching patterns][testplane-option-grep];
+- [from a specific file][how-to-run-test-in-file];
+- [a set number of times to check stability][how-to-check-test-stability];
+- [helpers only.in, only.notIn, skip.in, skip.notIn, also.in][how-to-skip-tests].
-### Умное поведение при ошибках {#smart}
+### Smart Error Handling {#smart}
-- [отказ от сессий, упавших с заданными паттернами ошибок][patterns-on-reject];
-- [ретраи с ограничением по времени и количеству ретраев][retry-limiter];
-- [ретраи инфраструктурных ошибок][retry-progressive].
+- [reject sessions that fail with specific error patterns][patterns-on-reject];
+- [retries with time and count limits][retry-limiter];
+- [retries for infrastructure errors][retry-progressive].
-### Подробный отчет о прогоне тестов {#user_friendly}
+### Detailed Test Run Report {#user_friendly}
-- способен отображать [результаты прогона десятков тысяч тестов одновременно][html-reporter];
-- не тормозит при любых объемах;
-- предоставляет полную информацию о прогоне тестов: ретраи, мета-информация, скриншоты, логи и т. д.;
-- дифф в скриншотах [можно смотреть в 6 режимах][html-reporter-diff], включая _switch, swipe_ и _onion skin;_
-- доступна история выполненных команд в тесте;
-- в случае падения теста сохраняется сообщение об ошибке и её стектрейс;
-- [гибкие возможности просмотра, группировки и фильтрации тестов][html-reporter-gui].
+- can display [results of tens of thousands of tests simultaneously][html-reporter];
+- stays responsive regardless of volume;
+- provides complete information about the test run: retries, meta-information, screenshots, logs, etc.;
+- screenshot diff viewing in [6 modes][html-reporter-diff], including _switch, swipe_, and _onion skin_;
+- history of commands executed during the test is available;
+- if a test fails, the error message and stack trace are saved;
+- [flexible viewing, grouping, and filtering options][html-reporter-gui].
-### Интерактивный запуск тестов {#interactive}
+### Interactive Test Running {#interactive}
-- запуск тестов прямо из отчета в [режиме GUI][html-reporter-gui];
-- доступны все возможности отчета, перечисленные в разделе выше;
-- [возможность интеграции дополнительных элементов управления][html-reporter-plugins] для режима GUI из других плагинов;
-- обновление скриншотов в ускоренном режиме;
+- run tests directly from the report in [GUI mode][html-reporter-gui];
+- all reporting features listed above are available;
+- [ability to integrate additional controls][html-reporter-plugins] for GUI mode from other plugins;
+- accelerated screenshot updating;
-### Богатые возможности для отладки {#debuggable}
+### Rich Debugging Capabilities {#debuggable}
-- [DevTools в CDP-режиме][how-to-use-cdp];
-- [профайлинг Testplane][testplane-profiler];
-- [профайлинг плагинов][testplane-plugins-profiler].
+- [DevTools in CDP mode][how-to-use-cdp];
+- [Testplane profiling][testplane-profiler];
+- [plugin profiling][testplane-plugins-profiler].
-### Расширяемость {#extendable}
+### Extensibility {#extendable}
-- [легко добавить свои собственные команды][prepare-browser];
-- в наличии [десятки готовых плагинов][plugins];
-- можно написать свой плагин для реализации любой функциональности;
-- [свыше 20 событий, на которые можно подписаться][testplane-events];
-- доступны [точки расширения][html-reporter-extension-points] в отчете testplane;
-- можно [расширять CLI Testplane из своего плагина][testplane-cli], добавляя новые команды и опции.
+- [easily add your own commands][prepare-browser];
+- dozens of [ready-made plugins][plugins];
+- write your own plugin to implement any functionality;
+- [over 20 events you can subscribe to][testplane-events];
+- available [extension points][html-reporter-extension-points] in the Testplane report;
+- [extend the Testplane CLI from your plugin][testplane-cli], adding new commands and options.
[create-testplane]: https://github.com/gemini-testing/create-testplane
[webdriverio-api]: https://webdriver.io/docs/api
diff --git a/docs/migrations/how-to-upgrade-hermione-to-4.mdx b/docs/migrations/how-to-upgrade-hermione-to-4.mdx
index 013ccc2..d4f9357 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-4.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-4.mdx
@@ -3,38 +3,38 @@ import TabItem from "@theme/TabItem";
import Admonition from "@theme/Admonition";
-# Как обновить hermione до версии 4.x
+# How to Upgrade hermione to Version 4.x
- Данный рецепт актуален только для тех проектов, которые используют hermione младше 4-й версии.
+ This guide is relevant only for projects using hermione versions older than 4.x.
-## Почему стоит обновиться? {#why_to_upgrade}
+## Why Should You Upgrade? {#why_to_upgrade}
-Когда-то очень давно hermione перешла на «временный» форк пакета [webdriverio@4][webdriverio] _(сокр. wdio)_, который она использовала «под капотом», т. к. проблемы во _внешнем_ _wdio_ тормозили её разработку: постоянные баги в _wdio,_ разногласия относительно вносимых изменений и т. п. И если сначала форк регулярно обновлялся командой hermione, чтобы предоставить пользователю актуальную функциональность, то со временем форк значительно отстал от текущей версии _wdio_ во внешнем мире.
+A long time ago, hermione switched to a "temporary" fork of the [webdriverio@4][webdriverio] package (abbr. wdio) that it used "under the hood" because issues in the _external_ _wdio_ were slowing down its development: constant bugs in _wdio_, disagreements over changes, etc. Initially, the fork was regularly updated by the hermione team to provide users with up-to-date functionality, but over time, the fork significantly lagged behind the current version of _wdio_ globally.
-К тому времени во внешнем мире в _wdio_ уже появилось много различных фич, которые интересны разработчикам: [Chrome DevTools Protocol (CDP)][how-to-use-cdp], [стабы внешних запросов][how-to-intercept-requests-and-responses], расширенные возможности работы с мобильными устройствами и т. п. Поэтому у команды hermione не осталось выбора: нужно было отказываться от форка _webdriverio@4_ и переходить на самую актуальную версию _webdriverio@7_.
+By the time many new features appeared in _wdio_ that interested developers, such as [Chrome DevTools Protocol (CDP)][how-to-use-cdp], [mocking external requests][how-to-intercept-requests-and-responses], extended mobile device capabilities, etc., the hermione team had no choice but to abandon the _webdriverio@4_ fork and switch to the latest version of _webdriverio@7_.
- Сейчас уже доступна 8-я версия _webdriverio_ и _hermione@7_ уже использует её.
+ Version 8 of _webdriverio_ is already available, and _hermione@7_ uses it.
-Кроме этого, пользователям становилось всё неудобнее пользоваться устаревшими командами: тайпинги приходилось подключать из отдельного пакета (в новом _wdio_ они поставляются из коробки), за документацией по командам приходилось ходить на [старый сайт][webdriverio-v4-api], в то время как некоторые пользователи иногда заходили на [актуальную страницу][webdriverio-api] и не могли понять, почему команды из документации не работают в hermione.
+Additionally, users found it increasingly inconvenient to use outdated commands: typings had to be included from a separate package (in the new _wdio_, they are included out of the box), and documentation for commands had to be accessed on the [old site][webdriverio-v4-api], while some users occasionally visited the [current page][webdriverio-api] and couldn't understand why the commands from the documentation didn't work in hermione.
-Таким образом, причин для радикального апгрейда — сразу на 3 мажора вверх — накопилось достаточно.
+Thus, there were plenty of reasons for a radical upgrade — jumping up by three major versions.
-## Что изменилось? {#what_is_new}
+## What Has Changed? {#what_is_new}
-Изменений очень много, поэтому ниже будут перечислены только самые важные / интересные из них.
+There are many changes, so only the most important/interesting ones will be listed below.
-### API команд {#api_changes}
+### Command API {#api_changes}
-#### async/await вместо чейнинга {#feature_async_await}
+#### async/await Instead of Chaining {#feature_async_await}
-В новой версии теперь нельзя писать тесты, используя _chaining_. Доступен только _async/await_-синтаксис:
+In the new version, you can no longer write tests using _chaining_. Only _async/await_ syntax is available:
-
+
```javascript
it('some test', function() {
return this.browser
@@ -45,7 +45,7 @@ import Admonition from "@theme/Admonition";
```
-
+
```javascript
it('some test', async function() {
await this.browser.foo();
@@ -57,7 +57,7 @@ import Admonition from "@theme/Admonition";
-А начиная с версии [hermione@4.9.0](https://github.com/gemini-testing/hermione/blob/master/CHANGELOG.md#490-2022-05-24) можно писать тесты ещё короче, так как hermione теперь передает в функцию объект с полем `browser`:
+Starting from version [hermione@4.9.0](https://github.com/gemini-testing/hermione/blob/master/CHANGELOG.md#490-2022-05-24), you can write tests even shorter, as hermione now passes an object with a `browser` field to the function:
```javascript
it("some test", async function ({ browser }) {
@@ -68,18 +68,18 @@ it("some test", async function ({ browser }) {
```
- Далее в примерах «Стало» мы будем везде предполагать, что речь идет о hermione с версией не
- меньше, чем _4.9.0_. Если по какой-то причине вы планируете использовать версию hermione _4+_
- младше _4.9.0_, то к браузеру в тестах нужно обращаться как и раньше — через _this_, например:
- _await this.browser.getText('.selector')_.
+ In the "New" examples going forward, it is assumed that the hermione version is at least
+ _4.9.0_. If you plan to use hermione _4+_ but at a lower version than _4.9.0_, you should still
+ access the browser in tests through _this_, for example: _await
+ this.browser.getText('.selector')_.
-#### Результат вместо объекта с ключом value {#feature_direct_result}
+#### Direct Result Instead of Object with value Key {#feature_direct_result}
-Теперь при получении результатов команд вместо объекта с ключом `value` возвращается реальный результат (старое поведение часто приводило к ошибкам в тестах):
+Now, instead of returning an object with a `value` key, the actual result is directly returned from command results (old behavior often led to errors in tests):
-
+
```javascript
it('some test', async function() {
const { value } = await this.browser.getText('.selector');
@@ -88,7 +88,7 @@ it("some test", async function ({ browser }) {
```
-
+
```javascript
it('some test', async function({ browser }) {
const text = await browser.getText('.selector');
@@ -99,12 +99,12 @@ it("some test", async function ({ browser }) {
-#### Работа с элементами напрямую {#feature_commands_of_elements}
+#### Direct Work with Elements {#feature_commands_of_elements}
-С помощью команды [`browser.$`][browser-dollar] можно получить инстанс найденного элемента и работать с ним в тесте. Это удобно, когда с элементом нужно взаимодействовать больше одного раза (при этом элемент не будет повторно искаться на странице):
+Using the [`browser.$`][browser-dollar] command, you can get an instance of the found element and work with it in the test. This is convenient when you need to interact with an element more than once (the element won't be searched again on the page):
-
+
```javascript
it('some test', async function() {
await this.browser.clearElement('.input');
@@ -113,7 +113,7 @@ it("some test", async function ({ browser }) {
```
-
+
```javascript
it('some test', async function({ browser }) {
const elem = await browser.$('.input');
@@ -128,18 +128,18 @@ it("some test", async function ({ browser }) {
-Смотрите также команды:
+Also see the commands:
* [`browser.$$`][browser-dollar-dollar]
* [`element.$`][element-dollar]
* [`element.$$`][element-dollar-dollar]
-#### Передача аргументов через объект {#feature_passing_args_as_object}
+#### Passing Arguments Through an Object {#feature_passing_args_as_object}
-Для многих команд аргументы теперь передаются с помощью объекта с понятными ключами вместо последовательной передачи аргументов, в которых было очень легко запутаться. Например, в команде [waitForExist][element-wait-for-exist], в которой в качестве аргументов раньше передавались даже булевые значения:
+For many commands, arguments are now passed using an object with understandable keys instead of sequentially passing arguments, which could be very confusing. For example, in the [waitForExist][element-wait-for-exist] command, which previously accepted even boolean values as arguments:
-
+
```javascript
it('some test', async function() {
await this.browser.waitForExist('.selector', 1000, true);
@@ -148,7 +148,7 @@ it('some test', async function() {
-
+
```javascript
it('some test', async function({ browser }) {
const elem = await browser.$('.selector');
@@ -167,25 +167,25 @@ it('some test', async function() {
-#### Специальная команда для React {#feature_commands_for_react}
+#### Special Command for React {#feature_commands_for_react}
-Бонус для тех, кто уже перешел на React — теперь в тестах можно использовать команды [`browser.react$`][browser-react-dollar] и [`browser.react$$`][browser-react-dollar-dollar] для поиска на странице конкретных react-компонентов с определенными состояниями. Аналогичные команды есть и для элементов — [`element.react$`][element-react-dollar] и [`element.react$$`][element-react-dollar-dollar].
+A bonus for those who are already using React — now you can use the [`browser.react$`][browser-react-dollar] and [`browser.react$$`][browser-react-dollar-dollar] commands to find specific react components on the page with certain states. Similar commands are available for elements as well — [`element.react$`][element-react-dollar] and [`element.react$$`][element-react-dollar-dollar].
-Также читайте [статью о вариантах работы с react-компонентами][react-selectors] на сайте _webdriverio_.
+Also read [the article on working with react components][react-selectors] on the _webdriverio_ website.
-Пример использования:
+Example usage:
-
+
```javascript
it('some test', async function() {
- // специальных команд для работы с react-компонентами – нет :(
+ // no special commands for working with react components :(
});
````
-
+
```javascript
it('some test', async function({ browser }) {
const component = await browser.react$('MyComponent', {
@@ -202,19 +202,19 @@ it('some test', async function() {
-### Актуальная документация {#feature_actual_docs}
+### Up-to-Date Documentation {#feature_actual_docs}
-Пока hermione использовала старую версию _webdriverio@4_, приходилось все время уточнять, что документация на все команды лежит по отдельному адресу: [v4.webdriver.io/api.html][webdriverio-v4-api]. Теперь же описания всех команд _webdriverio_, которые используются hermione, можно найти по стандартному адресу: [webdriver.io/docs/api][webdriverio-api].
+While hermione used the old version of _webdriverio@4_, users constantly had to be reminded that the documentation for all commands was located at a separate address: [v4.webdriver.io/api.html][webdriverio-v4-api]. Now, descriptions of all _webdriverio_ commands used by hermione can be found at the standard address: [webdriver.io/docs/api][webdriverio-api].
-Помимо этого, мы [перевели описания всех команд на русский язык][hermione-commands] и адаптировали все примеры использования этих команд под hermione, так как в _webdriverio_ свой раннер и примеры в его документации неприменимы напрямую в hermione.
+In addition, we [translated the descriptions of all commands into Russian][hermione-commands] and adapted all usage examples to hermione, since _webdriverio_ uses its own runner and the examples in its documentation cannot be directly applied in hermione.
-### Тесты выполняются быстрее {#feature_running_tests_faster}
+### Tests Run Faster {#feature_running_tests_faster}
-При локальных прогонах нескольких тестов вы, скорее всего, этого ускорения не заметите, но на большом количестве тестов это будет весьма ощутимо. Новые команды работают быстрее примерно на 15% (при условии, что вы отказались от использования старых команд).
+You might not notice this speedup when running several tests locally, but it will be very noticeable with a large number of tests. The new commands work about 15% faster (assuming you have stopped using the old commands).
-### Простой запуск тестов на локальном браузере {#feature_running_tests_in_local_browser}
+### Easy Local Browser Testing {#feature_running_tests_in_local_browser}
-Раньше для того, чтобы запустить тесты локально на своем браузере, нужно было запустить `selenium-standalone` и указать hermione магический `gridUrl`, чтобы все заработало. Сейчас же — достаточно в конфиге указать браузеру опцию `automationProtocol` со значением `devtools`:
+Previously, to run tests locally in your browser, you had to start `selenium-standalone` and specify a magical `gridUrl` to make things work in hermione. Now, it's much simpler: in the config, just specify the `automationProtocol` option with the value `devtools`:
```javascript
// hermione.conf.js
@@ -228,35 +228,35 @@ module.exports = {
}
},
- // другие настройки hermione...
+ // other hermione settings...
};
````
-Также мы планируем добавить отдельную кнопку в hermione GUI для перехода в CDP-режим, чтобы было еще проще.
+We also plan to add a separate button in the hermione GUI for switching to CDP mode to make it even easier.
- * На данный момент это полноценно поддержано только в браузере _Chrome_. * Переснимать скриншоты
- в таком режиме можно только для дебага, т. к. в конвейере браузеры запускаются под _Linux_,
- соответственно: рендеринг страницы будет отличаться и в пулл-реквесте тесты упадут с диффом.
+ * Currently, this is fully supported only in the _Chrome_ browser. * Retaking screenshots in
+ this mode should only be done for debugging, as browsers in the pipeline run under _Linux_,
+ which means page rendering will differ and tests in the pull request will fail with diffs.
-### API для стаба походов по сети {#feature_api_to_mock_network}
+### API for Network Request Stubbing {#feature_api_to_mock_network}
-В новой версии доступна возможность застабать ответы вашего сервиса или переопределить их. Делается это с помощью команды [mock.respond()][mock]. Также можно запрещать походы по урлам внешних сервисов.
+The new version provides the ability to stub or override the responses of your service. This is done using the [mock.respond()][mock] command. You can also block URLs of external services.
-Более подробно о всех возможностях читайте в рецепте «[Как отслеживать и перехватывать сетевые запросы и ответы][how-to-intercept-requests-and-responses]».
+Read more about all the features in the "How to Track and Intercept Network Requests and Responses" guide.
- На данный момент эта функциональность работает только в режиме _Chrome DevTools Protocol (CDP)_,
- который работает только в _Chrome_ и _Firefox Nightly_.
+ Currently, this functionality only works in _Chrome DevTools Protocol (CDP)_ mode, which only
+ works in _Chrome_ and _Firefox Nightly_.
-### Конфигурация браузеров в конфиге {#browsers_config}
+### Browser Configuration in the Config {#browsers_config}
-Для браузеров, поддерживающих работу W3C-протокола, вместо поля `version` нужно указывать `browserVersion`. А для дополнительных опций нужно добавлять префикс браузера:
+For browsers that support the W3C protocol, instead of the `version` field, you need to specify `browserVersion`. And additional options need to be prefixed with the browser's name:
-
+
```javascript
module.exports = {
browsers: {
@@ -274,7 +274,7 @@ module.exports = {
```
-
+
```javascript
module.exports = {
browsers: {
@@ -282,7 +282,7 @@ module.exports = {
desiredCapabilities: {
browserName: 'chrome',
browserVersion: '75',
- 'goog:chromeOptions': { // для браузера Chrome нужен префикс 'goog'
+ 'goog:chromeOptions': { // for Chrome browser, prefix with 'goog'
// ...
}
}
@@ -294,37 +294,37 @@ module.exports = {
-Подробнее про вендорные префиксы читайте по [ссылке](https://w3c.github.io/webdriver/#protocol-extensions).
+Read more about vendor prefixes at [this link](https://w3c.github.io/webdriver/#protocol-extensions).
-Список всех доступных настроек можно посмотреть в [спецификации](https://w3c.github.io/webdriver/#capabilities).
+The list of all available settings can be found in the [specification](https://w3c.github.io/webdriver/#capabilities).
-## Как переехать? {#how_to_move}
+## How to Migrate? {#how_to_move}
-Мы обновились сразу на 3 мажора _webdriverio_, поэтому просто обновить версию hermione в `package.json` не получится. Основные проблемы при переезде — это отсутствующий _chaining_ в тестах и устаревшие команды тестов. Чтобы вам было проще разобраться с обеими проблемами, мы написали для вас следующую инструкцию.
+We upgraded _webdriverio_ by three major versions at once, so simply updating the hermione version in `package.json` won't suffice. The main issues during migration are the absent _chaining_ in tests and outdated test commands. To help you with these issues, we wrote the following guide.
-### 1. Обновите hermione до 4+, установите плагин мигратора и кодмод {#update_hermione_and_install_plugin_and_codmode}
+### 1. Update hermione to 4+, Install Migrator Plugin and Codemod {#update_hermione_and_install_plugin_and_codmode}
-А именно:
+Specifically:
-- обновите версию hermione до hermione@4;
-- установите плагин [hermione-wdio-migrator][hermione-wdio-migrator] для плавной миграции команд;
-- установите пакет [hermione-codemod][hermione-codemod] для конвертации существующих тестов в новый синтаксис;
+- Update hermione to hermione@4.
+- Install the [hermione-wdio-migrator][hermione-wdio-migrator] plugin for smooth command migration.
+- Install the [hermione-codemod][hermione-codemod] package to convert existing tests to the new syntax.
-Всё это вы можете сделать одной командой:
+You can do all this with one command:
```shell
npm install -D hermione@4 hermione-wdio-migrator hermione-codemod --save-exact
```
-Версии всех плагинов hermione (например, [html-reporter][html-reporter]) также необходимо обновить до последних версий, т. к. часть из них может работать неправильно с новой версией hermione.
+The versions of all hermione plugins (e.g., [html-reporter][html-reporter]) also need to be updated to the latest versions, as some may not work correctly with the new hermione version.
-### 2. Запустите кодмод на async/await {#change_to_async_await_by_codmode}
+### 2. Run the Codemod for async/await {#change_to_async_await_by_codmode}
-Кодмод перегенерит ваши тесты с _chaining_-формата в формат _async/await:_
+The codemod will regenerate your tests from _chaining_ format to _async/await_ format:
-Если вы используете командный процессор _zsh_, то файлы тестов можно передавать не только в виде относительных путей, но и в виде глобов, например: _somefolder/**/*.js_ и т. п.
+If you use the _zsh_ shell, you can pass test files as relative paths and as glob patterns, such as _somefolder/**/*.js_, and so on.
```shell
npx jscodeshift -t node_modules/hermione-codemod/transforms/browser-chaining-to-async-await.js path_to_file_mask
@@ -333,7 +333,7 @@ npm install -D hermione@4 hermione-wdio-migrator hermione-codemod --save-exact
-Если вы используете командный процессор _bash_, то задавать пути в виде глобов как в _zsh_ не получится, поэтому команда будет сложнее, если вам нужно обработать группу файлов. Например:
+If you use the _bash_ shell, globs won't work as easily as in _zsh_, so the command will be more complex if you need to process a group of files. For example:
```shell
npx jscodeshift -t node_modules/hermione-codemod/transforms/browser-chaining-to-async-await.js $(find ./somefolder -type f -iname '*.js' | xargs echo)
@@ -343,7 +343,7 @@ npm install -D hermione@4 hermione-wdio-migrator hermione-codemod --save-exact
-При успешном завершении вы увидите соответствующее сообщение:
+Upon successful completion, you will see a corresponding message:
```shell
Results:
@@ -353,7 +353,7 @@ Results:
251 ok
```
-Но бывают и кейсы, с которыми текущий кодмод не может справиться. Для таких тестов будет выведена ошибка с информацией о проблемном файле:
+However, there can be cases the current codemod cannot handle. For such tests, an error with information about the problematic file will be displayed:
```shell
WARN: can't correctly transform ConditionalExpression, fix it manually
@@ -361,55 +361,55 @@ WARN: can't correctly transform ConditionalExpression, fix it manually
position: {"start":112,"end":116}
```
-Такие тесты придется править руками. Мы старались учесть большинство тестов, поэтому таких случаев должно быть не очень много.
+Such tests will need to be fixed manually. We tried to account for most test cases, so there shouldn't be too many of these instances.
-После этого вы **уже** можете вливать свои изменения (это не обязательно), чтобы выполнять переезд по частям. Дело в том, что в _wdio@4_ синтаксис _async/await_ тоже будет работать. Т. е. вы всегда могли писать тесты таким образом (а некоторые сервисы уже давно так и делали).
+After this, you can **already** merge your changes (this is optional) to perform the migration in parts. The _async/await_ syntax will still work in _wdio@4_. Many services have been writing tests this way for a long time.
-### 3. Запустите кодмод на удаление value {#remove_value_by_codmode}
+### 3. Run the Codemod to Remove value {#remove_value_by_codmode}
-Так как теперь при получении результатов команд вместо объекта с ключом `value` возвращается реальный результат, нужно изменить во всех тестах сохранение результата. Следующий кодмод предназначен именно для этого случая.
+Since command results now directly return the actual result instead of an object with a `value` key, you need to change result handling in all tests. This codemod is intended for such cases.
-Команда очень похожа на предыдущую, меняется только путь к файлу реализации очередного кодмода:
+The command is very similar to the previous one, only the path to the next codemod file changes:
```shell
npx jscodeshift -t node_modules/hermione-codemod/transforms/remove-browser-prop.js path_to_file_mask
```
-При наличии ворнингов проблемные тесты нужно будет исправить вручную. Например, если в рамках одного теста есть многократное использование `value` через деструктуризацию, то кодмод с таким не справится и в коде теста получится несколько переменных с одним именем. Например:
+For any warnings, problematic tests need to be fixed manually. For example, if a test uses `value` multiple times through destructuring, the codemod will not handle it properly and generic variable names might be generated. For example:
```javascript
-// тест на wdio@4:
+// test on wdio@4:
it('test', function(){
return this.browser
...
.getText('.button')
.then((value) => {
- assert.equal(value, 'Кнопка', 'Нам нужна кнопка');
+ assert.equal(value, 'Button', 'We need a button');
})
...
.getValue('.input')
.then((value) => {
- assert.equal(value, 'Привет', 'С нами не поздоровались');
+ assert.equal(value, 'Hello', 'We were not greeted');
});
});
-// перегенерится для wdio@7 в такой формат:
+// auto-generated for wdio@7 in this format:
it('test', async function() {
const value = await this.browser.getText('.button');
- assert.equal(value, 'Кнопка', 'Нам нужна кнопка');
+ assert.equal(value, 'Button', 'We need a button');
...
- // здесь будет ошибка из-за повторного использования названия переменной,
- // поэтому кодмод выдаст ворнинг о проблемном месте
+ // there will be an error due to reuse of the variable name,
+ // so the codemod will issue a warning about the problematic spot
const value = await this.browser.getValue('.input');
- assert.equal(value, 'Привет', 'С нами не поздоровались');
+ assert.equal(value, 'Hello', 'We were not greeted');
});
```
-Если при запуске кодмодов в вашем проекте оказалось слишком много тестов, которые не поддаются автоматической миграции, то обратитесь, пожалуйста, в [github issues][gh-issues] за помощью. Мы проанализируем эти ошибки и поможем с переездом.
+If your project has too many tests that cannot be automatically migrated, please reach out to [github issues][gh-issues] for help. We will analyze these errors and assist with the migration.
-### 4. Добавьте hermione-wdio-migrator в конфиг hermione {#add_migrator}
+### 4. Add hermione-wdio-migrator to the hermione Config {#add_migrator}
-Этот плагин «под капотом» просто добавляет реализацию старых команд с помощью нового API, чтобы в момент переезда вам не пришлось актуализировать тесты самостоятельно. В дальнейшем, конечно, нужно будет в своих тестах заменить эти устаревшие команды на новые:
+This plugin "under the hood" simply adds the implementation of old commands using the new API, so during migration, you don't have to update tests yourself. Eventually, you should replace these deprecated commands with new ones in your tests:
```javascript
module.exports = {
@@ -418,41 +418,40 @@ module.exports = {
enabled: true,
},
- // остальные плагины hermione...
+ // other hermione plugins...
},
- // другие настройки hermione...
+ // other hermione settings...
};
```
-### 5. Удалите кодмод {#remove_codemod}
+### 5. Remove the Codemod {#remove_codemod}
-Пакет [hermione-codemod][hermione-codemod] нужно деинсталлировать, т. к. в дальнейшем он не понадобится.
+Uninstall the [hermione-codemod][hermione-codemod] package as you won't need it anymore.
```shell
npm uninstall hermione-codemod
```
-### 6. Запустите линтеры {#run_linters}
+### 6. Run Linters {#run_linters}
-Нужно запустить линтеры на измененные тесты, т. к. кодмод мог нарушить правила написания кода в вашем проекте.
+Run linters on the modified tests, as the codemod might have violated your project's coding standards.
-### 7. Запустите тесты {#run_tests}
+### 7. Run the Tests {#run_tests}
-На последнем шаге нужно убедиться, что все тесты успешно проходят, например, создав пулл-реквест и проверив, что все тесты успешно выполнились в CI.
+Finally, ensure that all tests pass successfully by creating a pull request and verifying that all tests run successfully in CI.
-## Заключение {#conclusion}
+## Conclusion {#conclusion}
-Обновление _webdriverio_ принесло много полезных вещей. Некоторыми можно пользоваться уже сейчас, некоторые в более удобном виде появятся чуть позже. Поэтому, мы крайне настоятельно рекомендуем переезжать на новую версию, чтобы написание тестов стало более удобным, быстрым и приятным.
+Updating _webdriverio_ brings many useful features that can be used right away, while some will appear in a more convenient form later. Therefore, we highly recommend upgrading to the new version to make writing tests more convenient, faster, and enjoyable.
- Старая версия hermione находится в режиме ограниченной поддержки и новые фичи в ней появляться
- не будут.
+ The old hermione version is in limited support mode, and new features will not appear in it.
-## Поддержка {#support}
+## Support {#support}
-Если при переезде на новую версию вы столкнетесь с проблемами, или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter issues during the upgrade or have any questions, come to [github issues][gh-issues] — we will definitely help you!
[how-to-use-cdp]: ../../guides/how-to-use-cdp
[how-to-intercept-requests-and-responses]: ../../guides/how-to-intercept-requests-and-responses
diff --git a/docs/migrations/how-to-upgrade-hermione-to-5.mdx b/docs/migrations/how-to-upgrade-hermione-to-5.mdx
index 72f44e5..cfae071 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-5.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-5.mdx
@@ -1,61 +1,61 @@
import Admonition from "@theme/Admonition";
-# Как обновить hermione до версии 5.x
+# How to Upgrade hermione to Version 5.x
-Если в вашем проекте hermione младше 4-й версии, то прочтите «[Как обновить hermione до версии 4.x][how-to-upgrade-hermione-to-4]», прежде чем обновлять hermione до 5-й версии.
+If your project uses hermione version earlier than 4.x, please read “How to Upgrade hermione to Version 4.x” before upgrading to version 5.x.
-Мы рекомендуем вам обновлять hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
+We recommend upgrading hermione in stages, ensuring at each stage that all project tests run correctly.
-## Что изменилось? {#what_is_new}
+## What Has Changed? {#what_is_new}
-### Новые дефолты в конфиге {#changes_in_config_options}
+### New Default Configurations {#changes_in_config_options}
-Первое, на что стоит обратить внимание при переезде, — это изменение дефолтных значений некоторых опций в конфиге. Все изменения направлены на то, чтобы при базовой настройке hermione тесты проходили быстрее, а после прогона оставалось больше информации о тестах.
+The first thing to note during the upgrade is the change in default values for some configuration options. All changes aim to speed up test execution with basic hermione setup and provide more information about tests after execution.
-**Параметр** **Было** **Стало** **Описание**
+**Parameter** **Old** **New** **Description**
-[antialiasingTolerance][antialiasing-tolerance] 0 4 Задает чувствительность определения антиалиасинга, который будет игнорироваться при сравнении скриншотов.
-[compositeImage][composite-image] false true Позволяет тестировать элементы, не влезающие во вьюпорт по высоте.
-[saveHistory][save-history] false true Сохранять историю всех выполненных команд.
-[takeScreenshotOnFails.assertViewFail][take-screenshot-on-fails-assert-view-fail] false true Определяет снимать ли скриншот страницы браузера _(Page Screenshot)_ при падении теста, а также при падении команды _assertView_.
-[takeScreenshotOnFailsMode][take-screenshot-on-fails-mode] "viewport" "fullpage" Режим снятия скриншота при падении теста. Доступные значения: _viewport_ и _fullpage_.
-[takeScreenshotOnFailsTimeout][take-screenshot-on-fails-timeout] 90000 5000 Таймаут для снятия скриншота страницы браузера _(Page Screenshot)_ при падении теста, в мс.
-[httpTimeout][http-timeout] 90000 30000 Таймаут для любых запросов к Selenium-серверу, в мс.
-[pageLoadTimeout][page-load-timeout] 300000 20000 Таймаут для полной загрузки страницы, в мс.
-[sessionQuitTimeout][session-quit-timeout] 90000 5000 Таймаут для завершения сессии, в мс.
+[antialiasingTolerance][antialiasing-tolerance] 0 4 Sets the sensitivity for detecting antialiasing, which will be ignored when comparing screenshots.
+[compositeImage][composite-image] false true Allows testing elements that do not fit into the viewport height.
+[saveHistory][save-history] false true Save the history of all executed commands.
+[takeScreenshotOnFails.assertViewFail][take-screenshot-on-fails-assert-view-fail] false true Determines whether to take a page screenshot on test failure, including on _assertView_ command failure.
+[takeScreenshotOnFailsMode][take-screenshot-on-fails-mode] "viewport" "fullpage" Screenshot mode on test failure. Available values: _viewport_ and _fullpage_.
+[takeScreenshotOnFailsTimeout][take-screenshot-on-fails-timeout] 90000 5000 Timeout for taking a page screenshot on test failure, in ms.
+[httpTimeout][http-timeout] 90000 30000 Timeout for any requests to the Selenium server, in ms.
+[pageLoadTimeout][page-load-timeout] 300000 20000 Timeout for full page loading, in ms.
+[sessionQuitTimeout][session-quit-timeout] 90000 5000 Timeout for session termination, in ms.
-Кроме этого, удалены опции `screenshotOnReject` и `screenshotOnRejectTimeout`, которые ранее были объявлены как устаревшие _(deprecated)_.
+Additionally, the `screenshotOnReject` and `screenshotOnRejectTimeout` options, previously marked as deprecated, have been removed.
-Подробнее про все эти опции можно почитать [здесь][config-browsers]. Если новые значения вас устраивают и нет явных причин их переопределять, то этот пункт при миграции можно пропустить.
+You can read more about these options [here][config-browsers]. If the new values suit you and there are no apparent reasons to override them, you can skip this section during the migration.
-### Отчеты в CLI {#changes_in_reporters}
+### CLI Reporters {#changes_in_reporters}
-В данном разделе речь идет не про html-отчет, а про CLI-репортеры, которые поставляются из коробки.
+This section discusses CLI reporters that come out of the box and not the html-reporter.
-- Удален teamcity-репортер, т. к. в самой hermione он смотрелся чужеродно. Если вы всё же используете такой отчет, то можно использовать плагин [hermione-teamcity-reporter][hermione-teamcity-reporter].
-- Опция `-r`, с помощью которой раньше можно было указать тип репортера, теперь этим не занимается. Чаще всего такое сокращение имени используется для опции `--require`. Многие путались в этом месте и мы решили это поправить. Сам репортер вы всё еще можете указать при помощи опции `--reporter`.
-- Если вы захотите добавить свой репортер, то в его реализации обязательно должен быть метод `create` для инициализации.
+- The teamcity reporter has been removed, as it seemed out of place within hermione. If you still use such a report, you can use the [hermione-teamcity-reporter][hermione-teamcity-reporter] plugin.
+- The `-r` option, which previously allowed specifying the reporter type, no longer does this. It is more often used for the `--require` option. Many users found this confusing, so we decided to fix it. You can still specify the reporter using the `--reporter` option.
+- If you want to add your own reporter, it must have a `create` method for initialization.
-Итого, если вы не использовали teamcity-репортер или не писали свои новые, то этот пункт при миграции можно пропустить.
+So, if you did not use the teamcity reporter or did not write new reporters, you can skip this section during migration.
### testParserAPI {#changes_in_test_parser_api}
-Теперь объект [testParser][test-parser], который можно было получить, подписавшись на событие [BEFORE_FILE_READ][before-file-read], не является инстансом `EventEmitter`. Это значит, что теперь нельзя с помощью него подписаться на события [SUITE_BEGIN][event-suite-begin] и [TEST_BEGIN][event-test-begin].
+The [testParser][test-parser] object, which could be obtained by subscribing to the [BEFORE_FILE_READ][before-file-read] event, is no longer an instance of `EventEmitter`. This means that you can no longer use it to subscribe to the [SUITE_BEGIN][event-suite-begin] and [TEST_BEGIN][event-test-begin] events.
-Справедливости ради, оно изначально работало неправильно и никто это не использовал. Поэтому, эта возможность была удалена. Про все доступные события можно почитать [здесь][hermione-events].
+To be fair, this initially did not work correctly, and no one used it. Therefore, this functionality was removed. You can read about all available events [here][hermione-events].
-## Поддержка {#support}
+## Support {#support}
-Если при переезде на новую версию вы столкнетесь с проблемами, или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter any issues during the migration to the new version or have any questions, visit [github issues][gh-issues] — we will definitely help you!
[how-to-upgrade-hermione-to-4]: ../../migrations/how-to-upgrade-hermione-to-4
[config-browsers]: ../../config/browsers
@@ -74,4 +74,4 @@ import Admonition from "@theme/Admonition";
[page-load-timeout]: ../../config/browsers#page_load_timeout
[session-quit-timeout]: ../../config/browsers#session_quit_timeout
[save-history]: ../../config/browsers#save_history
-[gh-issues]: https://github.com/gemini-testing/testplane/issues/
+[gh-issues]: https://github.com/gemini-testing/testplane/issues
diff --git a/docs/migrations/how-to-upgrade-hermione-to-6.mdx b/docs/migrations/how-to-upgrade-hermione-to-6.mdx
index f2a95b8..d5a86a7 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-6.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-6.mdx
@@ -1,27 +1,27 @@
import Admonition from "@theme/Admonition";
-# Как обновить hermione до версии 6.x
+# How to Upgrade hermione to Version 6.x
-Если в вашем проекте hermione младше 4-й версии, то прочтите сначала «[Как обновить hermione до версии 4.x][how-to-upgrade-hermione-to-4]» и «[Как обновить hermione до версии 5.x][how-to-upgrade-hermione-to-5]».
+If your project is using a hermione version earlier than 4.x, please first read "How to Upgrade hermione to Version 4.x" and "How to Upgrade hermione to Version 5.x".
-Мы рекомендуем вам обновлять hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
+We recommend upgrading hermione in stages, ensuring each step that all project tests run correctly.
-## Что изменилось? {#what_is_new}
+## What Has Changed? {#what_is_new}
-### Отказ от поддержки Node.JS < 14.x {#dropped_nodejs_less_than_14x}
+### Dropped Support for Node.JS < 14.x {#dropped_nodejs_less_than_14x}
-В этом мажоре hermione перестала поддерживать версии _Node.JS < 14.x_.
+In this major version, hermione no longer supports versions _Node.JS < 14.x_.
-Если у вас в проекте версия _Node.JS_ уже _14.x_ или выше и этот пункт для вас не актуален, то [для получения свежих фич][hermione-new-features] мы всё же рекомендуем вам обновить hermione до 6-й версии.
+If your project is already using _Node.JS_ version _14.x_ or higher and this does not apply to you, we still recommend upgrading hermione to version 6 to get [the latest features][hermione-new-features].
### browserWSEndpoint {#added_browser_ws_endpoint_setting}
-Теперь в настройках браузера появилась опция [browserWSEndpoint][browser-ws-endpoint], с помощью которой можно переопределить ссылку для доступа к браузерам через [Chrome DevTools Protocol (CDP)][how-to-use-cdp].
+There is now a [browserWSEndpoint][browser-ws-endpoint] option in the browser settings, which allows you to override the link for accessing browsers via the [Chrome DevTools Protocol (CDP)][how-to-use-cdp].
-Пример настройки:
+Example configuration:
```javascript
//.hermione.conf.js
@@ -31,18 +31,18 @@ module.exports = {
gridUrl: `https://${gridHost}/:4444/wd/hub`,
browserWSEndpoint: `ws:${gridHost}/wd/hub`,
- // другие настройки hermione...
+ // other hermione settings...
};
```
- Данная настройка не будет работать, если у вас в проекте слишком старая версия браузера.
- Гарантированно будет работать в Хроме, начиная с версии 101.
+ This setting will not work if your project is using a very old browser version. It is guaranteed
+ to work in Chrome, starting from version 101.
-## Поддержка {#support}
+## Support {#support}
-Если при переезде на новую версию вы столкнетесь с проблемами, или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter issues during the migration to the new version or have any questions, visit [github issues][gh-issues] — we will definitely help you!
[how-to-upgrade-hermione-to-4]: ../../migrations/how-to-upgrade-hermione-to-4
[how-to-upgrade-hermione-to-5]: ../../migrations/how-to-upgrade-hermione-to-5
diff --git a/docs/migrations/how-to-upgrade-hermione-to-7.mdx b/docs/migrations/how-to-upgrade-hermione-to-7.mdx
index e85474c..16d3046 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-7.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-7.mdx
@@ -1,27 +1,27 @@
import Admonition from "@theme/Admonition";
-# Как обновить hermione до версии 7.x
+# How to Upgrade hermione to Version 7.x
-Если в вашем проекте hermione младше 4-й версии, то прочтите сначала «[Как обновить hermione до версии 4.x][how-to-upgrade-hermione-to-4]», «[Как обновить hermione до версии 5.x][how-to-upgrade-hermione-to-5]» и «[Как обновить hermione до версии 6.x][how-to-upgrade-hermione-to-6]».
+If your project is using a hermione version earlier than 4.x, first read "How to Upgrade hermione to Version 4.x," "How to Upgrade hermione to Version 5.x," and "How to Upgrade hermione to Version 6.x."
-Мы рекомендуем вам обновлять hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
+We recommend upgrading hermione in stages, ensuring each step that all project tests run correctly.
-## Что изменилось? {#what_is_new}
+## What Has Changed? {#what_is_new}
-### Мажорные изменения {#major_changes}
+### Major Changes {#major_changes}
-#### Отказ от поддержки Node.JS < 16.x {#dropped_nodejs_less_than_16x}
+#### Dropped Support for Node.JS < 16.x {#dropped_nodejs_less_than_16x}
-В этом мажоре hermione перестала поддерживать версии _Node.JS < 16.x_.
+In this major version, hermione no longer supports versions _Node.JS < 16.x_.
-#### Обработка unhandled rejection {#handle_unhandled_rejection}
+#### Handling Unhandled Rejections {#handle_unhandled_rejection}
-При возникновении ошибки `Unhandled rejection` в мастере или воркерах hermione теперь выполняем _graceful shutdown_. Это означает, что все последующие тесты в очереди завершаются с ошибкой `Browser request was cancelled` и сама hermione завершается с `exit code 1`.
+When an `Unhandled rejection` error occurs in the master or workers, hermione now performs a graceful shutdown. This means all subsequent tests in the queue will end with the error `Browser request was cancelled`, and hermione itself will terminate with `exit code 1`.
-Данное изменение необходимо, чтобы защитить пользователей от написания некорректных тестов. Пример теста с ошибкой:
+This change is necessary to protect users from writing incorrect tests. Example of a test with an error:
```typescript
it("test", async ({ browser }) => {
@@ -30,7 +30,7 @@ it("test", async ({ browser }) => {
});
```
-Внимательный читатель заметит, что я забыл указать `await` перед вызовом `expect`. В этом случае тест сразу после перехода по урлу завершится успешно. И только потом вылетит ошибка с `Unhandled rejection`, которую hermione@6 проглатывает. А hermione@7 перехватит и экстренно завершит запуск тестов. К сожалению, определить из какого теста вылетела ошибка `Unhandled rejection` невозможно. Так как тест может быть написан, например, так:
+A keen observer will notice that I forgot to add `await` before calling `expect`. In this case, the test will immediately pass after navigating to the URL. Only then will an `Unhandled rejection` error appear, which hermione@6 would swallow. But hermione@7 will catch and immediately terminate the test run. Unfortunately, it is impossible to determine from which test the `Unhandled rejection` error originated. For example, a test could be written like this:
```typescript
it("test2", async () => {
@@ -42,9 +42,9 @@ it("test2", async () => {
});
```
-Т.е. данный тест сразу же выполнится успешно и только через 30 секунд (с учетом того, что в очереди еще есть тесты на запуск) вылетит `Unhandled rejection`.
+This test will immediately pass, and only after 30 seconds (assuming there are still tests in the queue to run) will an `Unhandled rejection` error appear.
-Соответственно, для поиска проблемного теста нужно будет посмотреть в лог выполнения и найти последние выполнившиеся тесты перед информацией об ошибке. Ошибка будет выглядеть примерно так:
+Therefore, to find the problematic test, you will need to look at the execution log and find the last completed tests before the error information. The error will look something like this:
```bash
[13:48:57 GMT+3] Unhandled Rejection in hermione:worker:10830:
@@ -55,35 +55,35 @@ Promise: {}
Reason: Something goes wrong
```
-#### test.id и suite.id теперь свойства {#test_id_and_suite_id_are_properties}
+#### test.id and suite.id Are Now Properties {#test_id_and_suite_id_are_properties}
-`id` для теста и сьюта теперь является свойством, а не методом, и, соответственно, необходимо его использовать как `test.id` или `suite.id`. Вызов `test.id` обычно используется в конфиге hermione для определения опции [screenshotsDir][screenshots-dir].
+The `id` for a test and suite is now a property, not a method, and should be used as `test.id` or `suite.id`. The `test.id` call is usually used in the hermione config to define the [screenshotsDir][screenshots-dir] option.
-#### Удалена опция saveHistory из конфига {#removed_save_history_option_from_config}
+#### Removed the saveHistory Option from the Config {#removed_save_history_option_from_config}
-Удалена опция [saveHistory][save_history] из конфига. Теперь необходимо использовать [saveHistoryMode][save_history_mode] с доступными значениями: `all`, `none`, `onlyFailed`. По умолчанию используется `all`, т.е. история сохраняется для всех тестов. Соответственно, можно данную опцию не выставлять явно.
+The [saveHistory][save_history] option has been removed from the config. You now need to use [saveHistoryMode][save_history_mode] with available values: `all`, `none`, `onlyFailed`. The default is `all`, meaning history is saved for all tests. So, you can skip explicitly setting this option.
-### Минорные изменения {#minor_changes}
+### Minor Changes {#minor_changes}
-- переехали с [webdriverio@7][webdriverio@7] на [webdriverio@8][webdriverio@8];
-- ускорили время чтения тестов примерно в 3 раза, теперь тесты читаются один раз в мастере (раньше читались для каждого браузера отдельно);
-- поддержали возможность писать конфиг на TS. Т.е. можно создать `.hermione.conf.ts` и hermione его сама скомпилирует и прочитает (если пользователь имеет в своем проекте пакет `ts-node`);
-- добавили временных меток в логи hermione. Выглядят так:
+- Upgraded from [webdriverio@7][webdriverio@7] to [webdriverio@8][webdriverio@8];
+- Increased test reading speed by about 3 times: tests are now read once in the master (previously read separately for each browser);
+- Added the ability to write the config in TS. You can create `.hermione.conf.ts`, and hermione will compile and read it (assuming your project includes `ts-node`);
+- Added timestamps to hermione logs, looking like:
```bash
[13:48:09 GMT+3] ✓ suite test2 [chrome-desktop:SESSION_ID] - 875ms
```
-### Патчевые изменения {#patch_changes}
+### Patch Changes {#patch_changes}
-- поддержали корректное снятие скриншотов в девайсах, имеющих дробный `pixelRatio` (например, `google pixel`). Ранее скриншоты в таких девайсах снимались некорректно;
-- отвод курсора с помощью опции `resetCursor: true` теперь не ругается, если левый верхний угол элемента `body` имеет отрицательные координаты.
+- Properly supported taking screenshots on devices with fractional `pixelRatio` (e.g., `Google Pixel`). Previously, screenshots on such devices were incorrect;
+- Moving the cursor away using the `resetCursor: true` option no longer triggers an error if the top-left corner of the `body` element has negative coordinates.
-## Как переехать? {#how_to_move}
+## How to Migrate? {#how_to_move}
-### 1. Обновить hermione до 7+ и плагины до последних версий {#update_hermione_and_plugins}
+### 1. Update hermione to 7+ and Plugins to the Latest Versions {#update_hermione_and_plugins}
-А именно:
+Specifically:
- [hermione][hermione]
- [html-reporter][html-reporter]
@@ -93,19 +93,19 @@ Reason: Something goes wrong
- [json-reporter][json-reporter]
- [hermione-passive-browsers][hermione-passive-browsers]
-Если какой-то из плагинов не используется, то устанавливать его не нужно.
+If you are not using any of these plugins, you do not need to install them.
-### 2. В конфиге hermione заменить test.id() на test.id {#replace_test_id_method_on_test_id_property}
+### 2. Replace test.id() with test.id in the hermione Config {#replace_test_id_method_on_test_id_property}
-Если `test.id()` не используется, то ничего делать не нужно.
+If you are not using `test.id()`, there is nothing to do.
-### 3. В конфиге hermione заменить опцию saveHistory на saveHistoryMode {#replace_save_history_on_save_history_mode}
+### 3. Replace the saveHistory Option with saveHistoryMode in the hermione Config {#replace_save_history_on_save_history_mode}
-Если [saveHistory][save_history] не используется, то ничего делать не нужно.
+If you are not using [saveHistory][save_history], there is nothing to do.
-### 4. Заменить использование кастомного моковского интерфейса {#replace_custom_mocha_interface}
+### 4. Replace the Usage of a Custom Mocha Interface {#replace_custom_mocha_interface}
-Если используется кастомный моковский интерфейс, то необходимо заменить его на интерфейс моки из зависимостей hermione:
+If you are using a custom mocha interface, replace it with the mocha interface from hermione dependencies:
```javascript
- const baseBdd = require('@gemini-testing/mocha/lib/interfaces/bdd');
@@ -115,9 +115,9 @@ Reason: Something goes wrong
+ const { interfaces: { bdd: baseBdd } } = require(mochaModule);
```
-## Поддержка {#support}
+## Support {#support}
-Если при переезде на новую версию вы столкнетесь с проблемами, или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter issues during the migration to the new version or have any questions, visit [github issues][gh-issues] — we will definitely help you!
[how-to-upgrade-hermione-to-4]: ../../migrations/how-to-upgrade-hermione-to-4
[how-to-upgrade-hermione-to-5]: ../../migrations/how-to-upgrade-hermione-to-5
diff --git a/docs/migrations/how-to-upgrade-hermione-to-8.mdx b/docs/migrations/how-to-upgrade-hermione-to-8.mdx
index 49b6410..f23efe2 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-8.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-8.mdx
@@ -1,91 +1,89 @@
import Admonition from "@theme/Admonition";
-# Как обновить hermione до версии 8.x
+# How to Upgrade hermione to Version 8.x
-Если в вашем проекте hermione младше 4-й версии, то прочтите сначала:
-* «[Как обновить hermione до версии 4.x][how-to-upgrade-hermione-to-4]»;
-* «[Как обновить hermione до версии 5.x][how-to-upgrade-hermione-to-5]»;
-* «[Как обновить hermione до версии 6.x][how-to-upgrade-hermione-to-6]»;
-* «[Как обновить hermione до версии 7.x][how-to-upgrade-hermione-to-7]».
+If your project is using a hermione version earlier than 4.x, first read:
+* "How to Upgrade hermione to Version 4.x";
+* "How to Upgrade hermione to Version 5.x";
+* "How to Upgrade hermione to Version 6.x";
+* "How to Upgrade hermione to Version 7.x".
-Мы рекомендуем вам обновлять hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
+We recommend upgrading hermione in stages, ensuring each step that all project tests run correctly.
-## Что изменилось? {#what_is_new}
+## What Has Changed? {#what_is_new}
-### Мажорные изменения {#major_changes}
+### Major Changes {#major_changes}
-#### Изменились экспорты пакета {#package_exports_changed}
+#### Package Exports Changed {#package_exports_changed}
-Для использования hermione по API в javascript теперь необходимо подключать `hermione` следующим образом:
+To use hermione via API in JavaScript, you now need to import `hermione` as follows:
```javascript
const { default: hermione } = require("hermione");
```
-Раньше можно было писать так:
+Previously, you could write it like this:
```javascript
const hermione = require("hermione");
```
-Вариант для typescript:
+For TypeScript:
```typescript
import hermione from "hermione";
```
-#### Изменена логика работы команды moveTo {#move_command_changed}
+#### moveTo Command Changed {#move_command_changed}
-Теперь команда `moveTo` смещает курсор не относительно левого верхнего угла, а относительно центра элемента. Если элемент не виден, то к нему будет выполнен подскрол.
-Раньше вызов команды без аргументов (`await browser.$('body).moveTo()`) смещал курсор в левый верхний угол элемента - теперь смещение произойдет в центр элемента.
+The `moveTo` command now moves the cursor relative to the center of the element rather than the top-left corner. If the element is not visible, it will scroll to it. Previously, calling the command without arguments (`await browser.$('body').moveTo()`) moved the cursor to the top-left corner of the element - now it will move to the center of the element.
-Если переходить на новую логику `moveTo` нет времени, то можете использовать команду `moveCursorTo`, которая работает как в hermione@7. Была добавлена в hermione@8.1.0.
-Команда `moveCursorTo` временная и будет удалена в следующем мажоре.
+If you don't have time to switch to the new logic of `moveTo`, you can use the `moveCursorTo` command, which works as it did in hermione@7. This command was added in hermione@8.1.0. The `moveCursorTo` command is temporary and will be removed in the next major version.
-#### Отказ от поддержки Node.JS < 18.x {#dropped_nodejs_less_than_18x}
+#### Dropped Support for Node.JS < 18.x {#dropped_nodejs_less_than_18x}
-В этом мажоре hermione перестала поддерживать версии _Node.JS < 18.x_.
+In this major version, hermione no longer supports versions _Node.JS < 18.x_.
-### Минорные изменения {#minor_changes}
+### Minor Changes {#minor_changes}
-- реализован REPL-режим для пошагового дебага тестов во всех браузерах (не только CDP) без перезапуска;
-- добавлена браузерная команда [clearSession][hermione-clear-session] для очистки состояния сессии:
- - удаляет файлы cookie;
- - очищает local storage;
- - очищает session storage.
-- добавлена браузерная команда `openAndWait` с настраиваемым ожиданием загрузки (по селектору, кастомному предикату, сетевому запросу и т.д);
-- добавлена cli-опция `--devtools` для упрощения переключения между двумя протоколами (`devtools` и `webdriver`);
-- улучшен stack trace при ошибках `unhandled rejection`;
-- теперь [изоляция][hermione-isolation] включена по умолчанию для chrome >= 94;
-- во время выполнения команды [assertView][hermione-assert-view] CSS-анимации на странице будут отключены по умолчанию;
-- реализовали генерацию уникального заголовка `X-Request-ID` для каждого запроса в браузер. Заголовок состоит из `${TEST_X_REQ_ID}${DELIMITER}$BROWSER_X_REQ_ID}`, где:
+- Added REPL mode for step-by-step debugging of tests in all browsers (not only CDP) without restarting.
+- Added a browser command [clearSession][hermione-clear-session] to clear session state:
+ - Deletes cookies;
+ - Clears local storage;
+ - Clears session storage.
+- Added a browser command `openAndWait` with customizable wait options for page loads (by selector, custom predicate, network request, etc.).
+- Added a CLI option `--devtools` to simplify switching between the two protocols (`devtools` and `webdriver`).
+- Improved stack trace for `unhandled rejection` errors.
+- Now [isolation][hermione-isolation] is enabled by default for Chrome >= 94.
+- During the execution of the [assertView][hermione-assert-view] command, CSS animations on the page will be disabled by default.
+- Implemented generation of a unique `X-Request-ID` header for each request in the browser. The header consists of `${TEST_X_REQ_ID}${DELIMITER}$BROWSER_X_REQ_ID}`, where:
- - `TEST_X_REQ_ID` - уникальный uuid для каждого запуска теста (в том числе ретрая того же самого теста). Позволяет в логах найти все запросы, относящиеся к одному тестовому запуску;
- - `DELIMITER` - `__` разделитель между uuid-ами теста и запроса;
- - `BROWSER_X_REQ_ID` - уникальный uuid для каждого браузерного запроса.
+ - `TEST_X_REQ_ID` - a unique UUID for each test run (including retries of the same test). This allows you to find all requests related to a single test run in the logs.
+ - `DELIMITER` - `__` separator between the test and request UUIDs.
+ - `BROWSER_X_REQ_ID` - a unique UUID for each browser request.
- Реальный пример uuid-а - `2f31ffb7-369d-41f4-bbb8-77744615d2eb__e8d011d8-bb76-42b9-b80e-02f03b8d6fe1`.
+ A real example of a UUID is `2f31ffb7-369d-41f4-bbb8-77744615d2eb__e8d011d8-bb76-42b9-b80e-02f03b8d6fe1`.
-### Патчевые изменения {#patch_changes}
+### Patch Changes {#patch_changes}
-- исправили отключение анимаций в айфреймах для ios при использовании [assertView][hermione-assert-view];
-- избавились от реинициализации браузерной сессии в воркерах;
-- исправили баг с невозможностью отключить [изоляцию][hermione-isolation].
+- Fixed disabling animations in iframes for iOS when using [assertView][hermione-assert-view].
+- Eliminated reinitialization of browser sessions in workers.
+- Fixed a bug where it was impossible to disable [isolation][hermione-isolation].
-## Как переехать? {#how_to_move}
+## How to Migrate? {#how_to_move}
-### 1. Обновить hermione до 8+ и плагины до последних версий {#update_hermione_and_plugins}
+### 1. Update hermione to 8+ and Plugins to the Latest Versions {#update_hermione_and_plugins}
-### 2. В случае использования hermione по API в javascript перейти на typescript или изменить require {#replace_hermione_require}
+### 2. If Using hermione via API in JavaScript, Switch to TypeScript or Change the Import Statement {#replace_hermione_require}
-### 3. В случае использования moveTo перейти на moveToCursor или указывать координаты от центра элемента {#replace_move_to}
+### 3. If Using moveTo, Switch to moveToCursor or Specify Coordinates from the Center of the Element {#replace_move_to}
-## Поддержка {#support}
+## Support {#support}
-Если при переезде на новую версию вы столкнетесь с проблемами или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter issues during the migration to the new version or have any questions, visit [github issues][gh-issues] — we will definitely help you!
[how-to-upgrade-hermione-to-4]: ../../migrations/how-to-upgrade-hermione-to-4
[how-to-upgrade-hermione-to-5]: ../../migrations/how-to-upgrade-hermione-to-5
@@ -95,4 +93,4 @@ import hermione from "hermione";
[hermione-clear-session]: https://github.com/gemini-testing/hermione?tab=readme-ov-file#clearsession
[hermione-isolation]: https://github.com/gemini-testing/hermione?tab=readme-ov-file#isolation
[hermione-assert-view]: https://github.com/gemini-testing/hermione?tab=readme-ov-file#assertview
-[gh-issues]: https://github.com/gemini-testing/testplane/issues/
+[gh-issues]: https://github.com/gemini-testing/testplane/issues
diff --git a/docs/migrations/how-to-upgrade-hermione-to-testplane.mdx b/docs/migrations/how-to-upgrade-hermione-to-testplane.mdx
index b5c1a96..2a593f8 100644
--- a/docs/migrations/how-to-upgrade-hermione-to-testplane.mdx
+++ b/docs/migrations/how-to-upgrade-hermione-to-testplane.mdx
@@ -1,35 +1,33 @@
import Admonition from "@theme/Admonition";
-# Как обновить Hermione до Testplane
+# How to migrate from Hermione to Testplane
-Если в вашем проекте Hermione младше 8-й версии, то прочтите сначала:
-* «[Как обновить hermione до версии 4.x][how-to-upgrade-hermione-to-4]»;
-* «[Как обновить hermione до версии 5.x][how-to-upgrade-hermione-to-5]»;
-* «[Как обновить hermione до версии 6.x][how-to-upgrade-hermione-to-6]»;
-* «[Как обновить hermione до версии 7.x][how-to-upgrade-hermione-to-7]»;
-* «[Как обновить hermione до версии 8.x][how-to-upgrade-hermione-to-8]».
+If in your project Hermione is younger than the v8.x version, then read first:
+* «[How to update hermione to the v.4.x][how-to-upgrade-hermione-to-4]»;
+* «[How to update hermione to the v.5.x][how-to-upgrade-hermione-to-5]»;
+* «[How to update hermione to the v.6.x][how-to-upgrade-hermione-to-6]»;
+* «[How to update hermione to the v.7.x][how-to-upgrade-hermione-to-7]»;
+* «[How to update hermione to the v.8.x][how-to-upgrade-hermione-to-8]».
-Мы рекомендуем вам обновлять Hermione поэтапно, убеждаясь на каждом этапе, что все тесты проекта корректно выполняются.
+We recommend updating Hermione step by step, ensuring at each stage that all project tests are executed correctly.
-## Что изменилось? {#what_is_new}
+## What has changed? {#what_is_new}
-Этот проект ранее назывался Hermione, но со временем возникли некоторые проблемы с авторскими правами и товарными знаками, что привело к решению о ребрендинге. После некоторого обсуждения мы остановились на Testplane в качестве официального нового названия.
-Так как это изменение является простым ребрендингом, мы продолжили сквозное версионирование, вместо того, чтобы начинать версионирование заново. Таким образом, Testplane@8.x является простой заменой Hermione@8.x.
-Testplane имеет полную обратную совместимость c Hermione — умеет читать конфиги Hermione, поддерживает ее плагины, а для более плавного переезда экспортирует сразу 2 bin-файла (testplane и hermione).
+This project was formerly known as "Hermione", but eventually some copyright and trademark issues surfaced, leading to the decision to rebrand. After some discussion, we settled on "Testplane" as the official new title. Considering this change as merely a rebranding, we've proceeded with the existing version count instead of starting anew. Thus, Testplane `v8.x` is a drop-in replacement for Hermione `v8.x`.
-## Как переехать? {#how_to_move}
+## How to move? {#how_to_move}
-### 1. Заменить npm-зависимости `hermione` на `testplane` в package.json {#uninstall_hermione}
+### 1. Replace hermione deps with tesplane in `package.json` {#uninstall_hermione}
```bash
npm uninstall hermione
npm install -D testplane
```
-### 2. В вашем ts-конфиге `tsconfig.json` заменить поле `hermione` на `testplane` {#update_ts_config}
+### 2. Replace "hermione" with "testplane" in compilerOptions.types field of your tsconfig.json file {#update_ts_config}
```javascript
{
@@ -41,27 +39,27 @@ npm install -D testplane
}
```
-### 3. Заменить все импорты и декларации пакета hermione (при наличии) {#remove_from_code}
+### 3. Replace all imports, requires and declarations {#remove_from_code}
- `import ... from "hermione"` → `import ... from "testplane"`
- `require("hermione")` → `require("testplane")`
- `declare module "hermione"` → `declare module "testplane"`
-### 4. Опциональные изменения (не обязательны для переезда, но рекомендованные) {#optional_changes}
+### 4. Optional changes list (these are not required, but recommended) {#optional_changes}
-- при запуске используйте bin-файл `testplane` вместо `hermione`;
-- переименуйте файл конфигурации `.hermione.conf.(t|j)s` в `.testplane.conf.(t|j)s`;
-- используйте глобальный хелпер `globalThis.testplane` вместо `globalThis.hermione`;
-- для переопределения конфига используйте переменные окружения, начинающиеся на `testplane_` вместо `hermione_`;
-- используйте поле `testplane` вместо `hermione` в обработчиках событий;
-- для тайпингов используйте [TestplaneCts][tp-ctx] вместо `HermioneCtx`;
-- для получения контекста в тесте используйте свойство браузера `executionContext.testplaneCtx` вместо `executionContext.hermioneCtx`;
-- если вы используете дефолтное значение опции [screenshotsDir][screenshotsdir], то переименуйте папку со скриншотами "hermione/screens" в "testplane/screens" иил явно укажите в конфиге значение;
-- если вы используете дефолтное значение опции [sets.files][sets], то переименуйте вашу папку с тестами "hermione → testplane" или укажите явно значение опции.
+- use `testplane` binary instead of `hermione` binary;
+- rename `.hermione.conf.ts`, `.hermione.conf.js` configs to `.testplane.conf.ts`, `.testplane.conf.js`;
+- use `globalThis.testplane` helper instead of `globalThis.hermione`;
+- use `testplane_` environment variables instead of `hermione_` environment variables;
+- use testplane field instead of hermione on event handlers;
+- use [TestplaneCtx][tp-ctx] instead of `HermioneCtx` type;
+- use `executionContext.testplaneCtx` as browser property instead of `executionContext.hermioneCtx`;
+- if you use default [screenshotsDir][screenshotsdir] value, rename "hermione/screens" directory to "testplane/screens" or specify the value "hermione/screens" explicitly;
+- if you use default [sets.files][sets] value, move your tests from "hermione" to "testplane" directory or specify the value "hermione" explicitly.
-## Поддержка {#support}
+## Support {#support}
-Если при переезде вы столкнетесь с проблемами или у вас возникнут какие-либо вопросы, то приходите в [github issues][gh-issues] — и мы обязательно вам поможем!
+If you encounter any problems during the migration or have any questions, come to [github issues][gh-issues] - and we will definitely help you!
[how-to-upgrade-hermione-to-4]: ../../migrations/how-to-upgrade-hermione-to-4
[how-to-upgrade-hermione-to-5]: ../../migrations/how-to-upgrade-hermione-to-5
diff --git a/docs/plugins/hermione-browser-version-changer.mdx b/docs/plugins/hermione-browser-version-changer.mdx
index 8f654d3..ddd8d55 100644
--- a/docs/plugins/hermione-browser-version-changer.mdx
+++ b/docs/plugins/hermione-browser-version-changer.mdx
@@ -1,103 +1,104 @@
# hermione-browser-version-changer
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [hermione-browser-version-changer][hermione-browser-version-changer], чтобы управлять определением версии браузера для тестов.
+Use the `hermione-browser-version-changer` plugin to manage the definition of the browser version for tests.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D hermione-browser-version-changer
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига Testplane:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
plugins: {
- "hermione-browser-version-changer": {
+ 'hermione-browser-version-changer': {
enabled: true,
initStore: async () => {
return {
- 70.1: ["title1", "title2"],
- 70.2: ["title3", "title4"],
+ '70.1': ['title1', 'title2'],
+ '70.2': ['title3', 'title4']
};
- },
+ }
browsers: {
chrome: {
- 70.1: (test, ver, store) => store[ver].includes(test.title),
- 70.2: (test, ver, store) => store[ver].includes(test.title),
- },
- },
+ '70.1': (test, ver, store) => store[ver].includes(test.title),
+ '70.2': (test, ver, store) => store[ver].includes(test.title)
+ }
+ }
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-[enabled](#setup_enabled) Boolean true Включить / отключить плагин.
-[initStore](#setup_init_store) Function _[noop][noop]_ Функция для инициализации хранилища _(store)_, которое будет доступно в [predicate](#setup_predicate).
-[browsers](#setup_browsers) Object _N/A_ Список браузеров и их настроек. См. [ниже](#setup_browsers) подробности.
+[enabled](#setup_enabled) Boolean true Enable / disable the plugin.
+[initStore](#setup_init_store) Function _[noop][noop]_ Function for initializing the storage _(store)_, which will be available in [predicate](#setup_predicate).
+[browsers](#setup_browsers) Object _N/A_ A list of browsers and their settings. See details [below](#setup_browsers).
### enabled {#setup_enabled}
-Включить или отключить плагин. По умолчанию: `true`.
+Enable or disable the plugin. By default: `true`.
### initStore {#setup_init_store}
-Необязательный параметр. Функция для инициализации хранилища _(store)_, которое будет доступно в [predicate](#setup_predicate). Хранилище может использоваться для того, чтобы потом в [predicate](#setup_predicate) для любого теста определить, какая версия браузера к нему относится. По умолчанию: [\_.noop][noop] из библиотеки `lodash`.
+Optional parameter. Function for initializing the storage _(store)_, which will be available in [predicate](#setup_predicate). The store can be used in [predicate](#setup_predicate) for any test to determine which version of the browser belongs to it. By default: [\_.noop][noop] from [lodash][lodash].
-Функция может быть асинхронной.
+The function can be asynchronous.
### browsers {#setup_browsers}
-Список браузеров и их настроек. Имеет следующий формат:
+A list of browsers and their settings. It has the following format:
```javascript
browsers: {
: {
: ,
: ,
- // другие версии браузеров...
+ // other browser versions...
},
- // другие браузеры...
+ // other browsers...
}
```
### predicate(test, version, store) {#setup_predicate}
-Функция-предикат, которая получает инстанс теста _(test),_ версию браузера _(version)_ и ссылку на хранилище _(store)_. Должна вернуть `true`, если тест подходит под указанную версию браузера, иначе должна вернуть `false`.
+A predicate function that receives the test instance _(test),_ browser version _(version)_ and a link to the storage _(store)_. It should return `true` if the test fits the specified browser version, otherwise it should return `false`.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--browser-version-changer-` для опций командной строки и `testplane_browser_version_changer_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command line options or through environment variables during Testplane startup. Use the prefix `--browser-version-changer-` for command line options and `testplane_browser_version_changer_` for environment variables. For example:
```bash
-npx testplane --browser-version-changer-enabled false ...
+npx testplane --browser-version-changer-enabled false
```
```bash
-testplane_browser_version_changer_enabled=false npx testplane ...
+testplane_browser_version_changer_enabled=false npx testplane
```
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина hermione-browser-version-changer][hermione-browser-version-changer]
+- [hermione-browser-version-changer plugin sources][hermione-browser-version-changer]
[hermione-browser-version-changer]: https://github.com/gemini-testing/hermione-browser-version-changer
[noop]: https://lodash.com/docs/4.17.15#noop
+[lodash]: https://lodash.com/
diff --git a/docs/plugins/hermione-hide-scrollbars.mdx b/docs/plugins/hermione-hide-scrollbars.mdx
index c85224a..db1658d 100644
--- a/docs/plugins/hermione-hide-scrollbars.mdx
+++ b/docs/plugins/hermione-hide-scrollbars.mdx
@@ -2,29 +2,29 @@ import Admonition from "@theme/Admonition";
# hermione-hide-scrollbars
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [hermione-hide-scrollbars][hermione-hide-scrollbars], чтобы скрывать скроллбары в тестах, которые запускаются в Chrome-браузерах.
+Use the `hermione-hide-scrollbars` plugin to hide scrollbars in tests that run in Chrome browsers.
-Для получения доступа к браузеру через [Chrome DevTools Protocol (CDP)][CDP] плагин использует пакет [puppeteer-core](https://github.com/GoogleChrome/puppeteer).
+To access the browser via [Chrome DevTools Protocol (CDP)][CDP], the plugin uses the [puppeteer-core](https://github.com/GoogleChrome/puppeteer) package.
-Чтобы скрывать скроллбары используется команда CDP [Emulation.setScrollbarsHidden][set-scrollbars-hidden].
+To hide scroll bars, the CDP [Emulation.setScrollbarsHidden][set-scrollbars-hidden] command is used.
- Обновите Chrome-браузер до версии 72.1 и выше, чтобы данная функциональность работала в ваших
- тестах. Так как более ранние версии Chrome-браузеров не поддерживают команду
- _Emulation.setScrollbarsHidden_.
+ Update your Chrome browser to version 72.1 and higher so that this functionality works in your
+ tests. Since earlier versions of Chrome browsers do not support the
+ _Emulation.setScrollbarsHidden_ command.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D hermione-hide-scrollbars
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
@@ -36,35 +36,35 @@ module.exports = {
`ws://${url.parse(gridUrl).host}/devtools/${sessionId}`,
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-browsers Array `[ ]` Список браузеров, для которых будет применена логика отключения скроллбаров.
-browserWSEndpoint Function _N/A_ Функция, которая должна вернуть URL для работы с браузером через [CDP][CDP]. Чтобы можно было вычислить URL, в функцию передаются идентификатор сессии и ссылка на грид: параметры передаются в виде объекта с ключами _sessionId и gridUrl_.
+enabled Boolean true Enable / disable the plugin.
+browsers Array `[ ]` A list of browsers for which the logic of disabling scroll bars will be applied.
+browserWSEndpoint Function _N/A_ A function that should return the URL to work with the browser via [CDP][CDP]. To be able to define the URL, the session ID and a link to the grid are passed to the function: the parameters are passed as an object with the keys _sessionId and gridUrl_.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--hide-scrollbars-` для опций командной строки и `testplane_hide_scrollbars_` — для переменных окружения.
+All plugin parameters that can be defined in the config can also be passed as command-line options or through environment variables during the launch of Testplane. Use the prefix `--hide-scrollbars-` for command line options and `testplane_hide_scrollbars_` for environment variables.
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина hermione-hide-scrollbars][hermione-hide-scrollbars]
-- [Emulation.setScrollbarsHidden][set-scrollbars-hidden]
+- [hermione-hide-scrollbars plugin sources][hermione-hide-scrollbars]
+- [setScrollbarsHidden][set-scrollbars-hidden]
- [createCDPSession](https://github.com/puppeteer/puppeteer/blob/main/docs/api/puppeteer.target.createcdpsession.md)
- [CDPSession class](https://github.com/puppeteer/puppeteer/blob/main/docs/api/puppeteer.cdpsession.md)
diff --git a/docs/plugins/html-reporter.mdx b/docs/plugins/html-reporter.mdx
index 01e60ae..e81a53c 100644
--- a/docs/plugins/html-reporter.mdx
+++ b/docs/plugins/html-reporter.mdx
@@ -1,5 +1,5 @@
# html-reporter
-Про плагин `html-reporter` читайте в отдельном разделе «[Отчет testplane][html-reporter-setup]».
+Read more about `html-reporter` plugin in the «[Html-Reporter Setup][html-reporter-setup]» section.
[html-reporter-setup]: ../../html-reporter/html-reporter-setup
diff --git a/docs/plugins/retry-limiter.mdx b/docs/plugins/retry-limiter.mdx
index 94166a3..f1cdf92 100644
--- a/docs/plugins/retry-limiter.mdx
+++ b/docs/plugins/retry-limiter.mdx
@@ -2,94 +2,94 @@ import Admonition from "@theme/Admonition";
# retry-limiter
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [retry-limiter][retry-limiter], чтобы ограничивать количество ретраев упавших тестов, а также время, в течение которого ретраи разрешены.
+Use the `retry-limiter` plugin to limit the number of retries of failed tests, as well as the time during which retries are allowed.
-Используйте данный плагин при прогоне тестов в CI. — Так как в CI, как правило, прогоняются либо все тесты проекта, либо их значительная часть.
+Use this plugin when running tests in CI.—Since in CI, as a rule, either all the tests of the project are run, or a significant part of them.
-Использовать плагин _retry-limiter_ при локальных запусках отдельных тестов чаще всего нецелесообразно, ввиду их малого количества и, соответственно, отсутствия значимого эффекта от экономии «железа» или времени на прогон тестов.
+Using the _retry-limiter_ plugin for local launches of a few tests is most often impractical, due to their small number and, accordingly, the lack of a significant effect from saving hardware or time for running tests.
-Ретраи упавших тестов — один из способов борьбы с нестабильными тестами. Однако, бывают случаи, когда тесты падают массово из-за проблем с инфраструктурой или из-за того, что код проекта был сломан (например, в пулл-реквесте). В таких случаях ретраи только зря тратят ресурсы серверов, на которых прогоняются тесты, и время разработчика, заставляя разработчика ждать окончания прогона тестов, которые заведомо упадут.
+Retries of failed tests is one of the ways to deal with unstable tests. However, there are cases when a lot of tests fail due to infrastructure problems or because the project code was broken (for example, in a pull-request). In such cases, the retries only waste the resources of the servers on which the tests are run, and the developer's time, forcing the developer to wait for the end of the test run, which will obviously fail.
-Чтобы избежать подобных сценариев, плагин `retry-limiter` позволяет:
+To avoid such scenarios, the `retry-limiter` plugin allows:
-- задать максимальную долю ретраев от общего количества тестов;
-- ограничить время, в течение которого ретраи могут использоваться;
-- снизить максимальное количество ретраев для всех тестов, если хотя бы один из тестов упадет, несмотря на все ретраи.
+- set the maximum share of retries from the total number of tests;
+- limit the time during which retries can be used;
+- reduce the maximum number of retries for all tests if at least one of the tests fails despite all retries.
-Например, если в проекте запускаются 1000 тестов и для параметра `limit` в конфиге плагина установлено значение _0.3,_ то при падении тестов будет максимально разрешено _300_ ретраев.
+For example, if 1000 tests are run in the project and the `limit` parameter in the plugin config is set to _0.3,_ then when the tests fail, _300_ retries will be allowed as much as possible.
-Если в конфиге плагина ещё установлено значение _600 секунд (10 минут)_ для параметра `timeLimit`, то независимо от того, сколько раз ещё можно ретраить упавшие тесты, плагин отключит механизм ретраев через _10 минут_ после начала прогона тестов. Последнее защищает от нерациональной траты ресурсов «железа» на слишком долгие прогоны тестов.
+If the value _600 seconds (10 minutes)_ is still set in the plugin config for the `timeLimit` parameter, then regardless of how many times you can still retry the failed tests, the plugin will disable the retry mechanism after _10 minutes_ after the start of the test run. The latter protects against unreasonable waste of hardware resources for too long test runs.
-Если testplane запущена с опцией `--retry`, например, со значением _7_, и при этом в конфиге плагина `retry-limiter` параметр `setRetriesOnTestFail` установлен в значение _4_, то это означает следующее: в случае падения хотя бы одного теста в любом из браузеров после _7_ ретраев, плагин посчитает, что возникла какая-то системная проблема и нужно снизить максимально разрешенное число ретраев до значения, заданного в параметре `setRetriesOnTestFail`, то есть до _4_. Это также позволяет защититься от нерационального расхода ресурсов на прогон тестов в случае системных проблем.
+If Testplane is launched with the `--retry` option, for example, with the value _7_, and at the same time, in the config of the `retry-limiter` plugin, the `setRetriesOnTestFail` parameter is set to _4_, this means the following: if at least one test fails in any of the browsers after _7_ retries, the plugin will consider that some kind of system problem has arisen and it is necessary to reduce the maximum allowed number of retries to the value specified in the `setRetriesOnTestFail` parameter, that is, to _4_. It also allows you to protect yourself from the unreasonable consumption of resources for running tests in case of system problems.
- Если вы столкнулись в своем проекте с ситуацией, когда механизм ретраев начинает отключаться
- из-за превышения _timeLimit_, то не рекомендуется бездумно увеличивать это время. Стоит
- разобраться, почему прогон тестов начал выполняться слишком долго, а не «заливать железом»
- реальную проблему со стабильностью прогонов тестов.
+ If you are faced with a situation in your project when the retry mechanism starts to turn off
+ due to exceeding _timeLimit_, then it is not recommended to thoughtlessly increase this time. It
+ is worth figuring out why the tests began to run for too long, and not to waste hardware instead
+ of solving the real problem with the stability of test runs.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D retry-limiter
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the Testplane config:
```javascript
module.exports = {
plugins: {
"retry-limiter": {
- limit: 0.3, // разрешаем не больше 30% ретраев от общего числа тестов
- setRetriesOnTestFail: 4, // снижаем число ретраев до 4 после падения первого теста
- timeLimit: 600, // через 10 минут ретраи должны быть отключены
+ limit: 0.3, // allow no more than 30% of retries from the total number of tests
+ setRetriesOnTestFail: 4, // descrease number of retries to 4, after the first test fails despite all retries made
+ timeLimit: 600, // after 10 minutes the retries should be turned off
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-limit Number 1 Максимально разрешенная доля ретраев от общего количества тестов. Задается как число в диапазоне от 0 до 1. После превышения заданной доли ретраев ретраи будут отключены.
-setRetriesOnTestFail Number Infinity Число ретраев, до которого надо снизить разрешенное число ретраев, если упадет хотя бы один тест, несмотря на все ретраи.
-timeLimit Number Infinity Время в секундах, после истечения которого ретраи будут отключены.
+enabled Boolean true Enable / disable the plugin.
+limit Number 1 The maximum allowed percentage of retries from the total number of tests. It is set as a number in the range from 0 to 1. After exceeding the specified percentage of retries, the retries will be disabled.
+setRetriesOnTestFail Number Infinity The number of retries to which the allowed number of retries should be reduced if at least one test fails, despite all retries.
+timeLimit Number Infinity The time in seconds after which the retries will be disabled.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--retry-limiter-` для опций командной строки и `retry_limiter_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command line options or through environment variables during Testplane startup. Use the prefix `--retry-limiter-` for command line options and `retry_limiter_` for environment variables. For example:
```bash
-npx testplane --retry-limiter-time-limit=900 ...
+npx testplane --retry-limiter-time-limit=900
```
```bash
-retry_limiter_time_limit=900 npx testplane ...
+retry_limiter_time_limit=900 npx testplane
```
-## Использование {#usage}
+## Usage {#usage}
-При использовании плагина в логах testplane вы можете увидеть сообщения следующего вида:
+When using the plugin in Testplane's logs, you can see the following messages:
```bash
retry-limiter: will stop retrying tests after 600 seconds
@@ -99,11 +99,11 @@ retry-limiter: will stop retrying tests after 600 seconds
retry-limiter: with limit 0.3 will stop retrying tests after 1189 retries
```
-В первом сообщении плагин информирует об ограничении времени работы механизма ретраев.
-Во втором сообщении — об ограничении общего количества ретраев.
+In the first message, the plugin informs about the limitation of the operation time of the retry mechanism.
+In the second message—about limiting the total number of retries.
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина retry-limiter][retry-limiter]
+- [retry-limiter plugin sources][retry-limiter]
[retry-limiter]: https://github.com/gemini-testing/retry-limiter
diff --git a/docs/plugins/stat-reporter.mdx b/docs/plugins/stat-reporter.mdx
index c6e8639..1b7d40c 100644
--- a/docs/plugins/stat-reporter.mdx
+++ b/docs/plugins/stat-reporter.mdx
@@ -5,17 +5,17 @@ import Admonition from "@theme/Admonition";
# stat-reporter
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [stat-reporter][stat-reporter], чтобы получить отчет(ы) со статистикой прогона тестов в [testplane][testplane].
+Use the [stat-reporter][stat-reporter] plugin to get a report(s) with test run statistics in [testplane][testplane].
-Плагин позволяет получать отчет как в консоли, так и в виде html- и/или json-файла. При этом отчеты не взаимоисключающие: после прогона тестов можно получить сразу 3 вида отчетов.
+The plugin allows you to receive a report both in the console and as an html and/or json file. At the same time, the reports are not mutually exclusive: after running the tests, you can get 3 types of reports at once.
-### Формат отчета {#report_format}
+### Report format {#report_format}
-В отчете плагина результаты прогона тестов разбиты по браузерам. Также выводятся максимальное время выполнения _(Duration)_ в минутах и секундах и результат прогона тестов _(Status)_ в каждом браузере. Такой отчет позволяет понять в каких браузерах возникли проблемы, а именно: не проходит больше всего тестов или время выполнения резко возросло.
+In the plugin report, the test run results are split by browsers. The maximum execution time _(Duration)_ in minutes and seconds and the result of running tests _(Status)_ in each browser are also displayed. Such a report allows you to understand which browsers have problems: the most tests do not pass or the execution time has increased dramatically.
-По умолчанию включен только отчет в консоли:
+By default, only the report in the console is enabled:
```bash
┌──────────────────────┬────────┬───────┬────────┬────────┬─────────┬─────────┬──────────┐
@@ -50,40 +50,40 @@ import Admonition from "@theme/Admonition";
```
- Если вы хотите получить больше функциональности, то используйте [html-reporter][html-reporter]
- для получения отчета о прогоне тестов.
+ If you want to get more functionality, then use [html-reporter][html-reporter] to get a test run
+ report.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D stat-reporter
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
-
+
```javascript
module.exports = {
plugins: {
'stat-reporter': {
enabled: true
- // отчет будет только в консоли
+ // the report will only be in the console
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-
+
```javascript
module.exports = {
plugins: {
@@ -96,22 +96,22 @@ npm install -D stat-reporter
html: {
enabled: true,
path: 'some/path/to/file.html'
- // если не указывать path, то отчет будет сохранен
- // в stat-reporter.html в текущей рабочей директории
+ // if you do not specify path, the report will be saved
+ // in stat-reporter.html in the current working directory
},
json: {
enabled: true,
path: 'some/path/to/file.json'
- // если не указывать path, то отчет будет сохранен
- // в stat-reporter.json в текущей рабочей директории
+ // if you do not specify path, the report will be saved
+ // in stat-reporter.json in the current working directory
}
}
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
@@ -119,77 +119,77 @@ npm install -D stat-reporter
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-[enabled](#setup_enabled) Boolean true Включить / отключить плагин.
-[reporters](#setup_reporters) Object _см. описание_ Настройки отчетов со статистикой прогона тестов. По умолчанию включен только отчет в консоли _(flat)_.
+[enabled](#setup_enabled) Boolean true Enable / disable the plugin.
+[reporters](#setup_reporters) Object _see description_ Settings for reports with test run statistics. By default, only the report in the console is enabled _(flat)_.
### enabled {#setup_enabled}
-Включить или отключить плагин. По умолчанию: `true`.
+Enable or disable the plugin. By default: `true`.
### reporters {#setup_reporters}
-Необязательный параметр. Задает настройки отчетов со статистикой прогона тестов.
+Optional parameter. Sets the settings for reports with test run statistics.
-По умолчанию:
+By default:
```javascript
{
- // отчет со статистикой будет только в консоли
+ // the statistics report will only be in the console
flat: {
enabled: true;
}
}
```
-Параметр является объектом, в котором ключ определяет тип отчета, а его значение в виде объекта — соответствующие настройки отчета. Можно задать следующие ключи:
+The parameter is an object in which the key determines the type of report, and its value in the form of an object is the corresponding report settings. You can set the following keys:
-- _flat_ — для отчета в консоли;
-- _html_ — для html-отчета;
-- _json_ — для json-отчета.
+- _flat_—for a report in the console;
+- _html_—for html-report;
+- _json_—for json-report.
-Все отчеты имеют в настройках параметр `enabled` типа `Boolean`, который определяет включен отчет или отключен. По умолчанию включен только отчет в консоли.
+All reports in the settings have an `enabled` parameter of the `Boolean` type, which determines whether the report is enabled or disabled. By default, only the report in the console is enabled.
-Также отчеты типа `html` и `json` имеют дополнительный параметр `path` — путь к файлу, в который необходимо сохранить отчет.
+Also, reports of the type `html` and `json` have an additional parameter `path`—the path to the file to which you want to save the report.
-По умолчанию отчет сохраняется в текущей рабочей директории в файл `stat-reporter.html` или `stat-reporter.json` в зависимости от типа отчета.
+By default, the report is saved in the current working directory to a file `stat-reporter.html` or `stat-reporter.json` depending on the type of report.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--stat-reporter-` для опций командной строки и `stat_reporter_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command line options or through environment variables during Testplane startup. Use the prefix `--stat-reporter-` for command line options and `stat_reporter_` for environment variables. For example:
```bash
-npx testplane --stat-reporter-reporters-html-enabled=true
+npx testplane --stat-reporter-reporters-html-enabled=true ...
```
```bash
-stat_reporter_reporters_html_enabled = true npx testplane
+stat_reporter_reporters_html_enabled = true npx testplane ...
```
-## Команды плагина {#commands}
+## Commands {#commands}
### merge-stat-reports {#commands_merge_stat_reports}
-Плагин добавляет к testplane команду `merge-stat-reports`, с помощью которой можно объединить несколько отчетов в один общий отчет как в html, так и в json-формате. При этом команда позволяет получить на выходе итоговые отчеты сразу в двух форматах.
+The plugin adds the `merge-stat-reports` command to Testplane, with which you can merge several reports into one report in both html and json format. At the same time, the command allows you to get the output of the final reports in two formats at once.
-Для сохранения итогового отчета в требуемом формате нужно указать соответствующую опцию: `--html` или `--json`.
+To save the final report in the required format, you need to specify the appropriate option: `--html` or `--json`.
```bash
npx testplane merge-stat-reports src-report-1.json src-report-2.json --html dest-html-report --json report.json
```
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина stat-reporter][stat-reporter]
+- [stat-reporter plugin sources][stat-reporter]
[stat-reporter]: https://github.com/gemini-testing/stat-reporter
[html-reporter]: ../../html-reporter/html-reporter-setup
diff --git a/docs/plugins/testplane-chunks.mdx b/docs/plugins/testplane-chunks.mdx
index 32ed890..9258b50 100644
--- a/docs/plugins/testplane-chunks.mdx
+++ b/docs/plugins/testplane-chunks.mdx
@@ -2,96 +2,95 @@ import Admonition from "@theme/Admonition";
# testplane-chunks
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-chunks][testplane-chunks], чтобы распараллелить запуск тестов.
+Use the [testplane-chunks][testplane-chunks] plugin to run tests in parallel.
-Если в вашем проекте большое количество тестов и при этом не хватает мощности отдельных CI-серверов, чтобы выполнить все эти тесты на одном сервере за приемлемое время, то этот плагин — для вас.
+If your project has a large number of tests and at the same time there is not enough performance of concrete CI servers to perform all these tests on one server in an acceptable time, then this plugin is for you.
-Плагин позволяет распараллелить запуск тестов на нескольких серверах. Тем самым ускорив общий прогон тестов. Однако сам плагин не занимается какой-либо оркестрацией, распараллеливанием запуска или слиянием получившихся отдельных отчетов в один итоговый отчет.
+The plugin allows you to run tests in parallel on multiple servers. Thereby speeding up the overall test run. However, the plugin itself does not deal with any kind of orchestration, parallelization of the launch or merging of the resulting separate reports into one final report.
-### Что же тогда делает данный плагин? {#what_does_plugin_do}
+### What does this plugin do then? {#what_does_plugin_do}
-Плагин `testplane-chunks` разбивает **всегда одним и тем же способом** ваш набор тестов на заданное количество порций _(chunks)_ и отдает testplane на запуск только ту порцию, которую вы указали. Здесь ключевое — _«всегда одним и тем же способом»_. То есть операция разбиения на порции (чанки) является [идемпотентной][idempotence].
+The `testplane-chunks` plugin splits **always in the same way** your tests into a given number of chunks and gives Testplane to run only the chunk that you specified. The key here is _"always in the same way"_. That is, the operation of splitting into chunks is [idempotent][idempotence].
-### Что дает идемпотентность? {#what_does_idempotence_give}
+### What gives idempotence? {#what_does_idempotence_give}
-Вы можете организовать в своем CI переиспользование результатов запусков тестов из отдельных чанков при общем перезапуске. Это позволит вам сэкономить время при перезапуске всех тестов, так как прогоняться будут только те чанки, в которых есть упавшие тесты.
+You can setup your CI so as to reuse the results of test runs from separate chunks during a general restart. This will allow you to save time when restarting all tests, since only those chunks that have failed tests will be run.
-Например, в вашем проекте есть 1 тысяча тестов. Вы разбили эти тесты на 10 чанков по 100 тестов в каждом. Это означает, что при запуске тестов в вашем пулл-реквесте, у вас будет 10 инстансов testplane, запущенных одновременно на 10 серверах. Каждый инстанс выполнит по 100 тестов. В каких-то из этих запусков тесты могут упасть. Например, 2 из 10 чанков у вас упали. Вы решаете перезапустить прогон тестов, рассчитывая, что на этот раз тесты пройдут. Так вот, при перезапуске testplane с указанием номера упавшего чанка, вы можете быть абсолютно уверены, что плагин `testplane-chunks` сформирует для testplane точно такую же порцию тестов как и в прошлый свой запуск.
+For example, your project has 1 thousand tests. You have split these tests into 10 chunks of 100 tests each. This means that when you run tests in your pull request, you will have 10 testplanes running simultaneously on 10 servers. Each Testplane will perform 100 tests. In some of these runs, the tests may fail. For example, 2 out of 10 chunks have failed. You decide to restart the test run, hoping that this time the tests will pass. So, when you restart Testplane with the number of the failed chunk, you can be absolutely sure that the `testplane-chunks` plugin will generate exactly the same batch of tests for Testplane as in its last launch.
- Организуя перезапуск тестов в своем CI, помните, что для **переиспользования** запусков
- отдельных чанков, исходное количество тестов, их имена, или количество браузеров, в которых они
- запускаются, не должны меняться между запусками. Иначе чанки в новом запуске уже не будут такими
- же, как в прошлый раз. И хотя формально вы получите то же количество чанков, что и в прошлый
- раз, их содержимое при этом будет отличаться. А значит переиспользование прошлых результатов
- окажется некорректным.
+ When organizing the restart of tests in your CI, remember that in order to **re-use** runs of
+ separate chunks, the initial number of tests, their names, or the number of browsers in which
+ they are run should not change between runs. Otherwise, chunks in the new launch will not be the
+ same as last time. And although formally you will get the same number of chunks as last time,
+ their contents will be different. This means that reusing past results will be incorrect.
-### Во сколько раз ускорятся мои тесты? {#how_much_will_tests_speed_up}
+### How many times will my tests speed up? {#how_much_will_tests_speed_up}
-Нужно понимать, что ускорение возможно только за счет того, что тесты будут запускаться на большем количестве железа.
+You need to understand that acceleration is possible only due to the fact that tests will be run on more hardware.
-Если у вас нет в наличии серверов, которые можно было бы выделить под параллельный запуск сразу нескольких testplane, то разбивать тесты на соответствующее количество чанков смысла нет. Если CI будет ждать освобождения какого-либо сервера, чтобы запустить очередную порцию тестов, то ваш параллельный запуск превратится в последовательный, и никакого ускорения вы не получите. Даже наоборот — произойдет замедление из-за накладных расходов на отдельные запуски testplane и формирование итогового отчета.
+If you do not have servers available that could be allocated for the parallel launch of several testplanes at once, then it makes no sense to split the tests into the appropriate number of chunks. If CI waits for a server to be released in order to run the next chunk of tests, then your parallel launch will turn into a sequential one, and you will not get any acceleration. On the contrary, there will be a slowdown due to the overhead of separate launches of Testplane and the merging of the final report.
-То есть параллельность — количество чанков, на которые вы разбиваете свои тесты — обязательно должна быть обеспечена соответствующим количеством доступного железа.
+That is, parallelism — the number of chunks into which you split your tests — must necessarily be provided with the appropriate amount of available hardware.
-### А как получить итоговый отчет? {#how_to_get_report}
+### And how to get the final report? {#how_to_get_report}
-Добавьте в свой проект плагин [html-reporter][html-reporter].
+Add to your project the [html-reporter][html-reporter] plugin.
-Используйте команду [merge-reports][merge-reports], которую [html-reporter][html-reporter] добавляет к [CLI][cli] testplane, чтобы слить все получившиеся в отдельных чанках отчеты в один итоговый отчет.
+Use the [merge-reports][merge-reports] command, which [html-reporter][html-reporter] adds to testplane's [cli][cli] to merge all the reports obtained in separate chunks into one final report.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-chunks
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
plugins: {
"testplane-chunks": {
- count: 7, // Разбить тесты на 7 порций (чанков)
- run: 1, // Запустить первую порцию
+ count: 7, // Split tests to 7 chunks
+ run: 1, // Run 1st chunk
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
- Можно не задавать параметр _run_ — в конфиге плагина, так как при параллельных запусках
- testplane для каждого запуска вы будете указывать свой номер порции _(run)_. И этот номер нужно
- будет передавать либо через опцию командной строки, либо через переменную окружения (см.
- [передачу параметров через CLI](#setup_by_cli)).
+ You don't have to set the _run_ parameter in the plugin config, since with parallel launches of
+ Testplane, you will specify your chunk number _(run)_ for each launch. And this number will need
+ to be passed either through a command line option or through an environment variable (see
+ [passing parameters via CLI](#setup_by_cli)).
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-count Number 1 Количество порций (чанков), на которые нужно разбить набор тестов.
-run Number 1 Номер чанка, тесты из которого нужно запустить.
+enabled Boolean true Enable / disable the plugin.
+count Number 1 The number of chunks into which the tests should be split.
+run Number 1 The number of the chunk to run the tests from.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--chunks-` для опций командной строки и `testplane_chunks_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command-line options or through environment variables during the launch of Testplane. Use the prefix `--chunks-` for command line options and `testplane_chunks_` for environment variables. For example:
```bash
npx testplane --chunks-count 10 --chunks-run 1 ...
@@ -101,13 +100,13 @@ npx testplane --chunks-count 10 --chunks-run 1 ...
testplane_chunks_count=10 testplane_chunks_run=1 npx testplane ...
```
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина testplane-chunks][testplane-chunks]
-- [Что такое идемпотентность?][idempotence]
+- [testplane-chunks plugin sources][testplane-chunks]
+- [What is idempotence?][idempotence]
[html-reporter]: ../../html-reporter/html-reporter-setup
[merge-reports]: ../../html-reporter/html-reporter-commands#merge-reports
[testplane-chunks]: https://github.com/gemini-testing/testplane-chunks
-[cli]: https://ru.wikipedia.org/wiki/Интерфейс_командной_строки
-[idempotence]: https://ru.wikipedia.org/wiki/Идемпотентность
+[cli]: https://en.wikipedia.org/wiki/Command-line_interface
+[idempotence]: https://en.wikipedia.org/wiki/Idempotence
diff --git a/docs/plugins/testplane-global-hook.mdx b/docs/plugins/testplane-global-hook.mdx
index 1dcaaae..b4f30b7 100644
--- a/docs/plugins/testplane-global-hook.mdx
+++ b/docs/plugins/testplane-global-hook.mdx
@@ -1,73 +1,73 @@
# testplane-global-hook
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-global-hook][testplane-global-hook], чтобы вынести общую логику из своих тестов в специальные обработчки для `beforeEach` и `afterEach` хуков.
+Use the [testplane-global-hook][testplane-global-hook] plugin to bring out the common logic from your tests into special handlers for `beforeEach` and `afterEach` hooks.
-Часто, перед тем как запустить очередной testplane-тест, нужно выполнить определенную подготовительную работу, например:
+Often, before running the next Testplane test, you need to do some preliminary setup, for example:
-- очистить все cookies;
-- почистить localStorage;
-- инициализировать какую-либо переменную теста.
+- clear all cookies;
+- clean up your local storage;
+- initialize some test's common variable.
-Чтобы не прописывать эти действия в каждом тесте, вы можете описать их в настройках плагина в виде функции для хука `beforeEach`.
+In order not to repeat these actions in each test, you can describe them in the plugin settings as an async-function for the `beforeEach` hook.
-Аналогично, после завершения основных проверок в testplane-тесте, вы можете захотеть всегда проверять наличие ошибок в клиентском коде, срабатывание нужных метрик и т. п.
+Similarly, after completing the basic checks in the Testplane test, you may want to always check for errors in the client code, the triggering of the necessary metrics, etc.
-Чтобы не прописывать эти действия в каждом тесте, вы можете описать их в настройках плагина в виде функции для хука `afterEach`.
+In order not to repeat these actions in each test, you can describe them in the plugin settings as an async-function for the `afterEach` hook.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-global-hook
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
plugins: {
"testplane-global-hook": {
beforeEach: async function () {
- await this.browser.deleteCookie(); // Например, мы хотим всегда очищать cookies перед запуском теста
+ await this.browser.deleteCookie(); // Say, we want to always clear cookies before running a test
},
afterEach: async function () {
await this.browser.execute(function () {
try {
- localStorage.clear(); // И всегда очищать за собой localStorage после завершения теста
+ localStorage.clear(); // And always clean up the localStorage after the test is completed
} catch (e) {}
});
},
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-beforeEach Function null Асинхронная функция-обработчик, которая будет выполняться перед запуском каждого теста.
-afterEach Function null Асинхронная функция-обработчик, которая будет выполняться после завершения каждого теста.
+enabled Boolean true Enable / disable the plugin.
+beforeEach Function null Asynchronous function that will be executed before running each test.
+afterEach Function null Asynchronous function that will be executed after each test is completed.
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина testplane-global-hook][testplane-global-hook]
-- [Команда browser.deleteCookie](../../commands/browser/deleteCookies)
-- [Команда browser.execute](../../commands/browser/execute)
-- [Команда browser.executeAsync](../../commands/browser/executeAsync)
+- [testplane-global-hook plugin sources][testplane-global-hook]
+- [browser.deleteCookie command](https://webdriver.io/docs/api/webdriver/#deletecookie)
+- [browser.execute command](https://webdriver.io/docs/api/browser/execute)
+- [browser.executeAsync command](https://webdriver.io/docs/api/browser/executeAsync)
[testplane-global-hook]: https://github.com/gemini-testing/testplane-global-hook
diff --git a/docs/plugins/testplane-image-minifier.mdx b/docs/plugins/testplane-image-minifier.mdx
index 1ec0006..1b31c9b 100644
--- a/docs/plugins/testplane-image-minifier.mdx
+++ b/docs/plugins/testplane-image-minifier.mdx
@@ -2,113 +2,113 @@ import Admonition from "@theme/Admonition";
# testplane-image-minifier
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-image-minifier][testplane-image-minifier], чтобы сжимать изображения (скриншоты) в своих тестах.
+Use the `testplane-image-minifier` plugin to compress images (screenshots) in your tests.
-Плагин поддерживает 8 степеней сжатия: от 0 (не применять сжатие) до 7 (максимальная степень сжатия).
+The plugin supports 8 compression levels: from 0 (do not apply compression) to 7 (maximum compression level).
-Сжатие происходит без потерь.
+Compression is lossless.
-### Как это работает? {#how_does_it_work}
+### How does it work? {#how_does_it_work}
-При запуске плагин подписывается на событие `UPDATE_REFERENCE`, которое testplane посылает в случаях:
+At startup, the plugin subscribes to the `UPDATE_REFERENCE` event, which Testplane sends in the following cases:
-- если пользователь запустил testplane, передав ей опцию `--update-refs`;
-- если пользователь обновляет или сохраняет скриншоты с помощью плагина [html-reporter][html-reporter].
+- if the user started Testplane by passing the `--update-refs` option;
+- if the user updates or saves screenshots using the [html-reporter][html-reporter] plugin.
-Когда в плагин `testplane-image-minifier` прилетает событие `UPDATE_REFERENCE`, он получает вместе с событием ссылку на само изображение. Далее плагин применяет к полученному изображению алгоритм сжатия с указанной в конфиге степенью сжатия. И сохраняет новое изображение на файловую систему. После этого разработчик может влить обновленные файлы в главную ветку своего проекта.
+When the `UPDATE_REFERENCE` event is received in the `testplane-image-minifier` plugin, it gets a link to the image itself along with the event. Next, the plugin applies a compression algorithm to the received image with the compression level specified in the config. And saves the new image to the file system. After that, the developer can merge the updated files into the main branch of his project.
-Для сжатия изображений плагин `testplane-image-minifier` использует пакет [optipng-bin][optipng-bin].
+To compress images, the `testplane-image-minifier` plugin uses the [optipng-bin][optipng-bin] package.
- Выбирая степень сжатия для изображений в своем проекте, помните, что вы выбираете между
- скоростью и местом, которое будут занимать ваши изображения на диске. Чем выше степень сжатия,
- тем меньше места будут занимать ваши изображения на диске, но дольше будут выполняться сами
- тесты. Так как перед тем как сравнивать изображения в тестах система должна будет их
- распаковать. Поэтому, чтобы получить приемлемое время прогона тестов, соизмеряйте выбираемую
- степень сжатия с мощностью серверов, на которых эти тесты будут выполняться.
+ When choosing the compression level for images in your project, remember that you are choosing
+ between the speed and the space that your images will occupy on disk. The higher the compression
+ ratio, the less space your images will occupy on disk, but the tests themselves will take
+ longer. Since before comparing the images in the tests, the system will have to unpack them.
+ Therefore, in order to get an acceptable test run time, match the selected compression ratio
+ with the capacity of the servers on which these tests will be running.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-image-minifier
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
plugins: {
"testplane-image-minifier": {
- enabled: true, // Включить плагин.
- compressionLevel: 7, // Максимальный уровень компрессии, сжатие займет какое-то время
+ enabled: true, // Enable the plugin.
+ compressionLevel: 7, // Maximum compression level, compression will take some time
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-compressionLevel Number 2 Степень сжатия изображения: от 0 до 7 (максимальная степень сжатия).
+enabled Boolean true Enable / disable the plugin.
+compressionLevel Number 2 Image compression level: from 0 to 7 (maximum compression level).
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--image-minifier-` для опций командной строки и `testplane_image_minifier_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command-line options or through environment variables during the launch of Testplane. Use the prefix `--image-minifier-` for command line options and `testplane_image_minifier_` for environment variables. For example:
```bash
-npx testplane --image-minifier-compression-level 5 ...
+npx testplane --image-minifier-compression-level 5
```
```bash
-testplane_image_minifier_compression_level = 5 npx testplane ...
+testplane_image_minifier_compression_level = 5 npx testplane
```
-## Отладка {#debugging}
+## Debugging {#debugging}
-Установите переменную окружения `DEBUG=testplane:image-minifier`, чтобы видеть сообщения о применении алгоритма сжатия для изображений в тестах.
+Set the environment variable `DEBUG=testplane:image-minifier` to see messages in the console about the application of the compression algorithm for images in tests.
```bash
DEBUG=testplane:image-minifier npx testplane --update-refs
```
-Пример, как это будет выглядеть в консоли:
+An example of how it will look in the console:
```bash
/path/to/reference/image.png compressed by 30%
```
-## Использование {#usage}
+## Usage {#usage}
-После добавления плагина в проект и настройки его параметров запустите testplane с опцией `--update-refs`:
+After adding the plugin to the project and configuring its parameters, run Testplane with the `--update-refs` option:
```bash
npx testplane --update-refs
```
-Изображения на файловой системе будут обновлены.
+The images on the file system will be updated.
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина testplane-image-minifier][testplane-image-minifier]
-- [Пакет для сжатия изображений optipng-bin][optipng-bin]
+- [testplane-image-minifier plugin sources][testplane-image-minifier]
+- [optipng-bin package to compress images][optipng-bin]
[testplane-image-minifier]: https://github.com/gemini-testing/testplane-image-minifier/
-[html-reporter]: ../../plugins/html-reporter
+[html-reporter]: ../html-reporter
[optipng-bin]: https://www.npmjs.com/package/optipng-bin
diff --git a/docs/plugins/testplane-retry-command.mdx b/docs/plugins/testplane-retry-command.mdx
index 6918f48..3b2d57c 100644
--- a/docs/plugins/testplane-retry-command.mdx
+++ b/docs/plugins/testplane-retry-command.mdx
@@ -2,19 +2,19 @@ import Admonition from "@theme/Admonition";
# testplane-retry-command
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-retry-command][testplane-retry-command], чтобы ретраить отдельные команды на низком уровне.
+Use the `testplane-retry-command` plugin to retry commands at low level.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-retry-command
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
@@ -37,77 +37,77 @@ module.exports = {
],
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-
-enabled Boolean true Включить / отключить плагин.
-rules Array _N/A_ Набор правил, в соответствии с которыми команды будут ретраиться. Обязательный параметр.
+
+enabled Boolean true Enable / disable the plugin.
+rules Array _N/A_ A set of rules according to which commands will be retried. Required parameter.
### rules {#setup_rules}
-Параметр `rules` представляет собой массив объектов. Каждый объект описывает отдельное правило для ретрая команд.
+The `rules` parameter is an array of objects. Each object describes a separate rule for retrying commands.
-Из каких параметров состоит это правило:
+Parameters this rule consists of:
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-
-[condition](#setup_rules_condition) String _N/A_ Условие для ретрая: _blank-screenshot_ или _assert-view-failed_. Подробнее см. ниже.
-[browsers](#setup_rules_browsers) String/RegExp/Array /.*/ Список браузеров, в которых нужно применять ретраи.
-[retryCount](#setup_rules_retry_count) Number 2 Количество ретраев.
-[retryInterval](#setup_rules_retry_interval) Number 100 Задержка перед каждым ретраем, в мс.
-[retryOnlyFirst](#setup_rules_retry_only_first) Boolean false Ретраить только первую команду в тесте. Опция актуальна только для условия _assert-view-failed_.
+
+[condition](#setup_rules_condition) String _N/A_ Condition to retry: _blank-screenshot_ or _assert-view-failed_. For more information, see below.
+[browsers](#setup_rules_browsers) String/RegExp/Array /.*/ A list of browsers in which retries should run.
+[retryCount](#setup_rules_retry_count) Number 2 The number of retries.
+[retryInterval](#setup_rules_retry_interval) Number 100 Delay before each retry, in ms.
+[retryOnlyFirst](#setup_rules_retry_only_first) Boolean false Retry only the first command in the test. This option is applied only at the _assert-view-failed_ condition.
### condition {#setup_rules_condition}
-Условие, при котором нужно ретраить. Всего доступны 2 значения:
+The condition under which you need to retry. There are 2 values available:
-- `blank-screenshot` — ретраить низкоуровневую команду снятия скриншота [takeScreenshot][take-screenshot], если в результате команды вернулся пустой скриншот;
-- `assert-view-failed` — ретраить высокоуровневую команду testplane для снятия скриншота [assertView][assert-view], если она упала.
+- `blank-screenshot` — retry the low-level screenshot command [takeScreenshot][take-screenshot] if an empty screenshot is returned as a result of the command;
+- `assert-view-failed` — retry testplane's high-level command [assertView][assert-view] to take a screenshot if it failed.
### browsers {#setup_rules_browsers}
-Список браузеров, в которых нужно применять низкоуровневые ретраи для команд. Можно задавать как строку (если это один браузер), регулярное выражение или массив строк или регулярных выражений. По умолчанию, параметр `browsers` имеет значение `/.*/`, под которое попадают все браузеры.
+A list of browsers in which you need to apply low-level retries for commands. It can be set as a string (if it is one browser), a regular expression, or an array of strings/regular expressions. By default, the `browsers` parameter has the value `/.*/`, which all browsers fall under.
### retryCount {#setup_rules_retry_count}
-Параметр определяет сколько раз нужно ретраить команду, если соблюдено условие, заданное в параметре `condition`.
+The parameter determines how many times the command needs to be retried if the condition specified in the `condition` parameter is met.
### retryInterval {#setup_rules_retry_interval}
-Параметр задает время в миллисекундах, которое надо подождать, прежде чем попытаться снова повторить команду.
+The parameter specifies the time in milliseconds to wait before trying to repeat the command again.
- Будьте осторожны, устанавливая значение для данного параметра, так как слишком большое значение
- может драматически снизить скорость ваших тестов.
+ Be careful when setting a value for this parameter, as too large a value can dramatically reduce
+ the speed of your tests.
### retryOnlyFirst {#setup_rules_retry_only_first}
-Разрешает ретраить только первую команду [assertView][assert-view] в тесте, если установлено значение `true`. Для других условий этот параметр не используется.
+Allows to retry only the first `assertView` command in the test if the value is set to `true`. This parameter is not used for other conditions.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--retry-command-` для опций командной строки и `testplane_retry_command_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command-line options or through environment variables during the launch of Testplane. Use the prefix `--retry-command-` for command line options and `testplane_retry_command_` for environment variables. For example:
```bash
npx testplane --retry-command-count 3
diff --git a/docs/plugins/testplane-retry-progressive.mdx b/docs/plugins/testplane-retry-progressive.mdx
index 70fbded..50c4cc4 100644
--- a/docs/plugins/testplane-retry-progressive.mdx
+++ b/docs/plugins/testplane-retry-progressive.mdx
@@ -1,46 +1,31 @@
# testplane-retry-progressive
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-retry-progressive][testplane-retry-progressive], чтобы дополнительно прогонять тесты, если ошибки, с которыми они упали соответствуют заданному набору шаблонов.
+Use the `testplane-retry-progressive` plugin to additionally retry tests if the errors with which they fail correspond to a given set of patterns.
-Для чего это может понадобиться?
+What might it be needed for?
-Тесты могут падать не только из-за ошибок разработчика, гонок между скриптами, исполняющимися на веб-странице, но и по инфраструктурным причинам. Например, когда моргает сеть, вовремя не отдается браузер, временные проблемы с DNS и т. п.
+Tests can fail not only because of developer errors, races between scripts executed on a web page, but also for infrastructural reasons. For example, when the network blinks, the browser is not given in time, temporary problems with DNS, etc.
-
-
-См. примеры шаблонов для таких ошибок
-
-
-
-- Browser request was cancelled
-- A window size operation failed because the window is not currently available
-- chrome not reachable
-- Tried to run command without establishing a connection
-- No such driver
-- no such window
-- Session timed out or not found
-- Reached error page
-- getaddrinfo ENOTFOUND
-- Browsing context has been discarded
-- Cannot launch browser
-- Failed to decode response from marionette
-- session deleted because of page crash
-- Couldn't connect to selenium server
-
+ See examples of patterns for such errors * Browser request was cancelled * A
+ window size operation failed because the window is not currently available * chrome not
+ reachable * Tried to run command without establishing a connection * No such driver * no such
+ window * Session timed out or not found * Reached error page * getaddrinfo ENOTFOUND * Browsing
+ context has been discarded * Cannot launch browser * Failed to decode response from marionette *
+ session deleted because of page crash * Couldn't connect to selenium server
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-retry-progressive
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
@@ -57,62 +42,62 @@ module.exports = {
],
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-extraRetry Number 5 Количество раз, которые нужно повторно прогнать тест, если он падает с ошибкой, подходящей под один из шаблонов _errorPatterns_.
-errorPatterns Array `[ ]` Список шаблонов, под один из которых должна подойти ошибка, чтобы плагин запустил тест повторно. Подробнее см. ниже.
+enabled Boolean true Enable / disable the plugin.
+extraRetry Number 5 The number of times you need to retry the test if it crashes with an error that matches one of the _errorPatterns_.
+errorPatterns Array `[ ]` A list of patterns, one of which an error should match in order for the plugin to retry the test. For more information, see below.
### errorPatterns {#setup_error_patterns}
-Каждый шаблон в массиве `errorPatterns` представляет собой либо объект вида:
+Each pattern in the `errorPatterns` array is either an object of the form:
```javascript
{
- name: 'Понятное сообщение для пользователя, которое будет выводиться в консоль',
- pattern: 'Шаблон ошибки, который может задаваться в том числе как строка для регулярного выражения'
+ name: 'A clear message for the user that will be output to the console',
+ pattern: 'An error pattern that can be set, among other things, as a string for a regular expression'
}
```
-либо строку, которая будет проинтерпретирована плагином как объект вида:
+or a string that will be interpreted by the plugin as an object of the form:
```javascript
{
- name: 'ваша строка',
- pattern: 'ваша строка'
+ name: 'your string',
+ pattern: 'your string'
}
```
-Последний вариант удобен, если формат для консоли и шаблон ошибки полностью совпадают.
+The latter option is convenient if the readable format for the console and the error pattern completely match.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--retry-progressive-` для опций командной строки и `testplane_retry_progressive_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command-line options or through environment variables during the launch of Testplane. Use the prefix `--retry-progressive-` for command line options and `testplane_retry_progressive_` for environment variables. For example:
```bash
-npx testplane --retry-progressive-extra-retry 3 ...
+npx testplane --retry-progressive-extra-retry 3
```
```bash
-testplane_retry_progressive_extra_retry=3 npx testplane ...
+testplane_retry_progressive_extra_retry=3 npx testplane
```
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
- [Исходники плагина testplane-retry-progressive][testplane-retry-progressive]
diff --git a/docs/plugins/testplane-test-repeater.mdx b/docs/plugins/testplane-test-repeater.mdx
index d76de34..249eec9 100644
--- a/docs/plugins/testplane-test-repeater.mdx
+++ b/docs/plugins/testplane-test-repeater.mdx
@@ -1,20 +1,20 @@
# testplane-test-repeater
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [testplane-test-repeater][testplane-test-repeater], чтобы запустить один и тот же тест (или группу тестов) требуемое количество раз.
+Use the [testplane-test-repeater][testplane-test-repeater] plugin to run the same test (or group of tests) the required number of times.
-Данный плагин может пригодиться в тех случаях, когда нужно убедиться в стабильности написанных тестов. Плагин гарантирует, что тесты будут запущены столько раз, сколько вы задали, независимо от результатов их прогона в каждой попытке. Кроме того, плагин позволяет запускать тесты каждый раз в новой сессии браузера. Это исключает влияние деградации браузера или еще какие-либо побочные эффекты, которые могли бы возникнуть при повторных прогонах в одной и той же сессии браузера.
+This plugin can be useful in cases when you need to make sure that the written tests are stable. The plugin guarantees that the tests will be run as many times as you set, regardless of the results of their run in each attempt. In addition, the plugin allows you to run tests every time in a new browser session. This eliminates the impact of browser degradation or any other side effects that could occur during repeated runs in the same browser session.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D testplane-test-repeater
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
@@ -27,56 +27,54 @@ module.exports = {
uniqSession: true,
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-enabled Boolean true Включить / отключить плагин.
-repeat Number 0 Сколько раз нужно запустить тест, независимо от результата от его прогона.
-minRepeat Number 0 Минимальное количество раз, которые можно запустить тест.
-maxRepeat Number Infinity Максимальное количество раз, которые можно запустить тест.
-uniqSession Boolean true Запускать каждый тест в уникальной сессии браузера.
+enabled Boolean true Enable / disable the plugin.
+repeat Number 0 How many times you need to run the test, regardless of the result of its run.
+minRepeat Number 0 The minimum number of times the test can be run.
+maxRepeat Number Infinity The maximum number of times the test can be run.
+uniqSession Boolean true Run each test in a unique browser session.
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
-Все параметры плагина, которые можно определить в конфиге, можно также передать в виде опций командной строки или через переменные окружения во время запуска testplane. Используйте префикс `--test-repeater-` для опций командной строки и `testplane_test_repeater_` — для переменных окружения. Например:
+All plugin parameters that can be defined in the config can also be passed as command line options or through environment variables during Testplane startup. Use the prefix `--test-repeater-` for command line options and `testplane_test_repeater_` for environment variables. For example:
```bash
-npx testplane --test-repeater-repeat 5 ...
+npx testplane --test-repeater-repeat 5
```
```bash
-testplane_test_repeater_repeat=5 npx testplane ...
+testplane_test_repeater_repeat=5 npx testplane
```
-## Использование {#usage}
+## Usage {#usage}
-### Опция --repeat {#usage_option_repeat}
+### Option --repeat {#usage_option_repeat}
-Также плагин добавляет к [CLI][cli] testplane специальную опцию `--repeat`, с помощью которой можно запустить тест нужное количество раз более удобным образом. Например:
+The plugin also adds a special `--repeat` option to Testplane's [CLI][cli], with which you can run the test the right number of times in a more convenient way. For example:
```bash
npx testplane --repeat 5
```
-[cli]: https://ru.wikipedia.org/wiki/Интерфейс_командной_строки
+## Useful links {#useful_links}
-## Полезные ссылки {#useful_links}
-
-- [Исходники плагина testplane-test-repeater][testplane-test-repeater]
+- [testplane-test-repeater plugin sources][testplane-test-repeater]
[testplane-test-repeater]: https://github.com/gemini-testing/testplane-test-repeater
-[cli]: https://ru.wikipedia.org/wiki/Интерфейс_командной_строки
+[cli]: https://en.wikipedia.org/wiki/Command-line_interface
diff --git a/docs/plugins/url-decorator.mdx b/docs/plugins/url-decorator.mdx
index 855c56c..7940e30 100644
--- a/docs/plugins/url-decorator.mdx
+++ b/docs/plugins/url-decorator.mdx
@@ -5,19 +5,19 @@ import Admonition from "@theme/Admonition";
# url-decorator
-## Обзор {#overview}
+## Overview {#overview}
-Используйте плагин [url-decorator][url-decorator], чтобы автоматически дополнять урлы в testplane-тестах нужными query-параметрами.
+Use the [url-decorator][url-decorator] plugin to automatically add the necessary query parameters to the urls in Testplane tests.
-## Установка {#install}
+## Install {#install}
```bash
npm install -D url-decorator
```
-## Настройка {#setup}
+## Setup {#setup}
-Необходимо подключить плагин в разделе `plugins` конфига `testplane`:
+Add the plugin to the `plugins` section of the `testplane` config:
```javascript
module.exports = {
@@ -31,41 +31,41 @@ module.exports = {
value: "foo",
},
- // другие query-параметры...
+ // other query parameters...
],
},
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-### Расшифровка параметров конфигурации {#setup_description}
+### Description of configuration parameters {#setup_description}
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-[enabled](#setup_enabled) Boolean true Включить / отключить плагин.
-[url](#setup_url) Object _N/A_ Объект с описанием query-параметров, которые должны добавляться к каждому урлу в тесте.
+[enabled](#setup_enabled) Boolean true Enable / disable the plugin.
+[url](#setup_url) Object _N/A_ An object with a description of query parameters that should be added to each url in the test.
### enabled {#setup_enabled}
-Включить или отключить плагин. По умолчанию: `true`.
+Enable or disable the plugin. By default: `true`.
### url {#setup_url}
-Параметр `url` представляет собой объект с полем `query`, значением которого может быть как массив, так и объект.
+The `url` parameter is an object with a `query` field, the value of which can be either an array or an object.
-
+
```javascript
module.exports = {
plugins: {
@@ -74,33 +74,33 @@ module.exports = {
url: {
query: [
{
- name: '', // укажите имя query-параметра
- value: '', // укажите значение query-параметра
- mode: 'concat', // или 'override'
- browsers: /.*/ // по умолчанию: для всех браузеров
+ name: '', // specify the name of the query parameter
+ value: '', // specify the value of the query parameter
+ mode: 'concat', // or 'override'
+ browsers: /.*/ // by default: for all browsers
},
{
- name: '', // укажите имя query-параметра
- value: '', // укажите значение query-параметра
- mode: 'concat', // или 'override'
- browsers: /.*/ // по умолчанию: для всех браузеров
+ name: '', // specify the name of the query parameter
+ value: '', // specify the value of the query parameter
+ mode: 'concat', // or 'override'
+ browsers: /.*/ // by default: for all browsers
},
- // остальные query-параметры...
+ // other query parameters...
]
}
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
-
+
```javascript
module.exports = {
plugins: {
@@ -108,26 +108,26 @@ module.exports = {
enabled: true,
url: {
query: {
- '': { // укажите имя query-параметра
- value: '', // укажите значение query-параметра
- mode: 'concat', // или 'override'
- browsers: /.*/ // по умолчанию: для всех браузеров
+ '': { // specify the name of the query parameter
+ value: '', // specify the value of the query parameter
+ mode: 'concat', // or 'override'
+ browsers: /.*/ // by default: for all browsers
},
- '': { // укажите имя query-параметра
- value: '', // укажите значение query-параметра
- mode: 'concat', // или 'override'
- browsers: /.*/ // по умолчанию: для всех браузеров
+ '': { // specify the name of the query parameter
+ value: '', // specify the value of the query parameter
+ mode: 'concat', // or 'override'
+ browsers: /.*/ // by default: for all browsers
},
- // остальные query-параметры...
+ // other query parameters...
}
},
},
- // другие плагины testplane...
+ // other Testplane plugins...
},
- // другие настройки testplane...
+ // other Testplane settings...
};
```
@@ -135,41 +135,41 @@ module.exports = {
-Здесь query-параметр — это объект со следующими полями:
+Here the query parameter is an object with the following fields:
-**Параметр** **Тип** **По умолчанию** **Описание**
+**Parameter** **Type** **Default value** **Description**
-[name](#setup_query_param_name) String _N/A_ Имя query-параметра. Если _query_ задается как объект, то это поле не указывается, так как сам ключ является именем query-параметра.
-[value](#setup_query_param_value) String или Number или Array _N/A_ Значение query-параметра.
-[mode](#setup_query_param_mode) String "concat" Режим объединения параметров: _concat_ или _override_.
-[browsers](#setup_query_param_browsers) String или RegExp или Array _N/A_ Список браузеров, к которым будет применен query-параметр.
+[name](#setup_query_param_name) String _N/A_ Name of the query parameter. If _query_ is set as an object, then this field is not specified, since the key itself is the name of the query parameter.
+[value](#setup_query_param_value) String or Number or Array _N/A_ The value of the query parameter.
+[mode](#setup_query_param_mode) String "concat" The mode of combining parameters: _concat_ or _override_.
+[browsers](#setup_query_param_browsers) String or RegExp or Array _N/A_ The list of browsers to which the query parameter will be applied.
#### name {#setup_query_param_name}
-Имя query-параметра. Если `query` задается как объект, то это поле не указывается, так как сам ключ является именем query-параметра.
+Name of the query parameter. If `query` is set as an object, then this field is not specified, since the key itself is the name of the query parameter.
#### value {#setup_query_param_value}
-Значение query-параметра. Может задаваться как строка, число или массив строк и/или чисел.
+The value of the query parameter. It can be specified as a string, a number, or an array of strings and/or numbers.
#### mode {#setup_query_param_mode}
-Режим объединения параметров. Возможны 2 значения: `concat` _(склеивать параметры)_ и `override` _(перетирать параметры)_. По умолчанию: `concat`.
+The mode of combining parameters. There are 2 possible values: `concat` _(concat parameters)_ and `override` _(override parameters)_. By default: `concat`.
-**Режим concat**
+**Concat mode**
-Например:
+For example:
-- вы хотите добавить query-параметр `nick`, который уже есть в урле вашего теста `http://localhost/test/?nick=bilbo`;
-- при этом вы не хотите, чтобы дополнительное значение параметра `nick` перетерло то значение, что уже есть в урле.
+- you want to add the query parameter `nick`, which is already in the test url: `http://localhost/test/?nick=bilbo`;
+- at the same time, you do not want the additional value of the `nick` parameter to erase the value that is already in the url.
-В этом случае вам нужно указать для параметра `mode: 'concat'` или вообще не указывать `mode` (воспользовавшись режимом по умолчанию):
+In this case, you need to specify `mode: 'concat'` for the parameter or not specify `mode` at all (using the default mode):
```javascript
url: {
@@ -177,15 +177,15 @@ url: {
{
name: "nick",
value: "torin",
- mode: "concat", // или можно вообще не указывать mode, так как по умолчанию mode = 'concat'
+ mode: "concat", // or skip it as the default mode is 'concat'
},
];
}
```
-Тогда результирующим урлом в тесте будет: `http://localhost/test/?nick=bilbo&nick=torin`.
+Then the resulting url in the test will be: `http://localhost/test/?nick=bilbo&nick=torin`.
-Также вы можете указать в значении `value` массив значений для параметра `nick`:
+You can also specify an array of values for the `nick` parameter in the `value` value:
```javascript
url: {
@@ -193,17 +193,17 @@ url: {
{
name: "nick",
value: ["torin", "gloin"],
- mode: "concat", // или можно вообще не указывать mode, так как по умолчанию mode = 'concat'
+ mode: "concat", // or skip it as the default mode is 'concat'
},
];
}
```
-Тогда результирующим урлом в тесте будет: `http://localhost/test/?nick=bilbo&nick=torin&nick=gloin`.
+Then the resulting url in the test will be: `http://localhost/test/?nick=bilbo&nick=torin&nick=gloin`.
-**Режим override**
+**Override mode**
-Если же вы хотите перетереть параметр `nick`, то нужно установить режим `override`:
+If you want to erase the `nick` parameter, then you need to set the `override` mode:
```javascript
url: {
@@ -217,16 +217,16 @@ url: {
}
```
-Тогда результирующим урлом в тесте будет: `http://localhost/test/?nick=torin`.
+Then the resulting url in the test will be: `http://localhost/test/?nick=torin`.
#### browsers {#setup_query_param_browsers}
-Браузер или список браузеров, или паттерн регулярного выражения для браузеров, к которым нужно применять заданные query-параметры. Если параметр `browsers` не указан, то query-параметры будут применяться для всех браузеров.
+A browser or a list of browsers, or a regular expression pattern for browsers to which the specified query parameters should be applied. If the parameter `browsers` is not specified, the query parameters will be applied for all browsers.
-Ниже приведены примеры задания параметра `browsers` всеми способами:
+Below are examples of setting the `browsers` parameter in all ways:
-
+
```javascript
url: {
query: [
@@ -240,7 +240,7 @@ url: {
```
-
+
```javascript
url: {
query: [
@@ -268,7 +268,7 @@ url: {
```
-
+
```javascript
url: {
query: [
@@ -284,46 +284,46 @@ url: {
-### Передача параметров через CLI {#setup_by_cli}
+### Passing parameters via the CLI {#setup_by_cli}
#### HERMIONE*URL_QUERY*\*
-Чтобы передать дополнительные query-параметры, можно воспользоваться переменными окружения следующего вида:
+To pass additional query parameters, you can use environment variables of the following type:
```bash
-HERMIONE_URL_QUERY_<имя query-параметра>
+HERMIONE_URL_QUERY_
```
-Например, в вашем тесте открывается урл `http://localhost/test/?tool=testplane`, а вы хотите добавить к урлу query-параметр `text` со значением `ololo` с помощью переменной окружения:
+For example, your test opens the url `http://localhost/test/?tool=testplane`, and you want to add the query parameter `text` with the value `ololo` to the url using the environment variable:
```bash
HERMIONE_URL_QUERY_TEXT=ololo testplane ...
```
-После этого в вашем тесте будет открываться урл вида: `http://localhost/test/?tool=testplane&text=ololo`.
+After that, your test will open the url of the following form: `http://localhost/test/?tool=testplane&text=ololo`.
#### HERMIONE_URL_CUSTOM_QUERIES
-Если среди ваших query-параметров есть параметры, которые нельзя выразить в виде переменной окружения (например, `foo-bar`), то вы можете добавить эти параметры через переменную окружения `HERMIONE_URL_CUSTOM_QUERIES`.
+If there are parameters among your query parameters that cannot be expressed as an environment variable (for example, `foo-bar`), then you can add these parameters via the environment variable `HERMIONE_URL_CUSTOM_QUERIES`.
-В качестве значения используйте строку вида `=;=;`.
+As a value, use a string of the form `=;=;`.
-Например:
+For example:
```bash
HERMIONE_URL_CUSTOM_QUERIES='foo-bar=baz;qux=1' testplane ...
```
-Тогда в вашем тесте будет открываться урл вида: `http://localhost/test/?foo-bar=baz&qux=1`.
+Then your test will open the url of the following form: `http://localhost/test/?foo-bar=baz&qux=1`.
- Переменные окружения имеют более высокий приоритет, чем значения соответствующих переменных в
- конфиге плагина.
+ Environment variables have a higher priority than the values of the corresponding variables in
+ the plugin config.
-## Полезные ссылки {#useful_links}
+## Useful links {#useful_links}
-- [Исходники плагина url-decorator][url-decorator]
+- [url-decorator plugin sources][url-decorator]
[url-decorator]: https://github.com/gemini-testing/url-decorator
[internal-url-decorator]: ../../plugins/internal-url-decorator
diff --git a/docs/quickstart/index.mdx b/docs/quickstart/index.mdx
index a00aa62..4d4f5af 100644
--- a/docs/quickstart/index.mdx
+++ b/docs/quickstart/index.mdx
@@ -1,40 +1,40 @@
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
-# Быстрый старт
+# Quick Start
-## Установка {#install}
+## Installation {#install}
-Запустите установщик testplane с помощью `npm`.
+Run the Testplane installer using `npm`.
```bash
npm init testplane@latest YOUR_PROJECT_PATH
```
-Если вы не хотите использовать дефолты при инициализации проекта, а настроить его с помощью визарда, укажите опцию `-v`.
+If you do not want to use the defaults when initializing the project and want to configure it using a wizard, specify the `-v` option.
-## Настройка {#setup}
+## Setup {#setup}
-После выполнения команды, указанной выше, в корне проекта сгенерится файл `.testplane.conf.js` с базовой настройкой. В зависимости от того, каким протоколом вы хотите воспользоваться, есть 2 варианта настройки (по умолчанию для браузера будет указан протокол CDP).
+After executing the command mentioned above, a `.testplane.conf.js` file with basic settings will be generated at the root of the project. Depending on which protocol you want to use, there are 2 configuration options (by default, the CDP protocol will be specified for the browser).
```javascript
- module.exports = {
- sets: {
- desktop: {
- files: 'tests/desktop'
- }
- },
-
- browsers: {
- chrome: {
- automationProtocol: 'devtools',
- desiredCapabilities: {
- browserName: 'chrome'
- }
- }
- }
+module.exports = {
+ sets: {
+ desktop: {
+ files: 'tests/desktop'
+ }
+ },
+
+ browsers: {
+ chrome: {
+ automationProtocol: 'devtools',
+ desiredCapabilities: {
+ browserName: 'chrome'
+ }
+ }
+ }
};
@@ -68,9 +68,9 @@ module.exports = {
-## Создание теста {#test_creation}
+## Creating a Test {#test_creation}
-Перейдите в файл `tests/example.testplane.js` с тестом. В нем вы можете посмотреть пример теста или написать свой. Например,
+Navigate to the `tests/example.testplane.js` file with a test. Here you can see a test example or write your own. For example,
```javascript
describe("github", async function () {
@@ -83,21 +83,21 @@ describe("github", async function () {
});
```
-## Запуск теста {#test_running}
+## Running a Test {#test_running}
-Теперь вы можете запустить тесты:
+Now you can run the tests:
```bash
npx testplane
```
-или запустить gui-режим и запустить тест через интерфейс в браузере
+or launch the GUI mode and run the test through the browser interface
```bash
npx testplane gui
```
-Если при настройке конфига вы выбрали `WebDriver protocol`, то перед запуском тестов у вас должен быть запущен (в отдельной вкладке) `selenium-standalone`:
+If you chose the `WebDriver protocol` during the config setup, you should have `selenium-standalone` running (in a separate tab) before running the tests:
```bash
selenium-standalone start
diff --git a/docs/reference/testplane-api.mdx b/docs/reference/testplane-api.mdx
index e102ea6..81cd2e5 100644
--- a/docs/reference/testplane-api.mdx
+++ b/docs/reference/testplane-api.mdx
@@ -1,8 +1,8 @@
# API testplane
-С помощью API testplane вы можете использовать её в своих скриптах или сборочных инструментах.
+With the Testplane API, you can use it in your scripts or build tools.
-Для этого вы должны подключить модуль testplane и создать её инстанс:
+To do this, you must include the testplane module and create its instance:
```javascript
const Testplane = require("testplane");
@@ -12,47 +12,47 @@ const config = require("./testplane.conf.js");
const testplane = new Testplane(config);
```
-Далее вам будут доступны следующие параметры и методы:
+Then you will have access to the following parameters and methods:
-**Имя** **Тип** **Описание**
+**Name** **Type** **Description**
-[config](#testplane_config) Object или String Объект с конфигом testplane или путь к конфигурационному файлу, относительно рабочей папки.
-[events](#testplane_events) Object [События testplane][testplane-events], на которые можно подписаться.
-[errors](#testplane_errors) Object Ошибки, которые может возвращать testplane.
-[intercept](#testplane_intercept) Function Функция, с помощью которой можно подписаться на [перехват событий][testplane-events-interception] testplane.
-[init](#testplane_init) Method Инициализирует инстанс testplane, загружает все плагины и т. д.
-[run](#testplane_run) Method Запускает прогон тестов, расположенных по указанным путям.
-[addTestToRun](#testplane_add_test_to_run) Method Добавляет тест к текущему запуску.
-[readTests](#testplane_read_tests) Method Возвращает объект типа [TestCollection](#test_collection).
-[isFailed](#testplane_is_failed) Method Возвращает `true` или `false` в зависимости от того, была ли ошибка или падение теста при запуске тестов.
-[isWorker](#testplane_is_worker) Method Возвращает `true`, если метод был вызван из воркера testplane.
-[halt](#testplane_halt) Method Аварийно завершает прогон тестов в случае критической ошибки.
+[config](#testplane_config) Object or String A testplane config object or a path to the configuration file, relative to the working folder.
+[events](#testplane_events) Object [testplane Events][testplane-events] that you can subscribe to.
+[errors](#testplane_errors) Object Errors that testplane can return.
+[intercept](#testplane_intercept) Function A function that allows you to subscribe to testplane [event interception][testplane-events-interception].
+[init](#testplane_init) Method Initializes the testplane instance, loads all plugins, etc.
+[run](#testplane_run) Method Runs tests located at the specified paths.
+[addTestToRun](#testplane_add_test_to_run) Method Adds a test to the current run.
+[readTests](#testplane_read_tests) Method Returns an object of type [TestCollection](#test_collection).
+[isFailed](#testplane_is_failed) Method Returns `true` or `false` depending on whether there was an error or test failure during the test run.
+[isWorker](#testplane_is_worker) Method Returns `true` if the method was called from a testplane worker.
+[halt](#testplane_halt) Method Forcibly terminates the test run in case of a critical error.
## config {#testplane_config}
-Объект с конфигом testplane или путь к конфигурационному файлу, относительно рабочей папки: `process.cwd()`.
+A testplane config object or a path to the configuration file, relative to the working folder: `process.cwd()`.
## events {#testplane_events}
-[События testplane][testplane-events], на которые можно подписаться.
+[testplane Events][testplane-events] that you can subscribe to.
-Пример использования объекта `testplane.events` в плагине testplane:
+Example of using the `testplane.events` object in a testplane plugin:
```javascript
testplane.on(testplane.events.INIT, async () => {
- console.info("Выполняется обработка события INIT...");
+ console.info("Processing INIT event...");
});
```
## errors {#testplane_errors}
-Testplane может возвращать ошибки следующего типа:
+Testplane can return errors of the following types:
- [CoreError](#testplane_errors_core_error)
- [CancelledError](#testplane_errors_cancelled_error)
@@ -65,9 +65,9 @@ Testplane может возвращать ошибки следующего ти
### CoreError {#testplane_errors_core_error}
-Ошибка `CoreError` возвращается в случае неудачной калибровки пустой страницы (`about:blank`) в браузере.
+The `CoreError` is returned in the case of a failed calibration of an empty page (`about:blank`) in the browser.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
Could not calibrate. This could be due to calibration page has failed to open properly
@@ -75,9 +75,9 @@ Could not calibrate. This could be due to calibration page has failed to open pr
### CancelledError {#testplane_errors_cancelled_error}
-Ошибка `CancelledEror` возвращается в случае аварийного завершения по команде [halt](#testplane_halt).
+The `CancelledError` is returned in case of emergency termination by the [halt](#testplane_halt) command.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
Browser request was cancelled
@@ -85,9 +85,9 @@ Browser request was cancelled
### ClientBridgeError {#testplane_errors_client_bridge_error}
-Ошибка `ClientBridgeError` возвращается в случае неудачной инъекции кода JavaScript на стороне клиента (браузера). Testplane осуществляет инъекцию кода с помощью команды [execute][wdio-execute] WebDriverIO.
+The `ClientBridgeError` is returned in case of a failed JavaScript code injection on the client side (browser). Testplane performs code injection using the [execute][wdio-execute] command of WebDriverIO.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
Unable to inject client script
@@ -95,9 +95,9 @@ Unable to inject client script
### HeightViewportError {#testplane_errors_height_viewport_error}
-Ошибка `HeightViewportError` возвращается при попытке снять скриншот для области, чья нижняя граница не влезает в область вьюпорта.
+The `HeightViewportError` is returned when trying to capture a screenshot of an area whose bottom bound does not fit into the viewport.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
Can not capture the specified region of the viewport.
@@ -108,13 +108,13 @@ Element position: , ; size: , , .
```
-При этом сообщение подсказывает пользователю testplane, какие настройки нужно установить в конфиге testplane, чтобы иметь возможность снять скриншот для указанной области.
+The message advises the testplane user on what settings to configure in testplane to be able to capture the screenshot of the specified area.
### OffsetViewportError {#testplane_errors_offset_viewport_error}
-Ошибка `OffsetViewportError` возвращается при попытке снять скриншот для области, чьи границы слева, справа или наверху выходят за пределы вьюпорта.
+The `OffsetViewportError` is returned when trying to capture a screenshot of an area whose left, right, or top bounds go beyond the viewport.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
Can not capture the specified region of the viewport.
@@ -128,13 +128,13 @@ But if viewport overflow is expected behavior then you can use
option "allowViewportOverflow" in "assertView" command.
```
-При этом сообщение подсказывает пользователю testplane, какие настройки нужно установить в конфиге testplane, чтобы иметь возможность снять скриншот для указанной области.
+The message advises the testplane user on what settings to configure in testplane to be able to capture the screenshot of the specified area.
### AssertViewError {#testplane_errors_assert_view_error}
-Ошибка `AssertViewError` возвращается при неудачной попытке снять скриншот.
+The `AssertViewError` is returned in case of a failed attempt to capture a screenshot.
-Ошибка при этом может содержать одно из следующих сообщений, в зависимости от причины падения:
+The error can contain one of the following messages, depending on the cause of the failure:
```
duplicate name for "" state
@@ -150,32 +150,32 @@ element ("") still not existing after " state
```
-Кроме этого, ошибка `ImageDiffError` содержит следующие данные:
+Additionally, the `ImageDiffError` contains the following data:
-**Свойство** **Описание**
+**Property** **Description**
-stateName имя состояния, для которого делался скриншот
-currImg ссылка на актуальное изображение
-refImg ссылка на эталонное изображение
-diffOpts настройки определения диффа
-diffBounds границы областей с диффами на изображении
-diffClusters кластеры с диффами на изображении
+stateName the name of the state for which the screenshot was taken
+currImg link to the actual image
+refImg link to the reference image
+diffOpts settings for detecting the diff
+diffBounds bounds of areas with diffs on the image
+diffClusters clusters with diffs on the image
-Подробнее про [diffBounds][diff-bounds] и [diffClusters][diff-clusters] читайте в документации пакета [looks-same][looks-same].
+Read more about [diffBounds][diff-bounds] and [diffClusters][diff-clusters] in the [looks-same][looks-same] package documentation.
```
exports.handleImageDiff = (currImg, refImg, state, opts) => {
@@ -194,35 +194,35 @@ exports.handleImageDiff = (currImg, refImg, state, opts) => {
### NoRefImageError {#testplane_errors_no_ref_image_error}
-Ошибка `NoRefImageError` возвращается из команды `assertView`, если при снятии и сравнении скриншота testplane не находит эталонный скриншот на файловой системе.
+The `NoRefImageError` is returned from the `assertView` command if testplane does not find the reference screenshot on the filesystem when capturing and comparing the screenshot.
-Ошибка при этом содержит следующее сообщение:
+The error includes the following message:
```
can not find reference image at for "" state
```
-Кроме этого, ошибка `NoRefImageError` содержит следующие данные:
+Additionally, the `NoRefImageError` contains the following data:
-**Свойство** **Описание**
+**Property** **Description**
-stateName имя состояния, для которого делался скриншот
-currImg ссылка на актуальное изображение
-refImg ссылка на эталонное изображение
+stateName the name of the state for which the screenshot was taken
+currImg link to the actual image
+refImg link to the reference image
## intercept {#testplane_intercept}
-Функция, с помощью которой можно подписаться на [перехват событий][testplane-events-interception] testplane.
+A function that allows you to subscribe to testplane [event interception][testplane-events-interception].
-Первым аргументом функция принимает событие, которое нужно перехватывать, а вторым — обработчик события.
+The first argument is the event to intercept, and the second is the event handler.
-Например:
+For example:
```javascript
testplane.intercept(testplane.events.TEST_FAIL, ({ event, data }) => {
@@ -230,13 +230,13 @@ testplane.intercept(testplane.events.TEST_FAIL, ({ event, data }) => {
});
```
-Подробнее о перехвате событий читайте в разделе «[Про перехват событий][testplane-events-interception]».
+Read more about event interception in the section "[About Event Interception][testplane-events-interception]".
## init {#testplane_init}
-Инициализирует инстанс testplane, загружает все плагины и т. д.
+Initializes the testplane instance, loads all plugins, etc.
-### Пример вызова
+### Example Call
```javascript
await testplane.init();
@@ -244,93 +244,93 @@ await testplane.init();
## run {#testplane_run}
-Запускает прогон тестов, расположенных по заданным путям.
+Runs tests located at the specified paths.
-Возвращает `true`, если прогон тестов завершился успешно, и `false` — если не успешно.
+Returns `true` if the test run was successful and `false` if it was not.
-### Пример вызова
+### Example Call
```javascript
const success = await testplane.run(testPaths, options);
```
-### Параметры вызова
+### Call Parameters
-Все параметры метода `testplane.run()` являются необязательными.
+All parameters of the `testplane.run()` method are optional.
-**Имя параметра** **Тип** **Описание**
+**Parameter Name** **Type** **Description**
-testPaths String[] или TestCollection Пути к тестам относительно рабочей папки _(process.cwd())_ или объект типа _TestCollection_, который возвращается методом _readTests_. Если пути не указаны, то будут запущены все тесты.
-options Object Объект с опциями запуска.
-options.reporters String[] Репортеры для результатов прогона тестов.
-options.browsers String[] Браузеры, в которых нужно запустить тесты.
-options.sets String[] Сеты, в которых нужно запустить тесты.
-options.grep RegExp Шаблон регулярного выражения, который задает тесты для запуска.
+testPaths String[] or TestCollection Paths to tests relative to the working folder _(process.cwd())_ or an object of type _TestCollection_ returned by the _readTests_ method. If paths are not specified, all tests will be run.
+options Object Object with run options.
+options.reporters String[] Reporters for the test run results.
+options.browsers String[] Browsers in which to run the tests.
+options.sets String[] Sets in which to run the tests.
+options.grep RegExp A regular expression pattern that specifies tests to run.
## addTestToRun {#testplane_add_test_to_run}
-Добавляет тест к текущему запуску. Возвращает `false`, если текущий запуск уже закончился или был отменен. Иначе возвращает `true`.
+Adds a test to the current run. Returns `false` if the current run is already finished or cancelled. Otherwise, returns `true`.
-### Пример вызова
+### Example Call
```javascript
const success = testplane.addTestToRun(test, browser);
```
-### Параметры вызова
+### Call Parameters
-Все параметры являются обязательными.
+All parameters are required.
-**Имя параметра** **Тип** **Описание**
+**Parameter Name** **Type** **Description**
-test Test Тест для запуска.
-browserId String Браузер, в котором нужно запустить тест.
+test Test The test to run.
+browserId String The browser in which to run the test.
## readTests {#testplane_read_tests}
-Асинхронный метод. Возвращает объект типа [TestCollection](#test_collection).
+An asynchronous method that returns an object of type [TestCollection](#test_collection).
-### Пример вызова
+### Example Call
```javascript
await testplane.readTests(testPaths, options);
```
-### Параметры вызова
+### Call Parameters
-**Имя параметра** **Тип** **Описание**
+**Parameter Name** **Type** **Description**
-testPaths String[] Пути к тестам относительно рабочей папки _(process.cwd())_.
-options Object Объект с настройками режима чтения тестов.
-options.browsers String[] Прочитать тесты только для указанных браузеров.
-options.silent Boolean Отключить генерацию событий во время чтения тестов. По умолчанию: _false_.
-options.ignore String или Glob или String[] или Glob[] Шаблоны, указывающие какие пути на файловой системе надо исключить при поиске тестов.
-options.sets String[] Сеты, в которых нужно прочитать тесты.
-options.grep RegExp Шаблон регулярного выражения, который задает тесты для чтения.
+testPaths String[] Paths to tests relative to the working folder _(process.cwd())_.
+options Object Object with test reading mode settings.
+options.browsers String[] Read tests only for the specified browsers.
+options.silent Boolean Disable event generation while reading tests. Default: _false_.
+options.ignore String or Glob or String[] or Glob[] Patterns specifying paths on the filesystem to exclude when searching for tests.
+options.sets String[] Sets in which to read tests.
+options.grep RegExp A regular expression pattern that specifies tests to read.
## isFailed {#testplane_is_failed}
-Возвращает `true` или `false` в зависимости от того, была ли ошибка или падение теста при запуске тестов. Может пригодиться в плагинах для того, чтобы определить текущий статус testplane.
+Returns `true` or `false` depending on whether there was an error or test failure during the test run. Might be useful in plugins to determine the current status of testplane.
-### Пример вызова
+### Example Call
```javascript
const failed = testplane.isFailed();
@@ -338,56 +338,56 @@ const failed = testplane.isFailed();
## isWorker {#testplane_is_worker}
-Возвращает `true`, если метод был вызван из воркера testplane.
-Возвращает `false`, если метод был вызван из мастер-процесса testplane.
+Returns `true` if the method was called from a testplane worker.
+Returns `false` if the method was called from the testplane master process.
-Может пригодиться в плагинах для того, чтобы различать контекст выполнения кода.
+Might be useful in plugins to distinguish the execution context.
-### Пример вызова
+### Example Call
```javascript
-// реализация какого-либо плагина
+// Implementation of some plugin
module.exports = testplane => {
if (testplane.isWorker()) {
- // этот код будет выполняться только в воркерах testplane
+ // This code will be executed only in testplane workers
} else {
- // этот код будет выполняться только в мастер-процессе testplane
+ // This code will be executed only in the testplane master process
}
};
```
## halt {#testplane_halt}
-Аварийно завершает прогон тестов в случае критической ошибки. Если процессу не удается корректно завершить работу за заданное контрольное время _(timeout)_, то он будет принудительно завершен, кроме случаев, когда _timeout_ явно установлен в `0`.
+Forcibly terminates the test run in case of a critical error. If the process cannot gracefully shut down within the specified timeout, it will be forcibly terminated unless the timeout is explicitly set to `0`.
-### Пример вызова
+### Example Call
```javascript
testplane.halt(error, [timeout=60000ms]);
```
-### Параметры вызова
+### Call Parameters
-**Имя параметра** **Тип** **Описание**
+**Parameter Name** **Type** **Description**
-error Error Возникшая критическая ошибка, из-за которой приходится останавливать testplane.
-timeout Number Необязательный параметр. Контрольное время завершения процесса testplane. По умолчанию: _60000 мс_.
+error Error The critical error that requires stopping testplane.
+timeout Number Optional parameter. Timeout for shutting down the testplane process. Default: _60000 ms_.
## Test Collection {#test_collection}
-Объект типа `TestCollection` возвращается методом [testplane.readTests](#testplane_read_tests), а также передается в качестве аргумента в обработчик события [AFTER_TESTS_READ][after-tests-read].
+An object of type `TestCollection` is returned by the [testplane.readTests](#testplane_read_tests) method and is also passed as an argument to the handler of the [AFTER_TESTS_READ][after-tests-read] event.
### getBrowsers {#test_collection_get_browsers}
-Возвращает список браузеров, для которых в коллекции есть тесты.
+Returns a list of browsers for which tests are available in the collection.
-#### Пример вызова
+#### Example Call
```javascript
const browsers = testCollection.getBrowsers();
@@ -395,9 +395,9 @@ const browsers = testCollection.getBrowsers();
### mapTests {#test_collection_map_tests}
-Строит отображение тестов для заданного браузера.
+Builds a mapping of tests for the specified browser.
-#### Пример вызова
+#### Example Call
```javascript
const tests = testCollection.mapTests(browserId, (test, browserId) => {
@@ -405,13 +405,13 @@ const tests = testCollection.mapTests(browserId, (test, browserId) => {
});
```
-Если браузер не задан (то есть первым аргументом передан обратный вызов), то будет строиться отображение тестов для всех браузеров.
+If the browser is not specified (i.e., a callback is passed as the first argument), the mapping will be built for all browsers.
### sortTests {#test_collection_sort_tests}
-Сортирует тесты для заданного браузера.
+Sorts tests for the specified browser.
-#### Пример вызова
+#### Example Call
```javascript
testCollection.sortTests(browserId, (currentTest, nextTest) => {
@@ -419,13 +419,13 @@ testCollection.sortTests(browserId, (currentTest, nextTest) => {
});
```
-Если браузер не задан (то есть первым аргументом передан обратный вызов), то сортировка будет применена ко всем браузерам.
+If the browser is not specified (i.e., a callback is passed as the first argument), the sorting will be applied to all browsers.
### eachTest {#test_collection_each_test}
-Выполняет итерацию по тестам для заданного браузера.
+Iterates through the tests for the specified browser.
-#### Пример вызова
+#### Example Call
```javascript
testCollection.eachTest(browserId, (test, browserId) => {
@@ -433,15 +433,15 @@ testCollection.eachTest(browserId, (test, browserId) => {
});
```
-Если браузер не задан (то есть первым аргументом передан обратный вызов), то итерация будет происходить по тестам для всех браузеров.
+If the browser is not specified (i.e., a callback is passed as the first argument), the iteration will occur for tests in all browsers.
### eachTestByVersions {#test_collection_each_test_by_versions}
-Выполняет итерацию по тестам и версиям браузера для заданного браузера.
+Iterates through the tests and browser versions for the specified browser.
-Использует наличие у каждого теста свойства `browserVersion`.
+Utilizes the presence of the `browserVersion` property for each test.
-#### Пример вызова
+#### Example Call
```javascript
testCollection.eachTestByVersions(browserId, (test, browserId, browserVersion) => {
@@ -451,69 +451,67 @@ testCollection.eachTestByVersions(browserId, (test, browserId, browserVersion) =
### disableAll {#test_collection_disable_all}
-Отключает все тесты или тесты для заданного браузера. Возвращает ссылку на инстанс коллекции тестов.
+Disables all tests or tests for the specified browser. Returns a reference to the test collection instance.
-#### Примеры вызова
+#### Example Calls
```javascript
disableAll();
```
-или
+or
```javascript
disableAll(browserId);
```
-Если браузер не задан, то будут отключены все тесты.
+If the browser is not specified, all tests will be disabled.
### enableAll {#test_collection_enable_all}
-Включает все тесты или тесты для заданного браузера. Возвращает ссылку на инстанс коллекции тестов.
+Enables all tests or tests for the specified browser. Returns a reference to the test collection instance.
-#### Примеры вызова
+#### Example Calls
```javascript
enableAll();
```
-или
+or
```javascript
enableAll(browserId);
```
-Если браузер не задан, то будут включены все тесты.
+If the browser is not specified, all tests will be enabled.
### disableTest {#test_collection_disable_test}
-Отключает указанный тест во всех браузерах или только в заданном браузере. Возвращает ссылку на инстанс коллекции тестов.
+Disables the specified test in all browsers or only in the specified browser. Returns a reference to the test collection instance.
-#### Примеры вызова
+#### Example Calls
```javascript
disableTest(fullTitle);
```
-или
+or
```javascript
disableTest(fullTitle, browserId);
```
-Идентификатором теста является его полное название: `fullTitle`.
+The test is identified by its full title: `fullTitle`.
### enableTest {#test_collection_enable_test}
-Включает указанный тест во всех браузерах или только в заданном браузере. Возвращает ссылку на инстанс коллекции тестов.
-
-#### Примеры вызова
+Enables the specified test in all browsers or only in the specified browser.
```javascript
enableTest(fullTitle);
```
-или
+or
```javascript
enableTest(fullTitle, browserId);
@@ -521,9 +519,9 @@ enableTest(fullTitle, browserId);
### getRootSuite {#test_collection_get_root_suite}
-Возвращает корневой suite для заданного браузера. Возвращает `undefined`, если в коллекции нет тестов для указанного браузера.
+Returns the root suite for the specified browser. Returns undefined if there are no tests for the specified browser in the collection.
-#### Пример вызова
+#### Example Call
```javascript
const rootSuite = getRootSuite(browserId);
@@ -531,9 +529,9 @@ const rootSuite = getRootSuite(browserId);
### eachRootSuite {#test_collection_each_root_suite}
-Выполняет итерацию по всем корневым suite в коллекции, в которых есть тесты.
+Iterates through all root suites in the collection that have tests.
-#### Пример вызова
+#### Example Call
```javascript
eachRootSuite((root, browserId) => {
diff --git a/docs/reference/testplane-events.mdx b/docs/reference/testplane-events.mdx
index 4f38ae6..6d479a2 100644
--- a/docs/reference/testplane-events.mdx
+++ b/docs/reference/testplane-events.mdx
@@ -1,136 +1,135 @@
import Admonition from "@theme/Admonition";
-# События testplane
+# Testplane Events
-## Обзор {#overview}
+## Overview {#overview}
-### Как устроено описание событий {#how_is_events_description_made}
+### How event descriptions are organized {#how_is_events_description_made}
-Ниже описаны все события testplane, на которые можно подписаться в своем плагине.
+Below are described all the Testplane events you can subscribe to in your plugin.
-Описание каждого события начинается с тегов, которые представлены следующими вариантами:
+Each event description begins with tags, which come in the following variants:
-- _sync_ или _async_ обозначают, соответственно, синхронный и асинхронный режимы вызова обработчика события;
-- _master_ обозначает, что данное событие доступно из мастер-процесса testplane;
-- _worker_ обозначает, что данное событие доступно из воркеров (подпроцессов) testplane;
-- _can be intercepted_ обозначает, что данное событие можно перехватить и соответственно, изменить.
+- _sync_ or _async_ denote, respectively, synchronous and asynchronous event handler call modes;
+- _master_ indicates that this event is available from the master process of the testplane;
+- _worker_ indicates that this event is available from the workers (subprocesses) of the testplane;
+- _can be intercepted_ indicates that this event can be intercepted and accordingly, modified.
-Далее идут:
+Next are:
-- описание обстоятельств, при которых триггерится событие;
-- сниппет с кодом, показывающим как на него подписаться;
-- параметры обработчика события;
-- и опционально, примеры использования данного события в плагине или плагинах.
+- a description of the circumstances under which the event is triggered;
+- a code snippet showing how to subscribe to the event;
+- the event handler parameters;
+- and optionally, examples of using this event in a plugin or plugins.
-### Схема генерации событий {#events_scheme}
+### Event generation scheme {#events_scheme}
[//]: # ""
-![Генерация testplane-событий](/img/docs/reference/testplane-events-light-mode.png)
+![Testplane event generation](/img/docs/reference/testplane-events-light-mode.png)
-[//]: # "![Генерация testplane-событий](/img/docs/reference/testplane-events-dark-mode.png)"
+[//]: # "![Testplane event generation](/img/docs/reference/testplane-events-dark-mode.png)"
-### Описание последовательности событий {#events_scheme_description}
+### Event sequence description {#events_scheme_description}
-Testplane можно запускать как через [CLI (командную строку)][cli-wiki], так и через её API: из скрипта с помощью команды [run][testplane-run].
+Testplane can be launched through both the [CLI (command line interface)][cli-wiki] and its API: from a script using the [run][testplane-run] command.
-После запуска testplane загружает все плагины и переходит к парсингу CLI, если она была запущена через CLI, или сразу к стадии инициализации, если её запустили через API.
+After launching, Testplane loads all plugins and proceeds to parsing the CLI, if it was launched through the CLI, or directly to the initialization stage if it was launched through its API.
-#### Парсинг CLI
+#### CLI Parsing
-Если testplane была запущена через CLI, то она триггерит событие [CLI](#cli). Любой плагин может подписаться на это событие, чтобы добавить свои опции и команды к testplane до того, как testplane распарсит CLI.
+If Testplane was launched through the CLI, it triggers the [CLI](#cli) event. Any plugin can subscribe to this event to add its options and commands to the Testplane before Testplane parses the CLI.
-Если testplane была запущена с помощью API, то стадия парсинга CLI будет пропущена и сразу же начнется стадия инициализации.
+If Testplane was launched via the API, the CLI parsing stage will be skipped and it will move straight to the initialization stage.
-#### Инициализация
+#### Initialization
-Во время инициализации testplane триггерит событие [INIT](#init). Это событие срабатывает всего 1 раз за весь запуск testplane. Подписавшись на это событие, плагины могут выполнить всю необходимую им подготовительную работу: открыть и прочитать какие-то файлы, поднять dev-сервер, инициализировать структуры данных, и т. д. и т. п.
+During initialization, Testplane triggers the [INIT](#init) event. This event occurs only once for the entire launch of testplane. Plugins can use this event to perform all necessary preparatory work: open and read files, set up a dev server, initialize data structures, etc.
-Затем testplane запускает подпроцессы (так называемые воркеры), в рамках которых будут выполняться все тесты. В мастер-процессе testplane тесты не выполняются, а только осуществляется общая оркестрация всего процесса запуска тестов, включая генерацию событий при завершении выполнения отдельных тестов.
+Testplane then launches subprocesses (known as workers) in which all tests will be executed. Tests are not executed in the master process of testplane; the master process handles the overall orchestration of the test run process, including generating events upon the completion of individual tests.
-Количество воркеров, которые запускает testplane, регулируется параметром [workers][system-workers] в разделе [system][system] конфига testplane. При запуске очередного воркера testplane триггерит специальное событие [NEW_WORKER_PROCESS](#new_worker_process).
+The number of workers that Testplane launches is regulated by the [workers][system-workers] parameter in the [system][system] section of the Testplane config. When a new worker is launched, Testplane triggers the [NEW_WORKER_PROCESS](#new_worker_process) event.
- Все тесты testplane запускает в воркерах, чтобы не столкнуться с ограничениями по памяти и CPU
- для мастер-процесса. Как только в воркере количество выполненных тестов достигнет значения
- [testsPerWorker][system-tests-per-worker], воркер завершит свою работу, и будет запущен новый
- воркер. Соответственно, будет снова послано событие [NEW_WORKER_PROCESS](#new_worker_process).
+ Testplane runs all tests in workers to avoid memory and CPU limitations on the master process.
+ Once the number of tests completed in a worker reaches the value of
+ [testsPerWorker][system-tests-per-worker], the worker stops, and a new worker is launched.
+ Accordingly, the [NEW_WORKER_PROCESS](#new_worker_process) event is triggered again.
-#### Чтение тестов
+#### Test reading
-После этого testplane читает все тесты с файловой системы в мастер-процессе. Посылая для каждого файла, перед тем как его прочитать, событие [BEFORE_FILE_READ](#before_file_read) и после прочтения — событие [AFTER_FILE_READ](#after_file_read).
+Afterwards, Testplane reads all tests from the file system in the master process. Before reading each file, it sends the [BEFORE_FILE_READ](#before_file_read) event, and after reading it — the [AFTER_FILE_READ](#after_file_read) event.
-После того, как все тесты будут прочитаны, триггерится событие [AFTER_TESTS_READ](#after_tests_read).
+After all tests are read, the [AFTER_TESTS_READ](#after_tests_read) event is triggered.
-#### Запуск тестов
+#### Test execution
-Затем testplane посылает события [RUNNER_START](#runner_start) и [BEGIN](#begin). И стартует новую сессию (браузерную сессию), в которой будут выполняться тесты. При старте сессии testplane триггерит событие [SESSION_START](#session_start).
+Then Testplane sends the [RUNNER_START](#runner_start) and [BEGIN](#begin) events, and starts a new session (a browser session) in which the tests will be run. At the start of the session, Testplane triggers the [SESSION_START](#session_start) event.
-Если количество тестов, выполненных в рамках одной сессии, достигнет значения параметра [testsPerSession][browser-tests-per-session], то testplane завершит сессию, стриггерив событие [SESSION_END](#session_end), и запустит новую, послав событие [SESSION_START](#session_start).
+If the number of tests executed within one session reaches the value of the [testsPerSession][browser-tests-per-session] parameter, Testplane will end the session, triggering the [SESSION_END](#session_end) event, and start a new one, sending the [SESSION_START](#session_start) event.
-Если тест при выполнении упадет с критической ошибкой, то testplane:
+If a test fails with a critical error, Testplane will:
-- досрочно удалит сессию и браузер, который с ней связан;
-- создаст новую сессию;
-- запросит новый браузер, и привяжет его к новой сессии.
+- prematurely terminate the session and the browser associated with it;
+- create a new session;
+- request a new browser and link it to the new session.
-Это нужно для того, чтобы сбой в сессии при выполнении одного из тестов не начал влиять на запуски последующих тестов.
+This is to ensure that a failure in a session during one test run does not affect the subsequent test runs.
-После создания новой сессии testplane переходит к выполнению тестов. Все тесты выполняются в воркерах, но сам запуск и сбор результатов прогона тестов осуществляется в рамках мастер-процесса. Мастер-процесс триггерит событие [SUITE_BEGIN](#suite_begin) для describe-блоков в файле с тестами и [TEST_BEGIN](#test_begin) для it-блоков. Если тест отключен с помощью хелперов типа [skip.in][skip-in] и тому подобных, то триггерится событие [TEST_PENDING](#test_pending).
+After creating a new session, Testplane proceeds to run the tests. All tests are executed in workers, but the actual starting and collecting of the test results is done in the master process. The master process triggers the [SUITE_BEGIN](#suite_begin) event for describe-blocks in the test file and [TEST_BEGIN](#test_begin) for it-blocks. If a test is disabled using helpers like [skip.in][skip-in] and others, the [TEST_PENDING](#test_pending) event is triggered.
-Далее воркеры получают от мастер-процесса информацию о конкретных тестах, которые они должны запустить. Так как тесты хранятся в файлах, то воркеры читают конкретно те файлы, в которых находятся требуемые тесты. И перед чтением каждого такого файла, в каждом воркере триггерится событие [BEFORE_FILE_READ](#before_file_read), а после прочтения — событие [AFTER_FILE_READ](#after_file_read).
+Next, the workers receive from the master process the information about specific tests they need to run. Since tests are stored in files, workers read specifically those files where the required tests are located. Before reading each of those files in each worker, the [BEFORE_FILE_READ](#before_file_read) event is triggered, and after reading — the [AFTER_FILE_READ](#after_file_read) event.
-После того как соответствующие файлы с тестами будут прочитаны воркером, триггерится событие [AFTER_TESTS_READ](#after_tests_read).
+Once the relevant test files are read by the worker, the [AFTER_TESTS_READ](#after_tests_read) event is triggered.
-Перечисленные 3 события — [BEFORE_FILE_READ](#before_file_read), [AFTER_FILE_READ](#after_file_read) и [AFTER_TESTS_READ](#after_tests_read) будут триггериться в воркерах в процессе прогона тестов каждый раз как воркеры будут получать от мастер-процесса очередные тесты, которые нужно запустить. Кроме случаев, когда соответствующий файл с тестами уже был прочитан воркером ранее. Так как после первого чтения какого-либо файла, воркер сохраняет его в кэше, чтобы в следующий раз избежать повторного чтения файла с тестами.
+The listed 3 events — [BEFORE_FILE_READ](#before_file_read), [AFTER_FILE_READ](#after_file_read), and [AFTER_TESTS_READ](#after_tests_read) will be triggered in the workers during the test runs every time workers receive new tests to run from the master process. Except when the corresponding test file has already been read by the worker before. After the first reading of any file, the worker caches it to avoid re-reading the test file next time.
-
- Потому что один файл может содержать множество тестов. А запуск тестов идет по отдельным тестам,
- а не по файлам. Поэтому в какой-то момент времени может прогоняться тест из файла, из которого
- уже прогонялся другой тест. В таких случаях кэширование защищает от ненужных повторных чтений
- одних и тех же файлов.
+
+ Because one file may contain many tests. The test run is done per individual test, not per file.
+ Therefore, at some point in time, a test from a file that already had another test run may be
+ executed. In such cases, caching protects from unnecessary re-reading of the same files.
-Прежде чем тест будет запущен, триггерится событие [NEW_BROWSER](#new_browser). Однако это событие будет триггериться не для всех тестов, так как один и тот же браузер может использоваться много раз для запуска тестов (см. параметр [sessionsPerBrowser][browser-sessions-per-browser]). Также в случае падения теста с критической ошибкой происходит пересоздание браузера, чтобы не допустить падения других тестов в этом браузере из-за системного сбоя. В этом случае снова будет послано событие [NEW_BROWSER](#new_browser).
+Before a test is run, the [NEW_BROWSER](#new_browser) event is triggered. However, this event will not be triggered for all tests, as the same browser can be used many times to launch tests (see the [sessionsPerBrowser][browser-sessions-per-browser] parameter). Also, in case of a critical test failure, the browser is recreated to prevent other tests in that browser from failing due to a system crash. In this case, the [NEW_BROWSER](#new_browser) event will be sent again.
-#### Завершение тестов
+#### Test completion
-После того как тест завершается, может быть послано событие [SESSION_END](#session_end). Но это только в том случае, если суммарное количество тестов, которые были запущены в использованной сессии, превысило значение [testsPerSession][browser-tests-per-session].
+After a test completes, the [SESSION_END](#session_end) event can be sent. But this is only if the total number of tests run in the session exceeds the value of the [testsPerSession][browser-tests-per-session] parameter.
-Далее всё будет зависеть от того, с каким результатом завершился прогон теста. Если тест прошел успешно, то testplane стриггерит событие [TEST_PASS](#test_pass). Если тест упал — [TEST_FAIL](#test_fail). Если тест упал, но его следует запустить повторно (см. настройки [retry][browsers-retry] и [shouldRetry][browsers-should-retry] в конфиге testplane), то вместо события [TEST_FAIL](#test_fail) будет отправлено событие [RETRY](#retry).
+Then everything will depend on the result of the test run. If the test passed successfully, Testplane triggers the [TEST_PASS](#test_pass) event. If the test failed — [TEST_FAIL](#test_fail). If the test failed but needs to be re-run (see the [retry][browsers-retry] and [shouldRetry][browsers-should-retry] settings in the Testplane config), instead of the [TEST_FAIL](#test_fail) event, the [RETRY](#retry) event will be sent.
-Если тест не нужно запускать повторно, и результат — окончательный, то testplane триггерит события [TEST_END](#test_end) и [SUITE_END](#suite_end), если речь идет о завершении выполнения describe-блока.
+If the test does not need to be re-run, and the result is final, Testplane triggers the [TEST_END](#test_end) and [SUITE_END](#suite_end) events if it refers to the completion of a describe-block.
-После того как все тесты будут выполнены, а сессии завершены, testplane триггерит события [END](#end) и [RUNNER_END](#runner_end).
+After all tests have been executed and sessions completed, Testplane triggers the [END](#end) and [RUNNER_END](#runner_end) events.
-#### Обновление эталонных скриншотов
+#### Updating reference screenshots
-Во время запуска тестов может произойти обновление эталонных скриншотов. Это может произойти по следующим причинам:
+During the test run, reference screenshots may be updated for the following reasons:
-- разработчик запустил testplane в специальном GUI-режиме и дал команду «принять скриншоты»;
-- разработчик указал опцию `--update-ref` при запуске testplane;
-- у тестов не было эталонных скриншотов.
+- The developer launched Testplane in a special GUI mode and commanded "accept screenshots";
+- The developer specified the `--update-ref` option when launching testplane;
+- The tests did not have reference screenshots.
-Во всех этих случаях триггерится событие [UPDATE_REFERENCE](#update_reference).
+In all these cases, the [UPDATE_REFERENCE](#update_reference) event is triggered.
-#### Ошибки и аварийное завершение работы
+#### Errors and premature termination
-Если во время прогона тестов, в [одном из перехватчиков событий](#events_interception) произойдет критическая ошибка, то testplane стриггерит для этого теста событие [ERROR](#error). При этом остальные тесты будут выполняться в штатном порядке.
+If during the test run, a critical error occurs in one of the [event interceptors](#events_interception), Testplane triggers the [ERROR](#error) event for this test. However, the other tests will proceed normally.
-Если во время прогона тестов, testplane получит сигнал [SIGTERM][sigterm] (например, в результате нажатия клавиш `Ctrl + C`), то testplane стриггерит событие [EXIT](#exit) и досрочно прервет выполнение тестов.
+If during the test run, Testplane receives a [SIGTERM][sigterm] signal (for example, as a result of pressing `Ctrl + C`), Testplane triggers the [EXIT](#exit) event and prematurely terminates the test run.
-### Про перехват событий {#events_interception}
+### About event interception {#events_interception}
-Testplane позволяет разработчику перехватывать ряд событий и изменять их на другие, игнорировать или задерживать их обработку.
+Testplane allows the developer to intercept certain events and modify them to other events, ignore them, or delay their processing.
-События, которые могут быть перехвачены, снабжены в описании тегом _can be intercepted_. Всего таких событий 7:
+Events that can be intercepted are tagged with _can be intercepted_ in their description. There are a total of 7 such events:
- [SUITE_BEGIN](#suite_begin)
- [SUITE_END](#suite_end)
@@ -140,9 +139,9 @@ Testplane позволяет разработчику перехватывать
- [TEST_FAIL](#test_fail)
- [RETRY](#retry)
-#### Меняем одно событие на другое
+#### Changing one event to another
-Например, код ниже показывает, как можно перехватывать событие [TEST_FAIL](#test_fail) и изменять его на событие [TEST_PENDING](#test_pending) — то есть автоматически отключать падающие тесты, не давая им уронить общий прогон тестов:
+For example, the code below shows how to intercept the [TEST_FAIL](#test_fail) event and change it to the [TEST_PENDING](#test_pending) event — thus automatically disabling failing tests, preventing them from bringing down the overall test run:
```javascript
module.exports = testplane => {
@@ -155,38 +154,38 @@ module.exports = testplane => {
});
testplane.on(testplane.events.TEST_FAIL, test => {
- // этот обработчик никогда не будет вызван
+ // this handler will never be called
});
- testplane.on(testplane.evenst.TEST_PENDING, test => {
- // этот обработчик будет всегда вызываться вместо обработчика для TEST_FAIL
+ testplane.on(testplane.events.TEST_PENDING, test => {
+ // this handler will always be called instead of the TEST_FAIL handler
});
};
```
-#### Оставляем событие as is {#events_interception_leaving_event_as_is}
+#### Leaving the event as is {#events_interception_leaving_event_as_is}
-Если по какой-либо причине перехваченное событие нужно оставить _как есть_, то его обработчик должен вернуть точно такой же объект или любое _falsey_ значение: _undefined, null_ или _false._
+If for some reason the intercepted event needs to be left _as is_, its handler should return exactly the same object or any _falsey_ value: _undefined, null_ or _false._
```javascript
module.exports = testplane => {
testplane.intercept(testplane.events.TEST_FAIL, ({ event, data }) => {
return { event, data };
- // или return;
- // или return null;
- // или return false;
+ // or return;
+ // or return null;
+ // or return false;
});
testplane.on(testplane.events.TEST_FAIL, test => {
- // этот обработчик будет вызван как обычно,
- // потому что перехват события TEST_FAIL никак не меняет его
+ // this handler will be called as usual,
+ // because the interception of the TEST_FAIL event does not change it
});
};
```
-#### Игнорируем событие {#events_interception_ignoring_event}
+#### Ignoring an event {#events_interception_ignoring_event}
-Чтобы проигнорировать какое-либо событие и не дать ему распространяться дальше, нужно вернуть из обработчика (в котором перехватывается событие) пустой объект:
+To ignore an event and prevent it from propagating further, return an empty object from the handler (where the event is intercepted):
```javascript
module.exports = testplane => {
@@ -195,38 +194,38 @@ module.exports = testplane => {
});
testplane.on(testplane.events.TEST_FAIL, test => {
- // этот обработчик никогда не будет вызван
+ // this handler will never be called
});
};
```
-#### Задерживаем обработку события {#events_interception_delaying_events}
+#### Delaying event processing {#events_interception_delaying_events}
-Приведенный выше подход с игнорированием события можно использовать для задержки появления тех или иных событий, например:
+The approach above with ignoring an event can be used to delay the occurrence of certain events, for example:
```javascript
module.exports = testplane => {
const intercepted = [];
testplane.intercept(testplane.events.TEST_FAIL, ({ event, data }) => {
- // собираем все события TEST_FAIL
+ // collect all TEST_FAIL events
intercepted.push({ event, data });
- // и не даем им распространяться дальше
+ // and prevent them from propagating further
return {};
});
testplane.on(testplane.events.END, () => {
- // после окончания прогона тестов, триггерим все накопленные события TEST_FAIL
+ // after the test run is complete, trigger all accumulated TEST_FAIL events
intercepted.forEach(({ event, data }) => testplane.emit(event, data));
});
};
```
-### Передача информации между обработчиками событий {#events_handlers_info_interchange}
+### Information sharing between event handlers {#events_handlers_info_interchange}
-События, которые триггерятся в мастер-процессе и в воркерах testplane не могут обмениваться информацией через глобальные переменные.
+Events triggered in the master process and in the Testplane workers cannot exchange information through global variables.
-Например, такой подход работать не будет:
+For example, this approach will not work:
```javascript
module.exports = testplane => {
@@ -237,19 +236,19 @@ module.exports = testplane => {
});
testplane.on(testplane.events.NEW_BROWSER, () => {
- // будет выведено значение false, потому что событие NEW_BROWSER
- // триггерится в воркере testplane, а RUNNER_START – в мастер-процессе
+ // the value false will be output, because the NEW_BROWSER event
+ // is triggered in the Testplane worker, and RUNNER_START – in the master process
console.info(flag);
});
testplane.on(testplane.events.RUNNER_END, () => {
- // будет выведено значение true
+ // the value true will be output
console.info(flag);
});
};
```
-Но можно решить проблему следующим образом:
+But the problem can be solved as follows:
```javascript
module.exports = (testplane, opts) => {
@@ -258,38 +257,38 @@ module.exports = (testplane, opts) => {
});
testplane.on(testplane.events.NEW_BROWSER, () => {
- // будет выведено значение true, потому что свойства в конфиге,
- // которые имеют примитивный тип (а переменная "opts" является частью конфига),
- // автоматически передаются в воркеры во время события RUNNER_START
+ // the value true will be output because properties in the config
+ // that are primitives (and the "opts" variable is part of the config)
+ // are automatically passed to workers during the RUNNER_START event
console.info(opts.flag);
});
};
```
-Или следующим образом: смотрите [пример](#new_worker_process_usage) из описания события [NEW_WORKER_PROCESS](#new_worker_process).
+Or as follows: see the [example](#new_worker_process_usage) from the description of the [NEW_WORKER_PROCESS](#new_worker_process) event.
-### Параллельное выполнение кода плагина {#plugin_code_parallel_execution}
+### Parallel execution of plugin code {#plugin_code_parallel_execution}
-У раннера тестов есть метод `registerWorkers`, который регистрирует код плагина для параллельного выполнения в воркерах testplane. Метод принимает следующие параметры:
+The test runner has a `registerWorkers` method which registers the plugin code for parallel execution in the Testplane workers. The method takes the following parameters:
-**Параметр** **Тип** **Описание**
+**Parameter** **Type** **Description**
-workerFilepath String Абсолютный путь к воркеру.
-exportedMethods String[] Список экспортируемых методов.
+workerFilepath String Absolute path to the worker.
+exportedMethods String[] List of exported methods.
-При этом возвращает объект, который содержит асинхронные функции с именами из экспортированных методов.
+It returns an object which contains asynchronous functions with names from exported methods.
-Файл с путем `workerFilepath` должен экспортировать объект, который содержит асинхронные функции с именами из `exportedMethods`.
+The file at the `workerFilepath` path should export an object containing asynchronous functions with names from `exportedMethods`.
-#### Пример параллельного выполнения кода плагина {#plugin_code_parallel_execution_example}
+#### Example of parallel plugin code execution {#plugin_code_parallel_execution_example}
-**Код плагина: plugin.js**
+**Plugin code: plugin.js**
```javascript
let workers;
@@ -301,18 +300,18 @@ module.exports = testplane => {
workers = runner.registerWorkers(workerFilepath, exportedMethods);
- // выводит FOO_RUNNER_START
+ // prints FOO_RUNNER_START
console.info(await workers.foo("RUNNER_START"));
});
testplane.on(testplane.events.RUNNER_END, async () => {
- // выводит FOO_RUNNER_END
+ // prints FOO_RUNNER_END
console.info(await workers.foo("RUNNER_END"));
});
};
```
-**Код воркера: worker.js**
+**Worker code: worker.js**
```javascript
module.exports = {
@@ -326,56 +325,56 @@ module.exports = {
**sync | master**
-Событие `CLI` триггерится сразу при запуске, до того, как testplane распарсит [CLI][cli-wiki]. Обработчик события выполняется синхронно. С помощью него можно добавить новые команды или расширить справку testplane.
+The `CLI` event is triggered immediately upon startup, before Testplane parses the [CLI][cli-wiki]. The event handler executes synchronously. With it, you can add new commands or extend testplane's help.
-### Подписка на событие {#cli_subscription}
+### Subscribing to the event {#cli_subscription}
```javascript
testplane.on(testplane.events.CLI, cli => {
- console.info("Выполняется обработка события CLI...");
+ console.info("Processing CLI event...");
cli.option(
"--some-option ",
"the full description of the option",
- // см. подробнее в https://github.com/tj/commander.js#options
+ // see more at https://github.com/tj/commander.js#options
);
});
```
-#### Параметры обработчика {#cli_cb_params}
+#### Handler parameters {#cli_cb_params}
-В обработчик события передается объект типа [Commander][commander].
+An object of the [Commander][commander] type is passed to the event handler.
-### Пример использования {#cli_usage}
+### Example of usage {#cli_usage}
-Рассмотрим в качестве примера [реализацию][testplane-test-repeater-index] плагина [testplane-test-repeater][testplane-test-repeater].
+Let's consider an example of the [implementation][testplane-test-repeater-index] of the [testplane-test-repeater][testplane-test-repeater] plugin.
-Используя событие [CLI](#cli), плагин добавляет к testplane новую опцию `--repeat`. С помощью неё можно указать, сколько раз нужно прогнать тесты, независимо от результата каждого прогона.
+Using the [CLI](#cli) event, the plugin adds a new `--repeat` option to testplane. With it, you can specify how many times to run tests, regardless of the result of each run.
-Нажмите, чтобы посмотреть код
+Click to see the code
```javascript
-const parseConfig = require('./config');
+const parseConfig = require("./config");
module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
- if (!pluginConfig.enabled testplane.isWorker()) {
- // или плагин отключен, или мы находимся в контексте воркера – уходим
+ if (!pluginConfig.enabled || testplane.isWorker()) {
+ // the plugin is either disabled, or we are in the context of a worker – leave
return;
}
- testplane.on(testplane.events.CLI, (cli) => {
- // добавляем опцию --repeat
+ testplane.on(testplane.events.CLI, cli => {
+ // add the --repeat option
cli.option(
- '--repeat ',
- 'how many times tests should be repeated regardless of the result',
- (value) => parseNonNegativeInteger(value, 'repeat')
+ "--repeat ",
+ "how many times tests should be repeated regardless of the result",
+ value => parseNonNegativeInteger(value, "repeat"),
);
});
@@ -389,35 +388,35 @@ module.exports = (testplane, opts) => {
**async | master**
-Событие `INIT` триггерится перед тем, как будут выполнены задачи [run][run] или [readTests][read-tests]. Обработчик события может быть асинхронным: в таком случае задачи начнут выполняться только после того, как будет разрезолвлен _Promise_, возвращаемый обработчиком события. Событие триггерится только один раз, независимо от того, сколько раз будут выполнены задачи.
+The `INIT` event is triggered before the [run][run] or [readTests][read-tests] tasks are performed. The event handler can be asynchronous: in which case, the tasks will only start after the Promise returned by the event handler is resolved. The event triggers only once, regardless of how many times the tasks are performed.
-### Подписка на событие {#init_subscription}
+### Subscribing to the event {#init_subscription}
```javascript
testplane.on(testplane.events.INIT, async () => {
- console.info("Выполняется обработка события INIT...");
+ console.info("Processing INIT event...");
});
```
-#### Параметры обработчика {#init_cb_params}
+#### Handler parameters {#init_cb_params}
-В обработчик события никакие данные не передаются.
+No data is passed to the event handler.
-### Пример использования {#init_usage}
+### Example of usage {#init_usage}
-В обработчике события [INIT](#init) можно организовать, например, запуск dev-сервера для вашего проекта.
+In the [INIT](#init) event handler, you can organize, for example, the launch of a dev server for your project.
-
- Dev-сервер — это [express][express]-like приложение, которое позволяет разрабатывать фронтенд
- проекта.
+
+ A dev server is an [express][express]-like application that allows you to develop the frontend
+ of the project.
-Ниже приведена самая короткая реализация. Более подробный пример можно посмотреть в разделе «[Автоматический запуск dev-сервера](#usage_starting_dev_server)».
+Below is the shortest implementation. A more detailed example can be found in the section "[Automatic dev server startup](#usage_starting_dev_server)".
-Нажмите, чтобы посмотреть код
+Click to see the code
@@ -429,22 +428,22 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled testplane.isWorker()) {
- // или плагин отключен, или мы находимся в контексте воркера – уходим
+ // either the plugin is disabled, or we are in the worker context – exit
return;
}
// ...
testplane.on(testplane.events.INIT, () => {
- // контент, который отдает dev-сервер
+ // content served by the dev-server
const content = 'Hello, World! ';
- // создаем сервер и начинаем слушать порт 3000
+ // create a server and start listening on port 3000
http
.createServer((req, res) => res.end(content))
.listen(3000);
- // по адресу http://localhost:3000/index.html будет отдаваться: Hello, World!
+ // at http://localhost:3000/index.html it will serve: Hello, World!
});
};
```
@@ -455,9 +454,9 @@ module.exports = (testplane, opts) => {
**sync | master | worker**
-Событие `BEFORE_FILE_READ` триггерится перед тем, как будет прочитан файл с тестом, чтобы распарсить его. Обработчик события выполняется синхронно. Событие также доступно в воркерах testplane.
+The `BEFORE_FILE_READ` event is triggered before the test file is read to parse it. The event handler is executed synchronously. The event is also available in Testplane workers.
-### Подписка на событие {#before_file_read_subscription}
+### Subscribing to the event {#before_file_read_subscription}
```javascript
testplane.on(testplane.events.BEFORE_FILE_READ, ({ file, testplane, testParser }) => {
@@ -469,59 +468,59 @@ testplane.on(testplane.events.BEFORE_FILE_READ, ({ file, testplane, testParser }
});
```
-#### Параметры обработчика {#before_file_read_cb_params}
+#### Handler parameters {#before_file_read_cb_params}
-В обработчик события передается объект следующего формата:
+The event handler receives an object with the following format:
```javascript
{
- file, // String: путь к файлу с тестом
- testplane, // Object: то же, что и global.testplane
- testParser; // Object: типа TestParserAPI
+ file, // String: path to the test file
+ testplane, // Object: same as global.testplane
+ testParser; // Object: of type TestParserAPI
}
```
#### testParser: TestParserAPI {#test_parser}
-Объект `testParser` типа `TestParserAPI` передается в обработчик события `BEFORE_FILE_READ`. С помощью него можно управлять процессом парсинга файлов с тестами. Объект поддерживает метод `setController`, с помощью которого можно создать свои хелперы для тестов.
+The `testParser` object of type `TestParserAPI` is passed to the `BEFORE_FILE_READ` event handler. It allows you to manage the process of parsing test files. The object supports the `setController` method, which allows you to create your own helpers for tests.
**setController(name, methods)**
-Метод добавляет контроллер к глобальному объекту `testplane`, доступному внутри тестов.
+The method adds a controller to the global `testplane` object, available inside the tests.
-- `name` — имя хелпера (или иначе — контроллера);
-- `methods` — объект-словарь, ключи которого задают названия методов соответствующих хелперов, а значения ключей определяют их реализацию. Каждый метод будет вызван на соответствующем тесте или наборе тестов _(suite)_.
+- `name` — the name of the helper (or controller);
+- `methods` — an object-dictionary where the keys define the names of the corresponding helper methods, and the values define their implementation. Each method will be called on the corresponding test or test suite.
- Контроллер будет удален, как только закончится парсинг текущего файла.
+ The controller will be removed as soon as the current file parsing is finished.
-### Пример использования {#before_file_read_usage}
+### Usage example {#before_file_read_usage}
-Создадим в качестве примера специальный хелпер `testplane.logger.log()`, с помощью которого мы сможем логировать информацию о парсинге интересующего нас теста.
+As an example, let's create a special helper `testplane.logger.log()` that allows us to log information about the parsing of the test we are interested in.
-Нажмите, чтобы посмотреть пример использования
+Click to view the usage example
-**Код плагина**
+**Plugin code**
```javascript
testplane.on(testplane.events.BEFORE_FILE_READ, ({ file, testParser }) => {
testParser.setController("logger", {
log: function (prefix) {
console.log(
- `${prefix}: только что распарсил ${this.fullTitle()} из файла ${file} для браузера ${this.browserId}`,
+ `${prefix}: just parsed ${this.fullTitle()} from file ${file} for browser ${this.browserId}`,
);
},
});
});
```
-**Код теста**
+**Test code**
```javascript
describe("foo", () => {
@@ -534,30 +533,30 @@ describe("foo", () => {
-Ещё один пример использования события [BEFORE_FILE_READ](#before_file_read) можно посмотреть в разделе «[Запуск тестов с хелперами](#usage_running_tests_with_helpers)».
+Another example of using the [BEFORE_FILE_READ](#before_file_read) event can be found in the section “[Running tests with helpers](#usage_running_tests_with_helpers)”.
## AFTER_FILE_READ {#after_file_read}
**sync | master | worker**
-Событие `AFTER_FILE_READ` триггерится после того, как будет прочтен файл с тестом. Обработчик события выполняется синхронно. Событие также доступно в воркерах testplane.
+The `AFTER_FILE_READ` event is triggered after the test file is read. The event handler is executed synchronously. The event is also available in Testplane workers.
-### Подписка на событие {#after_file_read_subscription}
+### Subscribing to the event {#after_file_read_subscription}
```javascript
testplane.on(testplane.events.AFTER_FILE_READ, ({ file, testplane }) => {
- console.info("Выполняется обработка события AFTER_FILE_READ...");
+ console.info("Processing AFTER_FILE_READ event...");
});
```
-#### Параметры обработчика {#after_file_read_cb_params}
+#### Handler parameters {#after_file_read_cb_params}
-В обработчик события передается объект следующего формата:
+The event handler receives an object with the following format:
```javascript
{
- file, // String: путь к файлу с тестом
- testplane; // Object: то же, что и global.testplane
+ file, // String: path to the test file
+ testplane; // Object: same as global.testplane
}
```
@@ -565,32 +564,32 @@ testplane.on(testplane.events.AFTER_FILE_READ, ({ file, testplane }) => {
**sync | master | worker**
-Событие `AFTER_TESTS_READ` триггерится после того, как будут вызваны методы [readTests][read-tests] или [run][run] объекта типа [TestCollection][test-collection]. Обработчик события выполняется синхронно. Событие также доступно в воркерах testplane.
+The `AFTER_TESTS_READ` event is triggered after the methods [readTests][read-tests] or [run][run] of the [TestCollection][test-collection] object are called. The event handler is executed synchronously. The event is also available in Testplane workers.
-Подписавшись на это событие, вы можете выполнить в обработчике те или иные манипуляции над коллекцией тестов до того, как они будут запущены. Например, вы можете исключить какие-либо тесты из запусков.
+By subscribing to this event, you can perform various manipulations on the test collection before they are run. For example, you can exclude certain tests from the runs.
-### Подписка на событие {#after_tests_read_subscription}
+### Subscribing to the event {#after_tests_read_subscription}
```javascript
testplane.on(testplane.events.AFTER_TESTS_READ, testCollection => {
- console.info("Выполняется обработка события AFTER_TESTS_READ...");
+ console.info("Processing AFTER_TESTS_READ event...");
});
```
-#### Параметры обработчика {#after_tests_read_cb_params}
+#### Handler parameters {#after_tests_read_cb_params}
-В обработчик события передается объект `testCollection` типа [TestCollection][test-collection].
+The event handler receives a `testCollection` object of type [TestCollection][test-collection].
-### Пример использования {#after_tests_read_usage}
+### Usage example {#after_tests_read_usage}
-Рассмотрим [реализацию][testplane-global-hook-index] плагина [testplane-global-hook][testplane-global-hook], с помощью которого можно вынести действия, повторяющиеся перед запуском и завершением каждого теста, в отдельные _beforeEach_- и _afterEach_-обработчики.
+Consider the [implementation][testplane-global-hook-index] of the [testplane-global-hook][testplane-global-hook] plugin, which allows you to move actions that repeat before and after each test into separate _beforeEach_ and _afterEach_ handlers.
-Используя событие [AFTER_TESTS_READ](#after_tests_read), плагин добавляет к каждому корневому _suite_ обработчики _beforeEach_ и _afterEach_-хуков. Последние задаются пользователем в конфиге плагина [testplane-global-hook][testplane-global-hook].
+Using the [AFTER_TESTS_READ](#after_tests_read) event, the plugin adds _beforeEach_ and _afterEach_ hooks to each root suite. These hooks are defined by the user in the [testplane-global-hook][testplane-global-hook] plugin configuration.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -615,34 +614,34 @@ module.exports = (testplane, opts) => {
-Ещё примеры использования события [AFTER_TESTS_READ](#after_tests_read) можно посмотреть в разделах «[Запуск тестов из заданного списка](#usage_running_filtered_tests)» и «[Запуск тестов с хелперами](#usage_running_tests_with_helpers)».
+More examples of using the [AFTER_TESTS_READ](#after_tests_read) event can be found in the sections “[Running tests from a specific list](#usage_running_filtered_tests)” and “[Running tests with helpers](#usage_running_tests_with_helpers)”.
## RUNNER_START {#runner_start}
**async | master**
-Событие `RUNNER_START` триггерится после инициализации всех воркеров testplane и перед выполнением тестов. Обработчик события может быть асинхронным: в таком случае тесты начнут выполняться только после того, как будет разрезолвлен _Promise_, возвращаемый обработчиком события.
+The `RUNNER_START` event is triggered after all Testplane workers are initialized and before the tests are run. The event handler can be asynchronous: in this case, the tests will start running only after the _Promise_ returned by the event handler is resolved.
-### Подписка на событие {#runner_start_subscription}
+### Subscribing to the event {#runner_start_subscription}
```javascript
testplane.on(testplane.events.RUNNER_START, async runner => {
- console.info("Выполняется обработка события RUNNER_START...");
+ console.info("Processing RUNNER_START event...");
});
```
-#### Параметры обработчика {#runner_start_cb_params}
+#### Handler parameters {#runner_start_cb_params}
-В обработчик события передается ссылка на инстанс раннера. Используя этот инстанс, можно триггерить различные события или подписаться на них.
+The event handler receives a reference to the runner instance. Using this instance, you can trigger various events or subscribe to them.
-### Пример использования {#runner_start_usage}
+### Usage example {#runner_start_usage}
-Предположим, мы хотим автоматически поднимать ssh-туннель при запуске тестов и перенаправлять все урлы в тестах в поднятый туннель. Для этого мы можем воспользоваться событиями [RUNNER_START](#runner_start) и [RUNNER_END](#runner_end), чтобы открывать туннель при запуске раннера и закрывать его после завершения работы раннера.
+Suppose we want to automatically set up an SSH tunnel when running tests and redirect all URLs in the tests to the established tunnel. To do this, we can use the [RUNNER_START](#runner_start) and [RUNNER_END](#runner_end) events to open the tunnel when the runner starts and close it after the runner finishes.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -654,11 +653,11 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
- // конфиг плагина задает параметры туннеля:
+ // plugin config defines tunnel parameters:
// host, ports, localport, retries, etc.
const tunnel = Tunnel.create(testplane.config, pluginConfig);
@@ -669,68 +668,68 @@ module.exports = (testplane, opts) => {
-Похожую [реализацию][ssh-tunneler-index] можно посмотреть в плагине [ssh-tunneler][ssh-tunneler].
+A similar [implementation][ssh-tunneler-index] can be found in the [ssh-tunneler][ssh-tunneler] plugin.
## RUNNER_END {#runner_end}
**async | master**
-Событие `RUNNER_END` триггерится после выполнения теста и перед тем, как будут завершены все воркеры. Обработчик события может быть асинхронным: в таком случае все воркеры будут завершены только после того, как будет разрезолвлен _Promise_, возвращаемый обработчиком события.
+The `RUNNER_END` event is triggered after the test is run and before all workers are terminated. The event handler can be asynchronous: in this case, all workers will be terminated only after the _Promise_ returned by the event handler is resolved.
-### Подписка на событие {#runner_end_subscription}
+### Subscribing to the event {#runner_end_subscription}
```javascript
testplane.on(testplane.events.RUNNER_END, async result => {
- console.info("Выполняется обработка события RUNNER_END...");
+ console.info("Processing RUNNER_END event...");
});
```
-#### Параметры обработчика {#runner_end_cb_params}
+#### Handler parameters {#runner_end_cb_params}
-В обработчик события передается объект со статистикой прогона тестов следующего вида:
+The event handler receives an object with the test run statistics in the following format:
```javascript
{
- passed: 0, // количество успешно выполненных тестов
- failed: 0, // количество упавших тестов
- retries: 0, // количество ретраев (повторных запусков) тестов
- skipped: 0, // количество отключенных (заскипанных) тестов
- total: 0 // общее количество тестов
+ passed: 0, // number of successfully completed tests
+ failed: 0, // number of failed tests
+ retries: 0, // number of test retries
+ skipped: 0, // number of skipped tests
+ total: 0 // total number of tests
};
```
-### Пример использования {#runner_end_usage}
+### Usage example {#runner_end_usage}
-Смотрите пример [выше](#runner_start_usage) про открытие и закрытие туннеля при запуске и остановке раннера.
+See the example [above](#runner_start_usage) about opening and closing the tunnel when the runner starts and stops.
## NEW_WORKER_PROCESS {#new_worker_process}
**sync | master**
-Событие `NEW_WORKER_PROCESS` триггерится после порождения нового подпроцесса (воркера) testplane. Обработчик события выполняется синхронно.
+The `NEW_WORKER_PROCESS` event is triggered after a new Testplane subprocess (worker) is spawned. The event handler is executed synchronously.
-### Подписка на событие {#new_worker_process_subscription}
+### Subscribing to the event {#new_worker_process_subscription}
```javascript
testplane.on(testplane.events.NEW_WORKER_PROCESS, workerProcess => {
- console.info("Выполняется обработка события NEW_WORKER_PROCESS...");
+ console.info("Processing NEW_WORKER_PROCESS event...");
});
```
-#### Параметры обработчика {#new_worker_process_cb_params}
+#### Handler parameters {#new_worker_process_cb_params}
-В обработчик события передается объект-обертка над порожденным подпроцессом, с одним единственным методом [send][process-send] для обмена сообщениями.
+The event handler receives a wrapper object over the spawned subprocess, with a single [send][process-send] method for message exchange.
-### Пример использования {#new_worker_process_usage}
+### Usage example {#new_worker_process_usage}
-В примере ниже показано, как можно использовать событие [NEW_WORKER_PROCESS](#new_worker_process), чтобы организовать взаимодействие мастер-процесса со всеми воркерами testplane. Например, для того, чтобы обновить значение какого-либо параметра во всех воркерах testplane из мастер-процесса перед началом прогона всех тестов.
+The example below shows how to use the [NEW_WORKER_PROCESS](#new_worker_process) event to organize interaction between the master process and all Testplane workers. For example, to update the value of a parameter in all Testplane workers from the master process before the test run starts.
-В примере также используется событие [BEGIN](#begin).
+The example also uses the [BEGIN](#begin) event.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -739,12 +738,12 @@ const masterPlugin = (testplane, opts) => {
const workers = [];
testplane.on(testplane.events.NEW_WORKER_PROCESS, (workerProcess) => {
- // запоминаем ссылки на все созданные воркеры testplane
+ // store references to all created Testplane workers
workers.push(workerProcess);
});
testplane.on(testplane.events.BEGIN, () => {
- // посылаем значение параметра всем воркерам
+ // send the parameter value to all workers
workers.forEach((worker) => {
worker.send({
type: PARAM_VALUE_UPDATED_EVENT,
@@ -758,7 +757,7 @@ const workerPlugin = (testplane) => {
process.on('message', ({ type, ...data }) => {
if (type === PARAM_VALUE_UPDATED_EVENT) {
const { param } = data;
- console.info(`Получил значение "${param}" для "param" из мастер-процесса`);
+ console.info(`Received value "${param}" for "param" from the master process`);
}
});
@@ -782,31 +781,31 @@ module.exports = plugin;
**async | master**
-Событие `SESSION_START` триггерится после инициализации сессии браузера. Обработчик события может быть асинхронным: в таком случае тесты начнут выполняться только после того, как будет разрезолвлен _Promise_, возвращаемый обработчиком события.
+The `SESSION_START` event is triggered after the browser session is initialized. The event handler can be asynchronous: in this case, the tests will start running only after the _Promise_ returned by the event handler is resolved.
-### Подписка на событие {#session_start_subscription}
+### Subscribing to the event {#session_start_subscription}
```javascript
testplane.on(testplane.events.SESSION_START, async (browser, { browserId, sessionId }) => {
- console.info("Выполняется обработка события SESSION_START...");
+ console.info("Processing SESSION_START event...");
});
```
-#### Параметры обработчика {#session_start_cb_params}
+#### Handler parameters {#session_start_cb_params}
-В обработчик события передаются 2 аргумента:
+The event handler receives 2 arguments:
-- первый аргумент — инстанс `WebdriverIO`;
-- второй аргумент — объект вида `{ browserId, sessionId }`, где _browserId_ — это имя браузера, а _sessionId_ — идентификатор сессии браузера.
+- the first argument — an instance of `WebdriverIO`;
+- the second argument — an object of the form `{ browserId, sessionId }`, where _browserId_ is the name of the browser, and _sessionId_ is the browser session identifier.
-### Пример использования {#session_start_usage}
+### Usage example {#session_start_usage}
-Рассмотрим пример, в котором плагин подписывается на событие [SESSION_START](#session_start), чтобы отключить скролл-бары в браузерах с помощью Chrome DevTools Protocol'а.
+Consider an example where the plugin subscribes to the [SESSION_START](#session_start) event to disable scrollbars in browsers using the Chrome DevTools Protocol.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -818,22 +817,22 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
testplane.on(testplane.events.SESSION_START, async (browser, { browserId, sessionId }) => {
if (!pluginConfig.browsers.includes(browserId)) {
- // браузера нет в списке браузеров, для которых возможно отключить скроллбары
- // посредством Chrome DevTools Protocol'а (CDP) – уходим
+ // the browser is not in the list of browsers for which scrollbars can be disabled
+ // using the Chrome DevTools Protocol (CDP) – exit
return;
}
const gridUrl = testplane.config.forBrowser(browserId).gridUrl;
- // pluginConfig.browserWSEndpoint задает функцию, которая должна вернуть URL
- // для работы с браузером через CDP. Чтобы функция могла вычислить URL,
- // в функцию передаются идентификатор сессии и ссылка на грид
+ // pluginConfig.browserWSEndpoint defines a function that should return the URL
+ // for working with the browser via CDP. To allow the function to compute the URL,
+ // the function receives the session identifier and the grid URL
const browserWSEndpoint = pluginConfig.browserWSEndpoint({ sessionId, gridUrl });
const devtools = await DevTools.create({ browserWSEndpoint });
@@ -847,96 +846,96 @@ module.exports = (testplane, opts) => {
-Более подробную [реализацию][hermione-hide-scrollbars-index] можно посмотреть в плагине [hermione-hide-scrollbars][hermione-hide-scrollbars].
+A more detailed [implementation][hermione-hide-scrollbars-index] can be found in the [hermione-hide-scrollbars][hermione-hide-scrollbars] plugin.
## SESSION_END {#session_end}
**async | master**
-Событие `SESSION_END` триггерится после того, как завершается сессия браузера. Обработчик события может быть асинхронным: в таком случае тесты продолжат выполняться только после того, как будет разрезолвлен _Promise_, возвращаемый обработчиком события.
+The `SESSION_END` event is triggered after the browser session ends. The event handler can be asynchronous: in this case, the tests will continue running only after the _Promise_ returned by the event handler is resolved.
-### Подписка на событие {#session_end_subscription}
+### Subscribing to the event {#session_end_subscription}
```javascript
testplane.on(testplane.events.SESSION_END, async (browser, { browserId, sessionId }) => {
- console.info("Выполняется обработка события SESSION_END...");
+ console.info("Processing SESSION_END event...");
});
```
-#### Параметры обработчика {#session_end_cb_params}
+#### Handler parameters {#session_end_cb_params}
-В обработчик события передаются 2 аргумента:
+The event handler receives 2 arguments:
-- первый аргумент — инстанс `WebdriverIO`;
-- второй аргумент — объект вида `{ browserId, sessionId }`, где _browserId_ — это имя браузера, а _sessionId_ — идентификатор сессии браузера.
+- the first argument — an instance of `WebdriverIO`;
+- the second argument — an object of the form `{ browserId, sessionId }`, where _browserId_ is the name of the browser, and _sessionId_ is the browser session identifier.
## BEGIN {#begin}
**sync | master**
-Событие `BEGIN` триггерится перед выполнением теста, но после того как все раннеры будут инициализированы. Обработчик события выполняется синхронно.
+The `BEGIN` event is triggered before the test is run, but after all runners are initialized. The event handler is executed synchronously.
-### Подписка на событие {#begin_subscription}
+### Subscribing to the event {#begin_subscription}
```javascript
testplane.on(testplane.events.BEGIN, () => {
- console.info("Выполняется обработка события BEGIN...");
+ console.info("Processing BEGIN event...");
});
```
-#### Параметры обработчика {#begin_cb_params}
+#### Handler parameters {#begin_cb_params}
-В обработчик события никакие данные не передаются.
+No data is passed to the event handler.
-### Пример использования {#begin_usage}
+### Usage example {#begin_usage}
-Смотрите пример [выше](#new_worker_process_usage) про организацию взаимодействия мастер-процесса testplane со всеми воркерами.
+See the example [above](#new_worker_process_usage) about organizing interaction between the Testplane master process and all workers.
## END {#end}
**sync | master**
-Событие `END` триггерится прямо перед событием `RUNNER_END`. Обработчик события выполняется синхронно.
+The `END` event is triggered right before the `RUNNER_END` event. The event handler is executed synchronously.
-### Подписка на событие {#end_subscription}
+### Subscribing to the event {#end_subscription}
```javascript
testplane.on(testplane.events.END, () => {
- console.info("Выполняется обработка события END...");
+ console.info("Processing END event...");
});
```
-#### Параметры обработчика {#end_cb_params}
+#### Handler parameters {#end_cb_params}
-В обработчик события никакие данные не передаются.
+No data is passed to the event handler.
-### Пример использования {#end_usage}
+### Usage example {#end_usage}
-В качестве примера использования события [END](#end) смотрите раздел «[Задерживаем обработку события](#events_interception_delaying_events)».
+For an example of using the [END](#end) event, see the section “[Delaying event processing](#events_interception_delaying_events)”.
## SUITE_BEGIN {#suite_begin}
**sync | master | can be intercepted**
-Событие `SUITE_BEGIN` триггерится перед выполнением набора тестов _(suite)_. Обработчик события выполняется синхронно.
+The `SUITE_BEGIN` event is triggered before a test suite is run. The event handler is executed synchronously.
-### Подписка на событие {#suite_begin_subscription}
+### Subscribing to the event {#suite_begin_subscription}
```javascript
testplane.on(testplane.events.SUITE_BEGIN, suite => {
- console.info(`Выполняется обработка события SUITE_BEGIN для "${suite.fullTitle()}"...`);
+ console.info(`Processing SUITE_BEGIN event for "${suite.fullTitle()}"...`);
});
```
-#### Параметры обработчика {#suite_begin_cb_params}
+#### Handler Parameters {#suite_begin_cb_params}
-В обработчик события передается инстанс _suite_.
+An instance of _suite_ is passed to the event handler.
-### Перехват события {#suite_begin_interception}
+### Event Interception {#suite_begin_interception}
```javascript
testplane.intercept(testplane.events.SUITE_BEGIN, ({ event, data: suite }) => {
- console.info(`Выполняется перехват события SUITE_BEGIN для "${suite.fullTitle()}"...`);
+ console.info(`Intercepting SUITE_BEGIN event for "${suite.fullTitle()}"...`);
});
```
@@ -944,25 +943,25 @@ testplane.intercept(testplane.events.SUITE_BEGIN, ({ event, data: suite }) => {
**sync | master | can be intercepted**
-Событие `SUITE_END` триггерится после окончания выполнения набора тестов _(suite)_. Обработчик события выполняется синхронно.
+The `SUITE_END` event is triggered after the test suite _(suite)_ has finished executing. The event handler is executed synchronously.
-### Подписка на событие {#suite_end_subscription}
+### Event Subscription {#suite_end_subscription}
```javascript
testplane.on(testplane.events.SUITE_END, suite => {
- console.info(`Выполняется обработка события SUITE_END для "${suite.fullTitle()}"...`);
+ console.info(`Handling SUITE_END event for "${suite.fullTitle()}"...`);
});
```
-#### Параметры обработчика {#suite_end_cb_params}
+#### Handler Parameters {#suite_end_cb_params}
-В обработчик события передается инстанс _suite_.
+An instance of _suite_ is passed to the event handler.
-### Перехват события {#suite_end_interception}
+### Event Interception {#suite_end_interception}
```javascript
testplane.intercept(testplane.events.SUITE_END, ({ event, data: suite }) => {
- console.info(`Выполняется перехват события SUITE_END для "${suite.fullTitle()}"...`);
+ console.info(`Intercepting SUITE_END event for "${suite.fullTitle()}"...`);
});
```
@@ -970,300 +969,300 @@ testplane.intercept(testplane.events.SUITE_END, ({ event, data: suite }) => {
**sync | master | can be intercepted**
-Событие `TEST_BEGIN` триггерится перед выполнением теста. Обработчик события выполняется синхронно.
+The `TEST_BEGIN` event is triggered before the test is executed. The event handler is executed synchronously.
-### Подписка на событие {#test_begin_subscription}
+### Event Subscription {#test_begin_subscription}
```javascript
testplane.on(testplane.events.TEST_BEGIN, test => {
if (test.pending) {
- // тест отключен, ничего делать не нужно
+ // test is disabled, no action needed
return;
}
console.info(
- `Выполняется обработка события TEST_BEGIN ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling TEST_BEGIN event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#test_begin_cb_params}
+#### Handler Parameters {#test_begin_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Перехват события {#test_begin_interception}
+### Event Interception {#test_begin_interception}
```javascript
testplane.intercept(testplane.events.TEST_BEGIN, ({ event, data: test }) => {
console.info(
- `Выполняется перехват события TEST_BEGIN ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Intercepting TEST_BEGIN event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-### Пример использования {#test_begin_usage}
+### Usage Example {#test_begin_usage}
-Смотрите в качестве примера «[Профилирование прогона тестов](#usage_profiling_tests_runs)».
+See the example "Profiling Test Runs" [here](#usage_profiling_tests_runs).
## TEST_END {#test_end}
**sync | master | can be intercepted**
-Событие `TEST_END` триггерится после окончания выполнения теста. Обработчик события выполняется синхронно. Также событие можно перехватить и изменить в специальном обработчике.
+The `TEST_END` event is triggered after the test has finished executing. The event handler is executed synchronously. The event can also be intercepted and modified in a special handler.
-### Подписка на событие {#test_end_subscription}
+### Event Subscription {#test_end_subscription}
```javascript
testplane.on(testplane.events.TEST_END, test => {
if (test.pending) {
- // тест отключен, ничего делать не нужно
+ // test is disabled, no action needed
return;
}
console.info(
- `Выполняется обработка события TEST_END ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling TEST_END event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#test_end_cb_params}
+#### Handler Parameters {#test_end_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Перехват события {#test_end_interception}
+### Event Interception {#test_end_interception}
```javascript
testplane.intercept(testplane.events.TEST_END, ({ event, data: test }) => {
console.info(
- `Выполняется перехват события TEST_END ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Intercepting TEST_END event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-### Пример использования {#test_end_usage}
+### Usage Example {#test_end_usage}
-Смотрите в качестве примера «[Профилирование прогона тестов](#usage_profiling_tests_runs)».
+See the example "Profiling Test Runs" [here](#usage_profiling_tests_runs).
## TEST_PASS {#test_pass}
**sync | master | can be intercepted**
-Событие `TEST_PASS` триггерится, если тест успешно прошел. Обработчик события выполняется синхронно. Также событие можно перехватить и изменить в специальном обработчике.
+The `TEST_PASS` event is triggered if the test passes successfully. The event handler is executed synchronously. The event can also be intercepted and modified in a special handler.
-### Подписка на событие {#test_pass_subscription}
+### Event Subscription {#test_pass_subscription}
```javascript
testplane.on(testplane.events.TEST_PASS, test => {
console.info(
- `Выполняется обработка события TEST_PASS ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling TEST_PASS event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#test_pass_cb_params}
+#### Handler Parameters {#test_pass_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Перехват события {#test_pass_interception}
+### Event Interception {#test_pass_interception}
```javascript
testplane.intercept(testplane.events.TEST_PASS, ({ event, data: test }) => {
console.info(
- `Выполняется перехват события TEST_PASS ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Intercepting TEST_PASS event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-### Пример использования {#test_pass_usage}
+### Usage Example {#test_pass_usage}
-Смотрите в качестве примера «[Сбор статистики о прогоне тестов](#usage_collecting_stats)».
+See the example "Collecting Test Run Statistics" [here](#usage_collecting_stats).
## TEST_FAIL {#test_fail}
**sync | master | can be intercepted**
-Событие `TEST_FAIL` триггерится, если тест упал. Обработчик события выполняется синхронно. Также событие можно перехватить и изменить в специальном обработчике.
+The `TEST_FAIL` event is triggered if the test fails. The event handler is executed synchronously. The event can also be intercepted and modified in a special handler.
-### Подписка на событие {#test_fail_subscription}
+### Event Subscription {#test_fail_subscription}
```javascript
testplane.on(testplane.events.TEST_FAIL, test => {
console.info(
- `Выполняется обработка события TEST_FAIL ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling TEST_FAIL event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#test_fail_cb_params}
+#### Handler Parameters {#test_fail_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Перехват события {#test_fail_interception}
+### Event Interception {#test_fail_interception}
```javascript
testplane.intercept(testplane.events.TEST_FAIL, ({ event, data }) => {
console.info(
- `Выполняется перехват события TEST_PASS ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Intercepting TEST_FAIL event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-### Пример использования {#test_fail_usage}
+### Usage Example {#test_fail_usage}
-Смотрите в качестве примера «[Сбор статистики о прогоне тестов](#usage_collecting_stats)».
+See the example "Collecting Test Run Statistics" [here](#usage_collecting_stats).
## TEST_PENDING {#test_pending}
**sync | master**
-Событие `TEST_PENDING` триггерится, если тест отключен. Обработчик события выполняется синхронно.
+The `TEST_PENDING` event is triggered if the test is disabled. The event handler is executed synchronously.
-### Подписка на событие {#test_pending_subscription}
+### Event Subscription {#test_pending_subscription}
```javascript
testplane.on(testplane.events.TEST_PENDING, test => {
console.info(
- `Выполняется обработка события TEST_PENDING ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling TEST_PENDING event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#test_pending_cb_params}
+#### Handler Parameters {#test_pending_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Пример использования {#test_pending_usage}
+### Usage Example {#test_pending_usage}
-Смотрите в качестве примера «[Сбор статистики о прогоне тестов](#usage_collecting_stats)».
+See the example "Collecting Test Run Statistics" [here](#usage_collecting_stats).
## RETRY {#retry}
**sync | master | can be intercepted**
-Событие `RETRY` триггерится, если тест упал, но ушел на повторный прогон, так называемый «ретрай». Возможности повторного прогона теста определяются настройками [retry][browsers-retry] и [shouldRetry][browsers-should-retry] в конфиге testplane. Также на это могут влиять плагины testplane, если они модифицируют «на лету» указанные выше настройки. Смотрите для примера плагины [retry-limiter][retry-limiter] и [testplane-retry-progressive][testplane-retry-progressive].
+The `RETRY` event is triggered if the test fails but is retried. The retry capabilities are determined by the [retry][browsers-retry] and [shouldRetry][browsers-should-retry] settings in the Testplane config. Testplane plugins can also influence this by modifying these settings on the fly. See plugins [retry-limiter][retry-limiter] and [testplane-retry-progressive][testplane-retry-progressive] for examples.
-Обработчик события выполняется синхронно. Также событие можно перехватить и изменить в специальном обработчике.
+The event handler is executed synchronously. The event can also be intercepted and modified in a special handler.
-### Подписка на событие {#retry_subscription}
+### Event Subscription {#retry_subscription}
```javascript
testplane.on(testplane.events.RETRY, test => {
console.info(
- `Выполняется обработка события RETRY ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Handling RETRY event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-#### Параметры обработчика {#retry_cb_params}
+#### Handler Parameters {#retry_cb_params}
-В обработчик события передается инстанс теста.
+An instance of the test is passed to the event handler.
-### Перехват события {#retry_interception}
+### Event Interception {#retry_interception}
```javascript
testplane.intercept(testplane.events.RETRY, ({ event, data: test }) => {
console.info(
- `Выполняется перехват события RETRY ` +
- `для теста "${test.fullTitle()}" в браузере "${test.browserId}"...`,
+ `Intercepting RETRY event ` +
+ `for test "${test.fullTitle()}" in browser "${test.browserId}"...`,
);
});
```
-### Пример использования {#test_retry_usage}
+### Usage Example {#test_retry_usage}
-Смотрите в качестве примера «[Сбор статистики о прогоне тестов](#usage_collecting_stats)».
+See the example "Collecting Test Run Statistics" [here](#usage_collecting_stats).
## ERROR {#error}
**sync | master**
-Событие `ERROR` триггерится только из [перехватчиков событий](#events_interception) в случае критической ошибки. Обработчик события выполняется синхронно.
+The `ERROR` event is triggered only from [event interceptors](#events_interception) in case of a critical error. The event handler is executed synchronously.
-### Подписка на событие {#error_subscription}
+### Event Subscription {#error_subscription}
```javascript
testplane.on(testplane.events.ERROR, error => {
- console.info("Выполняется обработка события ERROR...");
+ console.info("Handling ERROR event...");
});
```
-#### Параметры обработчика {#error_cb_params}
+#### Handler Parameters {#error_cb_params}
-В обработчик события передается [объект с ошибкой][error-object].
+An [error object][error-object] is passed to the event handler.
-### Пример использования {#error_usage}
+### Usage Example {#error_usage}
-Смотрите в качестве примера «[Профилирование прогона тестов](#usage_profiling_tests_runs)».
+See the example "Profiling Test Runs" [here](#usage_profiling_tests_runs).
## INFO {#info}
**reserved**
-Зарезервировано.
+Reserved.
## WARNING {#warning}
**reserved**
-Зарезервировано.
+Reserved.
## EXIT {#exit}
**async | master**
-Событие `EXIT` триггерится при получении сигнала [SIGTERM][sigterm] (например, после нажатия `Ctrl + C`). Обработчик события может быть асинхронным.
+The `EXIT` event is triggered upon receiving the [SIGTERM][sigterm] signal (e.g., after pressing `Ctrl + C`). The event handler can be asynchronous.
-### Подписка на событие {#exit_subscription}
+### Event Subscription {#exit_subscription}
```javascript
testplane.on(testplane.events.EXIT, async () => {
- console.info("Выполняется обработка события EXIT...");
+ console.info("Handling EXIT event...");
});
```
-#### Параметры обработчика {#exit_cb_params}
+#### Handler Parameters {#exit_cb_params}
-В обработчик события никакие данные не передаются.
+No data is passed to the event handler.
## NEW_BROWSER {#new_browser}
**sync | worker**
-Событие `NEW_BROWSER` триггерится после того, как создан новый инстанс браузера. Обработчик события выполняется синхронно. Событие доступно только в воркерах testplane.
+The `NEW_BROWSER` event is triggered after a new browser instance is created. The event handler is executed synchronously. The event is only available in Testplane workers.
-### Подписка на событие {#new_browser_subscription}
+### Event Subscription {#new_browser_subscription}
```javascript
testplane.on(testplane.events.NEW_BROWSER, (browser, { browserId, browserVersion }) => {
- console.info("Выполняется обработка события NEW_BROWSER...");
+ console.info("Handling NEW_BROWSER event...");
});
```
-#### Параметры обработчика {#new_browser_cb_params}
+#### Handler Parameters {#new_browser_cb_params}
-В обработчик события передаются 2 аргумента:
+Two arguments are passed to the event handler:
-- первый аргумент — инстанс `WebdriverIO`;
-- второй аргумент — объект вида `{ browserId, versionId }`, где _browserId_ — это имя браузера, а _browserVersion_ — версия браузера.
+- The first argument is an instance of `WebdriverIO`;
+- The second argument is an object of the form `{ browserId, versionId }`, where _browserId_ is the name of the browser, and _browserVersion_ is the browser version.
-### Пример реализации {#new_browser_usage}
+### Implementation Example {#new_browser_usage}
-Событие [NEW_BROWSER](#new_browser) часто используют для того, чтобы добавить новые команды к браузеру, или как-то дополнить уже существующие команды. Например, некоторые плагины добавляют кастомные команды к браузеру в обработчике события [NEW_BROWSER](#new_browser).
+The [NEW_BROWSER](#new_browser) event is often used to add new commands to the browser or to extend existing commands. For example, some plugins add custom commands to the browser in the [NEW_BROWSER](#new_browser) event handler.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -1289,37 +1288,37 @@ module.exports = (testplane, opts) => {
**sync | worker**
-Событие `UPDATE_REFERENCE` триггерится после обновления эталонных скриншотов. Обработчик события выполняется синхронно. Событие доступно только в воркерах testplane.
+The `UPDATE_REFERENCE` event is triggered after the reference screenshots are updated. The event handler is executed synchronously. The event is only available in testplane workers.
-### Подписка на событие {#update_reference_subscription}
+### Event Subscription {#update_reference_subscription}
```javascript
testplane.on(testplane.events.UPDATE_REFERENCE, ({ state, refImg }) => {
- console.info("Выполняется обработка события UPDATE_REFERENCE...");
+ console.info("Handling UPDATE_REFERENCE event...");
});
```
-#### Параметры обработчика {#update_reference_cb_params}
+#### Handler Parameters {#update_reference_cb_params}
-В обработчик события передается объект следующего формата:
+An object of the following format is passed to the event handler:
```javascript
{
- state, // String: состояние, которое отражает данный скриншот, например: plain, map-view, scroll-left и т. д.
- refImg; // Object: типа { path, size: { width, height } }, описывающий эталонный скриншот
+ state, // String: the state that the screenshot reflects, e.g., plain, map-view, scroll-left, etc.
+ refImg; // Object: of type { path, size: { width, height } }, describing the reference screenshot
}
```
-Параметр _refImg.path_ хранит путь к эталонному скриншоту на файловой системе, а _refImg.size.width_ и _refImg.size.height_ хранят, соответственно, ширину и высоту эталонного скриншота.
+The _refImg.path_ parameter stores the path to the reference screenshot on the file system, while _refImg.size.width_ and _refImg.size.height_ store the width and height of the reference screenshot, respectively.
-### Пример использования {#update_reference_usage}
+### Usage Example {#update_reference_usage}
-Рассмотрим в качестве примера [реализацию][testplane-image-minifier-index] плагина [testplane-image-minifier][testplane-image-minifier], в котором при сохранении эталонных скриншотов происходит их автоматическое сжатие с заданным уровнем компрессии.
+Consider the example of the [implementation][testplane-image-minifier-index] of the [testplane-image-minifier][testplane-image-minifier] plugin, which automatically compresses reference screenshots with a specified compression level when they are saved.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -1331,7 +1330,7 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
@@ -1345,13 +1344,13 @@ module.exports = (testplane, opts) => {
-## Примеры использования событий
+## Event Usage Examples
-### Запуск тестов из заданного списка {#usage_running_filtered_tests}
+### Running Tests from a Specified List {#usage_running_filtered_tests}
-Рассмотрим в качестве примера [реализацию][testplane-test-filter-index] плагина [testplane-test-filter][testplane-test-filter], с помощью которого можно запускать только заданные в json-файле тесты.
+Consider the example of the [implementation][testplane-test-filter-index] of the [testplane-test-filter][testplane-test-filter] plugin, which allows running only the tests specified in a JSON file.
-В этом примере используются следующие события и методы API testplane:
+In this example, the following testplane events and API methods are used:
- [INIT](#init)
- [AFTER_TESTS_READ](#after_tests_read)
@@ -1361,7 +1360,7 @@ module.exports = (testplane, opts) => {
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -1374,20 +1373,20 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
if (testplane.isWorker()) {
- // в воркерах testplane нам нечего делать – уходим
+ // nothing to do in testplane workers – exit
return;
}
let input;
testplane.on(testplane.events.INIT, async () => {
- // читаем файл со списком тестов, которые надо прогнать;
- // readFile возвращает json, который содержит массив вида:
+ // read the file with the list of tests to run;
+ // readFile returns a JSON containing an array like:
// [
// { "fullTitle": "test-1", "browserId": "bro-1" },
// { "fullTitle": "test-2", "browserId": "bro-2" }
@@ -1397,15 +1396,15 @@ module.exports = (testplane, opts) => {
testplane.on(testplane.events.AFTER_TESTS_READ, testCollection => {
if (_.isEmpty(input)) {
- // список тестов – пустой – будем запускать все тесты,
- // то есть не трогаем исходную коллекцию (testCollection) тестов
+ // test list is empty – run all tests,
+ // i.e., do not modify the original test collection (testCollection)
return;
}
- // отключаем все тесты
+ // disable all tests
testCollection.disableAll();
- // а теперь включаем только те, которые были переданы в json-файле
+ // enable only those specified in the JSON file
input.forEach(({ fullTitle, browserId }) => {
testCollection.enableTest(fullTitle, browserId);
});
@@ -1415,11 +1414,11 @@ module.exports = (testplane, opts) => {
-### Сбор статистики о прогоне тестов {#usage_collecting_stats}
+### Collecting Test Run Statistics {#usage_collecting_stats}
-Рассмотрим в качестве примера [реализацию][json-reporter-index] плагина [json-reporter][json-reporter].
+Consider the example of the [implementation][json-reporter-index] of the [json-reporter][json-reporter] plugin.
-В этом примере используются следующие события testplane:
+In this example, the following testplane events are used:
- [TEST_PASS](#test_pass)
- [TEST_FAIL](#test_fail)
@@ -1430,7 +1429,7 @@ module.exports = (testplane, opts) => {
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -1443,44 +1442,44 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
- // collector будет аккумулировать статистику
+ // collector will accumulate statistics
const collector = Collector.create(testplaneToolCollector, pluginConfig);
- // подписываемся на соответствующие события,
- // чтобы в итоге получить необходимую статистику:
+ // subscribe to the relevant events
+ // to ultimately obtain the necessary statistics:
- // - сколько тестов выполнилось успешно
+ // - how many tests passed successfully
testplane.on(testplane.events.TEST_PASS, data => collector.addSuccess(data));
- // - сколько тестов упало
+ // - how many tests failed
testplane.on(testplane.events.TEST_FAIL, data => collector.addFail(data));
- // - сколько было отключено (заскипано)
+ // - how many were skipped
testplane.on(testplane.events.TEST_PENDING, data => collector.addSkipped(data));
- // - количество ретраев
+ // - number of retries
testplane.on(testplane.events.RETRY, data => collector.addRetry(data));
- // после того, как прогон тестов завершен, сохраняем статистику в json-файл
+ // after the test run is complete, save the statistics to a JSON file
testplane.on(testplane.events.RUNNER_END, () => collector.saveFile());
};
```
-### Автоматический запуск dev-севера {#usage_starting_dev_server}
+### Automatic Launch of the Dev Server {#usage_starting_dev_server}
-Реализуем схематично плагин `testplane-dev-server` для testplane, чтобы при каждом запуске testplane автоматически поднимать dev-сервер.
+We will schematically implement the `testplane-dev-server` plugin for testplane so that the dev server is automatically started each time testplane is launched.
-Запуск dev-сервера — опционален: для этого плагин добавляет специальную опцию `--dev-server` к testplane, позволяя разработчику указывать при запуске testplane, нужно ли поднимать dev-сервер.
+Starting the dev server is optional: the plugin adds a special `--dev-server` option to testplane, allowing the developer to specify whether to start the dev server when launching testplane.
-Помимо этого, плагин позволяет задать параметр `devServer` в своем конфиге.
+Additionally, the plugin allows setting the `devServer` parameter in its configuration.
-В этом примере используются следующие события testplane:
+This example uses the following testplane events:
- [CLI](#cli)
- [INIT](#init)
@@ -1488,66 +1487,64 @@ module.exports = (testplane, opts) => {
-Нажмите, чтобы посмотреть код
+Click to view the code
-**Код плагина**
+**Plugin Code**
```javascript
-const http = require('http');
-const parseConfig = require('./config');
+const http = require("http");
+const parseConfig = require("./config");
module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
- if (!pluginConfig.enabled testplane.isWorker()) {
- // или плагин отключен, или мы находимся в контексте воркера – уходим
+ if (!pluginConfig.enabled || testplane.isWorker()) {
+ // either the plugin is disabled, or we are in the worker context – exit
return;
}
let program;
- testplane.on(testplane.events.CLI, (cli) => {
- // нужно сохранить ссылку на инстанс commander'а (https://github.com/tj/commander.js),
- // чтобы потом проверить наличие опции
+ testplane.on(testplane.events.CLI, cli => {
+ // need to save a reference to the commander instance (https://github.com/tj/commander.js),
+ // to later check for the option
program = cli;
- // добавляем к testplane опцию --dev-server,
- // чтобы пользователь мог явно указывать, когда надо запустить dev-сервер
- cli.option('--dev-server', 'run dev-server');
+ // add the --dev-server option to testplane,
+ // so the user can explicitly specify when to start the dev server
+ cli.option("--dev-server", "run dev-server");
});
testplane.on(testplane.events.INIT, () => {
- // dev-сервер может быть запущен как через указание опции --dev-server
- // при запуске testplane, так и в настройках плагина
- const devServer = program && program.devServer pluginConfig.devServer;
+ // the dev server can be started either by specifying the --dev-server option
+ // when launching testplane, or in the plugin settings
+ const devServer = (program && program.devServer) || pluginConfig.devServer;
if (!devServer) {
- // если dev-сервер запускать не нужно – уходим
+ // if the dev server doesn't need to be started – exit
return;
}
- // контент, который отдает dev-сервер
- const content = 'Hello, World! ';
+ // content served by the dev server
+ const content = "Hello, World! ";
- // создаем сервер и начинаем слушать порт 3000
- http
- .createServer((req, res) => res.end(content))
- .listen(3000);
+ // create the server and start listening on port 3000
+ http.createServer((req, res) => res.end(content)).listen(3000);
- // по адресу http://localhost:3000/index.html будет отдаваться: Hello, World!
+ // at http://localhost:3000/index.html, the content will be: Hello, World!
});
};
```
-**Конфиг testplane**
+**Testplane Configuration**
```javascript
module.exports = {
- // тесты будут запускаться в локальном браузере,
- // см. про selenium-standalone в разделе «Быстрый старт»
+ // tests will be run in a local browser,
+ // see selenium-standalone in the "Quick Start" section
gridUrl: "http://localhost:4444/wd/hub",
- // указываем путь к dev-серверу
+ // specify the path to the dev server
baseUrl: "http://localhost:3000",
browsers: {
@@ -1559,25 +1556,25 @@ module.exports = {
},
plugins: {
- // добавляем наш плагин к списку плагинов
+ // add our plugin to the list of plugins
"testplane-dev-server": {
enabled: true,
- // по умолчанию dev-сервер запускаться не будет
+ // by default, the dev server will not be started
devServer: false,
},
},
};
```
-**Код теста**
+**Test Code**
```javascript
const { assert } = require("chai");
describe("example", async () => {
it("should find hello world", async ({ browser }) => {
- // baseUrl, относительно которого задается index.html,
- // указан в конфиге testplane выше
+ // baseUrl, relative to which index.html is specified,
+ // is set in the testplane configuration above
await browser.url("index.html");
const title = await browser.$("h1").getText();
@@ -1588,29 +1585,29 @@ describe("example", async () => {
-### Запуск тестов с хелперами {#usage_running_tests_with_helpers}
+### Running Tests with Helpers {#usage_running_tests_with_helpers}
-Рассмотрим [реализацию][testplane-passive-browsers-index] плагина [testplane-passive-browsers][testplane-passive-browsers].
+Let's consider the [implementation][testplane-passive-browsers-index] of the [testplane-passive-browsers][testplane-passive-browsers] plugin.
-Используя события [BEFORE_FILE_READ](#before_file_read) и [AFTER_TESTS_READ](#after_tests_read) плагин позволяет добавить специальный хелпер, с помощью которого можно запускать указанные тесты или наборы тестов _(suites)_ в заданных браузерах. Такая логика может пригодиться, если вам не нужно запускать большинство тестов в каких-то браузерах. Но при этом некоторые тесты вы все же хотели бы запускать в этих (пассивных) браузерах, чтобы проверять браузеро-специфичные вещи.
+Using the [BEFORE_FILE_READ](#before_file_read) and [AFTER_TESTS_READ](#after_tests_read) events, the plugin allows adding a special helper that can run specified tests or test suites in given browsers. This logic can be useful if you don't need to run most tests in certain browsers. However, you might still want to run some tests in these (passive) browsers to check browser-specific things.
-В примере ниже мы немного упростили код плагина, задав название хелпера `also` непосредственно в коде, а не беря его из конфига плагина.
+In the example below, we simplified the plugin code a bit by setting the helper name `also` directly in the code, rather than taking it from the plugin configuration.
-В этом примере используются следующие события testplane:
+This example uses the following testplane events:
- [BEFORE_FILE_READ](#before_file_read)
- [AFTER_TESTS_READ](#after_tests_read)
-Также используются [testParser](#test_parser) и [testCollection][test-collection].
+It also uses [testParser](#test_parser) and [testCollection][test-collection].
-Нажмите, чтобы посмотреть код
+Click to view the code
-**Код плагина**
+**Plugin Code**
```javascript
const _ = require("lodash");
@@ -1619,14 +1616,14 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
if (testplane.isWorker()) {
testplane.on(testplane.events.BEFORE_FILE_READ, ({ testParser }) => {
- // в воркерах хелпер ничего делать не будет,
- // задаем для него "no operation"
+ // in workers, the helper will do nothing,
+ // set it to "no operation"
testParser.setController("also", { in: _.noop });
});
@@ -1638,16 +1635,16 @@ module.exports = (testplane, opts) => {
testplane.on(testplane.events.BEFORE_FILE_READ, ({ testParser }) => {
testParser.setController("also", {
- // matcher – параметр, который передается в хелпер also.in();
- // может быть строкой, регулярным выражением или массивом строк/regexp;
- // в нашем случае matcher определяет пассивные браузеры,
- // в которых нужно запустить тест (тесты)
+ // matcher – parameter passed to the also.in() helper;
+ // can be a string, regular expression, or array of strings/regexps;
+ // in our case, the matcher defines the passive browsers
+ // in which the test(s) need to be run
in: function (matcher) {
const storage = this.suites ? suitesToRun : testsToRun;
if (!shouldRunInBro(this.browserId, matcher)) {
- // если текущего браузера нет в том списке,
- // который указан в хелпере, то ничего не делаем
+ // if the current browser is not in the list
+ // specified in the helper, do nothing
return;
}
@@ -1655,19 +1652,19 @@ module.exports = (testplane, opts) => {
storage[this.browserId] = [];
}
- // иначе собираем айдишники тестов,
- // которые должны быть запущены для текущего браузера
+ // otherwise, collect the IDs of the tests
+ // that should be run for the current browser
storage[this.browserId].push({ id: this.id() });
},
});
});
- // используем prependListener, чтобы изначально включить тесты только
- // в указанных пассивных браузерах, а затем уже будут включены все остальные тесты,
- // которые должны быть включены
+ // use prependListener to initially enable tests only
+ // in the specified passive browsers, then all other tests
+ // that should be enabled will be enabled
testplane.prependListener(testplane.events.AFTER_TESTS_READ, testCollection => {
- // формируем список пассивных браузеров как пересечение браузеров для тестов,
- // которые были прочитаны, и браузеров из конфига плагина
+ // form the list of passive browsers as the intersection of browsers for tests
+ // that were read, and browsers from the plugin configuration
const passiveBrowserIds = getPassiveBrowserIds(testCollection, pluginConfig);
passiveBrowserIds.forEach(passiveBrowserId => {
@@ -1681,8 +1678,8 @@ module.exports = (testplane, opts) => {
);
};
- // отключаем все тесты, кроме тех, что должны быть запущены
- // в указанных пассивных браузерах
+ // disable all tests except those that should be run
+ // in the specified passive browsers
testCollection.eachTest(browserId, test => {
test.disabled = !shouldRunTest(test);
});
@@ -1691,7 +1688,7 @@ module.exports = (testplane, opts) => {
};
```
-**Код теста**
+**Test Code**
```javascript
testplane.also.in("ie6");
@@ -1709,14 +1706,14 @@ describe("suite", () => {
-### Профилирование прогона тестов {#usage_profiling_tests_runs}
+### Profiling Test Runs {#usage_profiling_tests_runs}
-Рассмотрим схематичную реализацию профилирования прогона тестов. При каждом запуске теста мы будем засекать время его запуска, а при завершении — время завершения. Всю информацию мы будем сохранять в стрим, который по завершению раннера будет закрываться.
+Let's consider a schematic implementation of profiling test runs. Each time a test starts, we will record its start time, and upon completion, the end time. All information will be saved to a stream, which will be closed upon the runner's completion.
-Нажмите, чтобы посмотреть код
+Click to view the code
@@ -1728,50 +1725,50 @@ module.exports = (testplane, opts) => {
const pluginConfig = parseConfig(opts);
if (!pluginConfig.enabled) {
- // плагин отключен – уходим
+ // plugin is disabled – exit
return;
}
let writeStream;
testplane.on(testplane.events.RUNNER_START, () => {
- // создаем стрим для записи данных профилирования
+ // create a stream for writing profiling data
writeStream = StreamWriter.create(pluginConfig.path);
});
testplane.on(testplane.events.TEST_BEGIN, test => {
if (test.pending) {
- // тест отключен – ничего делать не нужно
+ // test is disabled – do nothing
return;
}
- // засекаем время запуска теста
+ // record the test start time
test.timeStart = Date.now();
});
testplane.on(testplane.events.TEST_END, test => {
if (test.pending) {
- // тест отключен – ничего делать не нужно
+ // test is disabled – do nothing
return;
}
- // засекаем время завершения теста
+ // record the test end time
test.timeEnd = Date.now();
- // и сохраняем информацию о тесте в стрим
+ // and save the test information to the stream
writeStream.write(test);
});
- // в случае ошибки закрываем стрим
+ // in case of an error, close the stream
testplane.on(testplane.events.ERROR, () => writeStream.end());
- // после завершения раннера закрываем стрим
+ // after the runner completes, close the stream
testplane.on(testplane.events.RUNNER_END, () => writeStream.end());
};
```
-Более подробную [реализацию][testplane-profiler-index] можно посмотреть в плагине [testplane-profiler][testplane-profiler].
+A more detailed [implementation][testplane-profiler-index] can be found in the [testplane-profiler][testplane-profiler] plugin.
[process-send]: https://nodejs.org/docs/latest-v12.x/api/process.html#process_process_send_message_sendhandle_options_callback
[test-collection]: ../testplane-api#test_collection
@@ -1789,7 +1786,7 @@ module.exports = (testplane, opts) => {
[json-reporter-index]: https://github.com/gemini-testing/json-reporter/blob/master/testplane.js
[commander]: https://github.com/gemini-testing/commander.js
[commander-options]: https://github.com/tj/commander.js#options
-[cli-wiki]: https://ru.wikipedia.org/wiki/Интерфейс_командной_строки
+[cli-wiki]: https://en.wikipedia.org/wiki/Command-line_interface
[testplane-run]: ../testplane-api#testplane_run
[system]: ../../config/system
[system-workers]: ../../config/system#workers
@@ -1797,7 +1794,7 @@ module.exports = (testplane, opts) => {
[browser-tests-per-session]: ../../config/browsers#tests_per_session
[browser-sessions-per-browser]: ../../config/browsers#sessions_per_browser
[skip-in]: ../../guides/how-to-skip-test-in-browsers
-[sigterm]: https://ru.wikipedia.org/wiki/Сигнал_(Unix)
+[sigterm]: https://en.wikipedia.org/wiki/Signal_(Unix)
[testplane-test-repeater-index]: https://github.com/gemini-testing/testplane-test-repeater/blob/master/lib/index.js
[testplane-test-repeater]: https://github.com/gemini-testing/testplane-test-repeater
[express]: https://github.com/expressjs/express
@@ -1809,9 +1806,9 @@ module.exports = (testplane, opts) => {
[testplane-profiler-index]: https://github.com/gemini-testing/testplane-profiler/blob/master/index.js
[hermione-hide-scrollbars]: https://github.com/gemini-testing/hermione-hide-scrollbars
[hermione-hide-scrollbars-index]: https://github.com/gemini-testing/hermione-hide-scrollbars/blob/master/index.js
-[vnc]: https://ru.wikipedia.org/wiki/Virtual_Network_Computing
+[vnc]: https://en.wikipedia.org/wiki/Virtual_Network_Computing
[browsers-retry]: ../../config/browsers#retry
[browsers-should-retry]: ../../config/browsers#should_retry
[retry-limiter]: ../../plugins/retry-limiter
[testplane-retry-progressive]: ../../plugins/testplane-retry-progressive
-[error-object]: https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Error
+[error-object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
diff --git a/docs/reference/webdriver-vs-cdp.mdx b/docs/reference/webdriver-vs-cdp.mdx
index 81f6dfc..16378ba 100644
--- a/docs/reference/webdriver-vs-cdp.mdx
+++ b/docs/reference/webdriver-vs-cdp.mdx
@@ -1,46 +1,46 @@
-# Протоколы общения с браузером: Webdriver vs Chrome DevTools Protocol
+# Communication Protocols with the Browser: WebDriver vs Chrome DevTools Protocol
-## Обзор
+## Overview
-В мире автоматического тестирования интерфейсов сейчас наиболее популярны следующие протоколы для управления браузером: [WebDriver][webdriver] и [Chrome DevTools Protocol (CDP)][cdp].
+In the world of automated UI testing, the most popular protocols for controlling the browser are currently [WebDriver][webdriver] and [Chrome DevTools Protocol (CDP)][cdp].
## WebDriver
-[WebDriver][webdriver] — это стандартизованный REST API протокол. Разработчики браузеров поддерживают данный протокол в своих драйверах — [chromedriver][chromedriver], [geckodriver][geckodriver], и т. п., — которые являются посредниками (прокси) между клиентом, отправляющим запросы, и самими браузерами. Такой посредник нужен, так как браузеры написаны совершенно по-разному и общение между драйвером и браузером никак не стандартизированно.
+[WebDriver][webdriver] is a standardized REST API protocol. Browser developers support this protocol in their drivers — [chromedriver][chromedriver], [geckodriver][geckodriver], etc. — which act as intermediaries (proxies) between the client sending requests and the browsers themselves. Such an intermediary is needed because browsers are written completely differently, and communication between the driver and the browser is not standardized.
-Кроме этого, WebDriver-протокол используется в качестве базового протокола для автоматизации мобильных устройств на _iOS/Android_ с использованием [Appium][appium].
+Additionally, the WebDriver protocol is used as the base protocol for automating mobile devices on _iOS/Android_ using [Appium][appium].
-![WebDriver-протокол](/img/docs/reference/webdriver-vs-cdp.webdriver-protocol.png)
+![WebDriver Protocol](/img/docs/reference/webdriver-vs-cdp.webdriver-protocol.png)
-### Плюсы
+### Pros
-- официальный стандарт, который поддерживается всеми популярными браузерами;
-- поддержка автоматизации на мобильных устройствах;
-- может быть использован как на локальной машине, так и на удаленной;
+- Official standard supported by all popular browsers;
+- Support for automation on mobile devices;
+- Can be used both on a local machine and remotely;
-### Минусы
+### Cons
-- из коробки не позволяет отслеживать и перехватывать сетевые события (мок запросов/ответов);
-- ограниченный набор возможностей для автоматизации (например, нет возможности управлять пропускной способностью сети или производительностью CPU): протокол охватывает только основные пользовательские сценарии взаимодействия с браузером;
-- нет возможности подписаться на браузерные события (например, получить информацию от браузера, что открылась новая вкладка);
-- нужны дополнительные «пляски с бубном» для работы (установка _selenium-standalone,_ необходимых драйверов к браузерам и т. п.).
+- Out of the box, it does not allow tracking and intercepting network events (mocking requests/responses);
+- Limited set of automation capabilities (e.g., no ability to control network bandwidth or CPU performance): the protocol covers only basic user interaction scenarios with the browser;
+- No ability to subscribe to browser events (e.g., get information from the browser that a new tab has opened);
+- Requires additional setup (installing _selenium-standalone_, necessary browser drivers, etc.).
## CDP
-[Chrome DevTools Protocol (CDP)][cdp] — это по сути [JSON RPC][json-rpc], реализованный через [вебсокеты][websockets].
+[Chrome DevTools Protocol (CDP)][cdp] is essentially [JSON RPC][json-rpc] implemented via [websockets][websockets].
-_Chrome_ и _Node.js_ реализуют API к этому протоколу, с помощью которого общаться с _DevTools:_ посылать команды, подписываться на события и т.д.
+_Chrome_ and _Node.js_ implement APIs for this protocol, which allow communication with _DevTools:_ sending commands, subscribing to events, etc.
-Данный API используется:
+This API is used:
-- в _Chrome DevTools_ (панель разработчика внутри браузера) для отлаживания и инспектирования кода;
-- в IDE (например, в _VSCode)_ — для аналогичных целей;
-- в различных инструментах автоматизации тестирования: [puppeteer][puppeteer], [cypress][cypress], и пр.;
-- при общении между [chromedriver][chromedriver] и браузером Chrome (на картинке выше — `browser protocol`).
+- In _Chrome DevTools_ (the developer panel inside the browser) for debugging and inspecting code;
+- In IDEs (e.g., _VSCode_) for similar purposes;
+- In various test automation tools: [puppeteer][puppeteer], [cypress][cypress], etc.;
+- For communication between [chromedriver][chromedriver] and the Chrome browser (in the image above — `browser protocol`).
-API протокола поделено логическим образом на домены, которые содержат методы и могут посылать события.
+The protocol's API is logically divided into domains, which contain methods and can send events.
-Например, домен [Runtime][cdp-runtime] позволяет инспектировать состояние JavaScript, а с помощью домена [Debugger][debugger] можно отлаживать JavaScript.
+For example, the [Runtime][cdp-runtime] domain allows inspecting the state of JavaScript, and the [Debugger][debugger] domain can be used to debug JavaScript.
-### Плюсы
+### Pros
-- предоставляет больше возможностей для автоматизации, чем Webdriver; с помощью CDP можно:
- - [отслеживать и перехватывать сетевые запросы и ответы][how-to-intercept-requests-and-responses]
- - [тестировать доступность (accessibility) страницы][how-to-check-accessibility]
- - [управлять пропускной способностью сети][how-to-manage-network-bandwidth]
- - [управлять быстродействием процессора][how-to-manage-cpu-performance]
- - [скрывать скроллбары][how-to-hide-scrollbars-by-cdp]
- - и т. д.
-- не нужно настраивать _selenium-standalone_ или драйверы к браузерам: достаточно иметь локальный Chrome-браузер.
+- Provides more automation capabilities than WebDriver; with CDP you can:
+ - [Track and intercept network requests and responses][how-to-intercept-requests-and-responses]
+ - [Test page accessibility][how-to-check-accessibility]
+ - [Manage network bandwidth][how-to-manage-network-bandwidth]
+ - [Manage CPU performance][how-to-manage-cpu-performance]
+ - [Hide scrollbars][how-to-hide-scrollbars-by-cdp]
+ - And more.
+- No need to set up _selenium-standalone_ or browser drivers: just having a local Chrome browser is enough.
-### Минусы
+### Cons
-- поддерживает ограниченный список браузеров: _Chrome, Chromium Edge и Firefox nightly;_
-- по умолчанию работает только локально (но есть возможность подключиться к уже поднятому браузеру на удаленной машине).
+- Supports a limited list of browsers: _Chrome, Chromium Edge, and Firefox nightly;_
+- By default, works only locally (but it is possible to connect to an already running browser on a remote machine).
-## Полезные ссылки
+## Useful Links
-- [Как использовать CDP в Testplane][how-to-use-cdp]
+- [How to use CDP in Testplane][how-to-use-cdp]
[webdriver]: https://www.w3.org/TR/webdriver/
[cdp]: https://chromedevtools.github.io/devtools-protocol/
[chromedriver]: https://chromedriver.chromium.org/
[geckodriver]: https://github.com/mozilla/geckodriver
[appium]: https://appium.io/
-[json-rpc]: https://ru.wikipedia.org/wiki/JSON-RPC
+[json-rpc]: https://en.wikipedia.org/wiki/JSON-RPC
[websockets]: https://learn.javascript.ru/websocket
[puppeteer]: https://pptr.dev/
[cypress]: https://cypress.io
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 9bbe141..da55c8a 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -25,7 +25,7 @@ const config: Config = {
trailingSlash: true,
i18n: {
- defaultLocale: "ru",
+ defaultLocale: "en",
locales: ["en", "ru"],
},
headTags: [
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/_partials/specs/assert-view-options.mdx b/i18n/en/docusaurus-plugin-content-docs/current/_partials/specs/assert-view-options.mdx
deleted file mode 100644
index edae423..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/_partials/specs/assert-view-options.mdx
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
- **Option**
- **Type**
- **Description**
-
-
-
-
- ignoreElements
- Array or String
-
- Elements (specified as selectors) that will be ignored when comparing screenshots.
- Ignoring is implemented by painting the listed elements black. In the case of a
- single element, the parameter can be specified as a string.
-
-
-
- tolerance
- Number
- Sensitivity to color differences.
-
-
- antialiasingTolerance
- Number
- Sensitivity to antialiasing.
-
-
- allowViewportOverflow
- Boolean
-
- By default, Testplane throws an error if an element is outside the viewport
- boundaries. This parameter disables boundary checking, allowing screenshots of
- elements that do not fit within the viewport. Only the parts of the element that fit
- within the viewport will be visible in the screenshot. However, if _compositeImage_
- is set to _true_, parts of the element that are below the viewport will also be
- visible in the screenshot. Similarly, if _captureElementFromTop_ is set to _true_,
- parts of the element that are above the viewport will also be included in the
- screenshot.
-
-
-
- captureElementFromTop
- Boolean
-
- Capture a screenshot of the element from the very top. If the element is outside the
- viewport, it will be scrolled into view.
-
-
-
- compositeImage
- Boolean
-
- If the element does not fit within the viewport, enabling this option will take
- multiple screenshots of different parts of the element sequentially, and then stitch
- them together into one image to display the entire element.
-
-
-
- screenshotDelay
- Number
-
- Delay in milliseconds before taking a screenshot. This can be useful when there are
- elements on the page that use animation, or a scrollbar that does not disappear
- immediately and ends up in the resulting screenshot.
-
-
-
- selectorToScroll
- String
-
- Selector to scroll. This can be useful when you need to take a screenshot of a modal
- window that does not fit on the screen. Otherwise, without specifying the selector,
- the scroll will be applied to the _window_ object, and the background will scroll,
- leaving the popup window in place.
-
-
-
- disableAnimation
- Boolean
-
- Disable animations and transitions when taking a screenshot. Default is `true`
- starting from version `8.0.0`.
-
-
-
- ignoreDiffPixelCount
- `` `${number}%` `` or Number
-
- Percentage of pixels to ignore in the diff. Useful for ignoring very small diffs.
- Default is `0`. Available starting from version `8.2.0`.
-
-
-
-
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/command-line/index.mdx b/i18n/en/docusaurus-plugin-content-docs/current/command-line/index.mdx
deleted file mode 100644
index 88bc796..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/command-line/index.mdx
+++ /dev/null
@@ -1,251 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# CLI {#cli}
-
-Testplane allows setting options via command line interface.
-
-## Overview {#overview}
-
-Available options:
-
-```
--V, --version output the version number
--c, --config path to configuration file
--b, --browser run tests only in specified browser
--s, --set run tests only in the specified set
--r, --require require module
---reporter test reporters
---grep run only tests matching the pattern
---update-refs update screenshot references or gather them if they do not exist ("assertView" command)
---inspect [inspect] nodejs inspector on [=[host:]port]
---inspect-brk [inspect-brk] nodejs inspector with break at the start
---repl [type] run one test, call `browser.switchToRepl` in test code to open repl interface (default: false)
---repl-before-test [type] open repl interface before test run (default: false)
---repl-on-fail [type] open repl interface on test fail only (default: false)
---devtools switches the browser to the devtools mode with using CDP protocol
--h, --help output usage information
-```
-
-## Overriding settings {#overriding-settings}
-
-All options can be overridden via command-line flags or environment variables with the following priorities, by descending:
-
-- A command-line option;
-
-- An environment variable;
-
-- A config file value;
-
-- The default value.
-
-### Overriding with CLI option {#overriding-cli-settings}
-
-To override a config setting with a CLI option, convert the full option path to `--kebab-case`.
-
-For example, to override config's `baseUrl` property:
-
-```bash
-testplane path/to/mytest.js --base-url http://example.com
-```
-
-It also works for nested properties. Example of overriding `browsers.firefox.sessionsPerBrowser` value (assuming you have defined browser with id "firefox"):
-
-```bash
-testplane path/to/mytest.js --browsers-firefox-sessions-per-browser 7
-```
-
-### Overriding with environment variable {#overriding-env-settings}
-
-To override a setting with an environment variable, convert its full path to `snake_case` and add the `testplane_` prefix.
-
-Examples of overriding the same `baseUrl` and `browsers.firefox.sessionsPerBrowser` values using environment variables instead of CLI options:
-
-```bash
-testplane_base_url=http://example.com testplane path/to/mytest.js
-testplane_browsers_firefox_sessions_per_browser=7 testplane path/to/mytest.js
-```
-
-Besides overriding config values, there also two extra environment variables: "TESTPLANE_SKIP_BROWSERS" and "TESTPLANE_SETS":
-
-#### TESTPLANE_SKIP_BROWSERS
-
-Skip the browsers specified in the config by passing the browser IDs. Multiple browser IDs should be separated by commas
-(spaces after commas are allowed).
-
-```bash
-TESTPLANE_SKIP_BROWSERS=ie10,ie11 testplane
-```
-
-#### TESTPLANE_SETS
-
-Runs only specified sets (CLI option `--set` alternative).
-
-```bash
-TESTPLANE_SETS=desktop,touch testplane
-```
-
-## Version {#version}
-
-Print current `testplane` version.
-
-```bash
-testplane --version
-```
-
-## Config {#config}
-
-Use custom configuration file.
-
-```bash
-testplane --config ./local.testplane.config.ts
-```
-
-## Browser {#browser}
-
-Run tests only in specified browser.
-
-```bash
-testplane --browser chrome
-```
-
-## Set {#set}
-
-Run tests only in the specified set.
-
-```bash
-testplane --set desktop
-```
-
-## Require {#require}
-
-Load external modules, locally existing in your machine, before running `testplane`. This is useful for loaders, such as ECMAScript modules via [esm](https://www.npmjs.com/package/esm).
-
-```bash
-testplane --require ./tsconfig-register-paths.js
-```
-
-## Reporter {#reporter}
-
-Can be used to set one of the following reporters:
-
-- `flat` - all information about failed and retried tests would be grouped by browsers at the end of the report;
-- `plain` - information about fails and retries would be placed after each test;
-- `jsonl` - displays detailed information about each test result in [jsonl](https://jsonlines.org/) form.
-
-Default is `flat`.
-
-Information about test results is displayed to the command line by default. But there is an ability to redirect the output to a file:
-
-```bash
-testplane --reporter '{"type": "jsonl", "path": "./some-path/result.jsonl"}'
-```
-
-You can also specify multiple reporters:
-
-```bash
-testplane --reporter '{"type": "jsonl", "path": "./some-path/result.jsonl"}' --reporter flat
-```
-
-Aside these terminal reporters, you can use [html-reporter][html-reporter] plugin in order to generate html reports.
-
-## Grep {#grep}
-
-Run only tests, which full name matches the pattern.
-
-### Example {#grep-example}
-
-If you have some tests:
-
-```ts
-describe("test", () => {
- describe("with", () => {
- describe("nested path", () => {
- ...
- });
- describe("other path", () => {
- ...
- })
- });
-});
-```
-
-You can run tests inside "nested path" suite without running tests inside "other path" suite with any of these variants:
-
-```bash
-testplane --grep "nested path"
-testplane --grep "with nested path"
-testplane --grep "test with nested path"
-```
-
-### Update refs {#update-refs}
-
-Run tests, updating all screenshot references, created by [assertView][assert-view] command.
-
-```bash
-testplane --update-refs
-```
-
-
- Recommended way to update screenshots is using [html-reporter][html-reporter] plugin.
-
-
-## Inspect {#inspect}
-
-Runs Testplane tests using [nodejs inspector](https://nodejs.org/en/docs/inspector).
-
-```bash
-testplane --inspect
-```
-
-
- In the debugging mode, only one worker is started and all tests are performed only in it. Use
- this mode with option `sessionsPerBrowser=1` in order to debug tests one at a time.
-
-
-## Inspect break {#inspect-brk}
-
-The same as [Inspect](#inspect), but with breakpoint at the start.
-
-```bash
-testplane --inspect-brk
-```
-
-## REPL {#repl}
-
-Enables a [REPL](https://en.wikipedia.org/wiki/Read–eval–print_loop). It also disables test duration timeout. Can be used by specifying following CLI options:
-
-- `--repl` - in this mode, only one test in one browser should be run, otherwise an error is thrown. REPL interface does not start automatically, so you need to call [switchToRepl][switch-to-repl] command in the test code;
-- `--repl-before-test` - the same as `--repl` option except that REPL interface opens automatically before run test;
-- `--repl-on-fail` - the same as `--repl` option except that REPL interface opens automatically on test fail.
-
-```bash
-testplane --repl --grep 'my test name' --browser chrome
-```
-
-
- More information about Testplane REPL mode can be found in [switchToRepl][switch-to-repl]
- command documentation.
-
-
-## Devtools {#devtools}
-
-Runs Testplane tests using [devtools automation protocol][webdriver-vs-cdp].
-
-```bash
-testplane --devtools
-```
-
-## Help {#help}
-
-Prints out information about options and commands. Testplane Plugins can add their own commands and options.
-
-For example, [html-reporter][html-reporter] adds `gui` command.
-
-```bash
-testplane --help
-```
-
-[html-reporter]: ../html-reporter/html-reporter-setup
-[assert-view]: ../commands/browser/assertView
-[switch-to-repl]: ../commands/browser/switchToRepl
-[webdriver-vs-cdp]: ../reference/webdriver-vs-cdp
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$$.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$$.mdx
deleted file mode 100644
index 2b71523..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$$.mdx
+++ /dev/null
@@ -1,96 +0,0 @@
----
-slug: _dollardollar
-sidebar_label: $$
----
-
-import Admonition from "@theme/Admonition";
-
-# $$
-
-## Overview {#overview}
-
-Use the `$$` command instead of [findElements][find-elements] as a shorter command to get multiple elements on the page.
-
-The `$$` command returns an array with the desired elements, on each of which you can call action commands without passing the selector. However, if you do pass a selector, it will first find the corresponding element and then call the action for that element.
-
-You can chain `$` or `$$` together to traverse down the DOM tree.
-
-
- Read more about how to select specific elements in the recipe "[How to use
- selectors][how-to-use-selectors]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.$$(selector);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-selector String or Function Selector or JS function to get multiple elements.
-
-
-
-
-## Examples {#examples}
-
-**index.html**
-
-```html
-
-```
-
-**$.js**
-
-```javascript
-it("should get text of a menu link", async ({ browser }) => {
- const text = await browser.$$("#menu")[0];
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-
-it("should get text of a menu link - JS Function", async ({ browser }) => {
- const text = await browser.$$(function () {
- // Arrow function cannot be used here.
- // This is Window – https://developer.mozilla.org/en-US/docs/Web/API/Window
- //
- // TypeScript users can do something like:
- // return (this as Window).document.querySelectorAll('#menu')
- return this.document.querySelectorAll("#menu"); // Element[]
- })[0];
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-```
-
-## Related Commands {#related}
-
-- [browser.$](../_dollar)
-- [element.$](../../element/_dollar)
-- [element.$$](../../element/_dollardollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/$$), from which we drew some information while writing our version.
-
-[find-elements]: https://webdriver.io/docs/api/webdriver/#findelements
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$.mdx
deleted file mode 100644
index fd66cf6..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/$.mdx
+++ /dev/null
@@ -1,119 +0,0 @@
----
-slug: _dollar
-sidebar_position: 1
----
-
-import Admonition from "@theme/Admonition";
-
-# $
-
-## Overview {#overview}
-
-Use the `$` command instead of [findElement][find-element] as a shorter command to get a single element on the page.
-
-The `$` command returns an object describing the element, on which you can call action commands without passing the selector. However, if you pass a selector, it will first find the corresponding element and then call the action for that element. You can also pass an object as the selector, where the object contains the property `element-6066-11e4-a52e-4f735466cecf` with the value of the element reference. The command will then convert the reference into an extended WebdriverIO element.
-
-You can chain `$` or `$$` together to traverse down the DOM tree.
-
-
- Read more about how to select specific elements in the recipe "[How to use
- selectors][how-to-use-selectors]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.$(selector);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-selector String or Function or Matcher Selector or JS function to get a specific element.
-
-
-
-
-## Examples {#examples}
-
-**index.html**
-
-```html
-
-```
-
-**$.js**
-
-```javascript
-it("should get text of a menu link", async ({ browser }) => {
- const text = await browser.$("#menu");
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-
-it("should get text of a menu link - JS Function", async ({ browser }) => {
- const text = await browser.$(function () {
- // Arrow function cannot be used here.
- // This is Window – https://developer.mozilla.org/en-US/docs/Web/API/Window
- //
- // TypeScript users can do something like:
- // return (this as Window).document.querySelector('#menu')
- return this.document.querySelector("#menu"); // Element
- });
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-
-it("should allow converting the protocol result of an element into a WebdriverIO element", async ({
- browser,
-}) => {
- const activeElement = await browser.getActiveElement();
-
- console.log(await browser.$(activeElement).getTagName()); // outputs the active element
-});
-
-it("should use Androids DataMatcher or ViewMatcher selector", async ({ browser }) => {
- const menuItem = await browser.$({
- name: "hasEntry",
- args: ["title", "ViewTitle"],
- class: "androidx.test.espresso.matcher.ViewMatchers",
- });
- await menuItem.click();
-
- const menuItem = await browser.$({
- name: "hasEntry",
- args: ["title", "ViewTitle"],
- });
- await menuItem.click();
-});
-```
-
-## Related Commands {#related}
-
-- [browser.$$](../_dollardollar)
-- [element.$](../../element/_dollar)
-- [element.$$](../../element/_dollardollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/$), from which we drew some information while writing our version.
-
-[find-element]: https://webdriver.io/docs/api/webdriver/#findelement
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/action.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/action.mdx
deleted file mode 100644
index b30745d..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/action.mdx
+++ /dev/null
@@ -1,165 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# action
-
-## Overview {#overview}
-
-Use the `action` command to perform input actions on one of the virtualizable devices in the web browser.
-
-Unlike high-level commands like [scrollIntoView][scrollIntoView] and [doubleClick][doubleClick], the Actions API provides more granular control of input devices. The following input sources are available:
-
-- text input for keyboard devices;
-- control of mouse, pen, or touch device;
-- scroll control for devices with a scroll wheel.
-
-Each chain of `action` commands must end with a `perform` command to execute the specified set of actions. This also releases all pressed keys, buttons, etc., on virtual input devices and triggers the necessary events. The release can be skipped by passing the argument `true` to the `perform` command. Example:
-
-```typescript
-await browser.action(...).perform(true);
-```
-
-
- Support for this command and specific actions may vary depending on the execution environment.
- The development progress can be tracked on [wpt.fyi][web-platform-tests]. For mobile devices,
- you can use specialized gesture commands with [Appium][appium] on [iOS][appium-ios] and
- [Android][appium-android].
-
-
-## Keyboard Control {#keyboard_control}
-
-Used when specifying `key` as the argument for the `action` command. Example:
-
-```typescript
-await browser.action("key");
-```
-
-Returns a `KeyAction` object that supports the following actions:
-
-- `down(value: string)` — creates a key press action;
-- `up(value: string)` — creates a key release action;
-- `pause(ms: number)` — specifies that the input source does nothing for the specified amount of time.
-
-### Special Symbols {#special_symbols}
-
-To use special symbols (`Control`, `Page Up`, `Shift`, etc.), you can use the `Key` object from the [webdriverio][webdriverio-npm] package. It contains Unicode representations of all necessary special symbols. Example:
-
-```typescript
-import { Key } from "webdriverio";
-
-await browser.action("key").down(Key.Ctrl).perform();
-```
-
-### Usage Examples {#keyboard_examples}
-
-```typescript
-import { Key } from "webdriverio";
-
-it("should emit key events using key action commands", async ({ browser }) => {
- const elem = await browser.$("input");
- await elem.click(); // make the element active
-
- await browser.action("key").down("f").down("o").down("o").up("f").up("o").up("o").perform();
-
- console.log(await elem.getValue()); // returns "foo"
-
- // copy value from input element
- await browser.action("key").down(Key.Ctrl).down("c").pause(10).up(Key.Ctrl).up("c").perform();
-});
-```
-
-Instead of a series of `down/up` events, it is better to use the `setValue` command. The example is purely for demonstrating the principles of the `action` command.
-
-## Pointer Control {#pointer_control}
-
-Used when specifying `pointer` as the argument for the `action` command, and you can also specify the pointer type. Example:
-
-```typescript
-await browser.action("pointer", {
- parameters: { pointerType: "mouse" }, // "mouse" is the default value, also available: "pen" or "touch"
-});
-```
-
-Returns a `PointerAction` object that supports the following actions:
-
-- `down(button: 'left' | 'middle' | 'right')` — creates an action to press a key;
-- `down(params: PointerActionParams)` — creates an action to press a key with detailed parameters;
-- `move(x: number, y: number)` — creates an action to move the pointer by `x` and `y` pixels relative to the viewport;
-- `move(params: PointerActionMoveParams)` — creates an action to move the pointer by `x` and `y` pixels from the specified origin. The origin can be defined as the current pointer position, the viewport, or the center of a specific element;
-- `up(button: 'left' | 'middle' | 'right')` — creates an action to release a key;
-- `up(params: PointerActionUpParams)` — creates an action to release a key with detailed parameters;
-- `cancel()` — creates an action that cancels the current pointer position;
-- `pause(ms: number)` — specifies that the input source does nothing for the specified amount of time.
-
-Detailed information on the parameter types [PointerActionParams][pointer-action-params], [PointerActionMoveParams][pointer-action-move-params], and [PointerActionUpParams][pointer-action-up-params] can be found in the webdriverio source code.
-
-### Usage Examples {#pointer_examples}
-
-```typescript
-it("drag and drop using pointer action command", async ({ browser }) => {
- const origin = await browser.$("#source");
- const targetOrigin = await browser.$("#target");
-
- await browser
- .action("pointer")
- .move({ duration: 0, origin, x: 0, y: 0 })
- .down({ button: 0 }) // left button
- .pause(10)
- .move({ duration: 0, origin: targetOrigin })
- .up({ button: 0 })
- .perform();
-});
-```
-
-## Scroll Wheel Control {#scroll_wheel_control}
-
-Used when specifying `wheel` as the argument for the `action` command. Example:
-
-```typescript
-await browser.action("wheel");
-```
-
-Returns a `WheelAction` object that supports the following actions:
-
-- `scroll(params: ScrollParams)` — scrolls the page to the specified coordinates or origin;
-- `pause(ms: number)` — specifies that the input source does nothing for the specified amount of time.
-
-Detailed information on the parameter type [ScrollParams][scroll-params] can be found in the webdriverio source code.
-
-### Usage Examples {#scroll_examples}
-
-```typescript
-it("should scroll using wheel action commands", async ({ browser }) => {
- console.log(await browser.execute(() => window.scrollY)); // returns 0
-
- await browser
- .action("wheel")
- .scroll({
- deltaX: 0,
- deltaY: 500,
- duration: 200,
- })
- .perform();
-
- console.log(await browser.execute(() => window.scrollY)); // returns 500
-});
-```
-
-## Related Commands {#related}
-
-- [actions](../actions)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/action), from which we drew some information while writing our version.
-
-[scrollIntoView]: ../../element/scrollIntoView
-[doubleClick]: ../../element/doubleClick
-[web-platform-tests]: https://wpt.fyi/results/webdriver/tests/perform_actions?label=experimental&label=master&aligned
-[appium]: http://appium.io
-[appium-ios]: https://appium.github.io/appium-xcuitest-driver/latest/reference/execute-methods/#mobile-pinch
-[appium-android]: https://github.com/appium/appium-uiautomator2-driver#mobile-gesture-commands
-[webdriverio-npm]: https://www.npmjs.com/package/webdriverio
-[pointer-action-params]: https://github.com/webdriverio/webdriverio/blob/8ca026c75bf7c27ef9d574f0ec48d8bc13658602/packages/webdriverio/src/utils/actions/pointer.ts#L20-L35
-[pointer-action-move-params]: https://github.com/webdriverio/webdriverio/blob/8ca026c75bf7c27ef9d574f0ec48d8bc13658602/packages/webdriverio/src/utils/actions/pointer.ts#L20-L42
-[pointer-action-up-params]: https://github.com/webdriverio/webdriverio/blob/8ca026c75bf7c27ef9d574f0ec48d8bc13658602/packages/webdriverio/src/utils/actions/pointer.ts#L13-L19
-[scroll-params]: https://github.com/webdriverio/webdriverio/blob/8ca026c75bf7c27ef9d574f0ec48d8bc13658602/packages/webdriverio/src/utils/actions/wheel.ts#L4-L29
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/actions.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/actions.mdx
deleted file mode 100644
index 8a03adc..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/actions.mdx
+++ /dev/null
@@ -1,32 +0,0 @@
-# actions
-
-## Overview {#overview}
-
-Use the `actions` command to perform multiple input actions on one of the virtualizable devices in the web browser, for example, to simulate page zooming. More detailed information is provided in the description of the [action][action] command.
-
-## Usage {#usage}
-
-```typescript
-await browser.actions([action1, action2, ...]);
-```
-
-## Usage Examples {#examples}
-
-```typescript
-it("run multiple actions at once for a pinch zoom", async ({ browser }) => {
- await browser.actions([
- browser.action("pointer").move(500, 500).down().move(250, 250).up(),
- browser.action("pointer").move(500, 500).down().move(750, 750).up(),
- ]);
-});
-```
-
-## Related Commands {#related}
-
-- [action](../action)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/actions), from which we drew some information while writing our version.
-
-[action]: ../action
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/addCommand.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/addCommand.mdx
deleted file mode 100644
index 3e69e17..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/addCommand.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# addCommand
-
-## Overview {#overview}
-
-Use the `addCommand` command to add your own command to the browser or to an element. The command being added can be either synchronous or asynchronous.
-
-
- Read more about how to add your custom commands in the recipe "[How to add custom
- commands][how-to-add-custom-commands]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.addCommand(name, callback, elementScope);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-name String Custom command name.
-callback Function Command implementation function.
-elementScope Boolean If the value is _true_, add the command to the element instead of the browser. Default: _false_.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-// add the getUrlAndTitle command
-await browser.addCommand("getUrlAndTitle", async function (customParam) {
- return {
- url: await this.getUrl(), // `this` here and below refers to the "browser" object
- title: await this.getTitle(),
- customParam: customParam,
- };
-});
-
-// use the new getUrlAndTitle command
-it("should use my add command", async ({ browser }) => {
- await browser.url("https://webdriver.io");
-
- const result = await browser.getUrlAndTitle("foobar");
-
- assert.strictEqual(result.url, "https://webdriver.io");
- assert.strictEqual(
- result.title,
- "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js",
- );
- assert.strictEqual(result.customParam, "foobar");
-});
-```
-
-## Related Commands {#related}
-
-- [overwriteCommand](../overwriteCommand)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/addCommand), from which we drew some information while writing our version.
-
-[how-to-add-custom-commands]: https://webdriver.io/docs/customcommands/#adding-custom-commands
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/assertView.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/assertView.mdx
deleted file mode 100644
index 567fdc9..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/assertView.mdx
+++ /dev/null
@@ -1,215 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# assertView
-
-## Overview {#overview}
-
-Use the `assertView` command to take a screenshot for a specific test state and compare it with a reference.
-
-
- This command is implemented within Testplane, it's not available in the [API
- WebDriverIO][webdriverio-api].
-
-
-## Usage {#usage}
-
-```typescript
-await browser.assertView(state, options);
-await browser.assertView(state, selector, options);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-[state](#state) String Required parameter. The name of the test state. It must be unique within a single test.
-[selector](#selector) String or String[] Optional parameter. Can be skipped. The DOM element selector to capture. If skipped, current viewport is captured.
-[options](#options) Object Settings for the _assertView_ command.
-
-
-
-
-### state
-
-Required parameter. Specifies the name of the test state. The name must be unique within a single test.
-
-### selector
-
-Required parameter. Specifies the selector of the DOM element to capture. If not specified or skipped, will be set to `body` and the following options will be automatically added to `options`:
-
-```
-{
- allowViewportOverflow: true,
- compositeImage: false,
- captureElementFromTop: false
-}
-```
-
-These additional options will have higher priority than `assertViewOpts` from config, but lower priority than options from `options` parameter passed by user.
-So, assertView without `selector` parameter will take a screenshot of the current viewport.
-
-### options
-
-Specifies the settings for the `assertView` command:
-
-
-
-
- **Option**
- **Type**
- **Description**
-
-
-
-
- ignoreElements
- Array or String
-
- Elements (specified as selectors) that will be ignored when comparing screenshots.
- Ignoring is implemented by painting the listed elements black. For a single element,
- the parameter can be set as a string.
-
-
-
- tolerance
- Number
-
- Sensitivity to color differences. The value overrides
- [browsers.tolerance][browsers-tolerance].
-
-
-
- antialiasingTolerance
- Number
-
- Sensitivity to anti-aliasing. The value overrides
- [browsers.antialiasingTolerance][browsers-antialiasing-tolerance].
-
-
-
- allowViewportOverflow
- Boolean
-
- By default, Testplane throws an error if the element is outside the viewport
- boundaries. This parameter disables boundary checks, allowing screenshots of
- elements that don't fully fit in the viewport. On the screenshot, only the parts of
- the element that fit into the viewport will be visible. However, if _compositeImage_
- is set to _true_, the parts of the element that are below the viewport boundary will
- also be visible in the screenshot. Similarly, if _captureElementFromTop_ is set to
- _true_, the parts of the element that are above the viewport boundary will also be
- captured in the screenshot.
-
-
-
- captureElementFromTop
- Boolean
-
- Capture the screenshot of the element from the very top. If the element is outside
- the viewport, it will be scrolled into view.
-
-
-
- compositeImage
- Boolean
-
- If the element does not fit into the viewport, multiple screenshots of different
- parts of the element will be taken sequentially, and then stitched together into one
- to display the entire element.
-
-
-
- screenshotDelay
- Number
-
- Delay in milliseconds before taking a screenshot. Useful when there are elements
- with animations on the page, or a scrollbar that does not disappear immediately and
- appears in the resulting screenshot.
-
-
-
- selectorToScroll
- String
-
- Selector to scroll. Useful when you need to take a screenshot of a modal window that
- doesn’t fit on the screen. Otherwise, without specifying a selector, the scroll will
- be applied to the _window_ object, scrolling the background while keeping the popup
- window in place.
-
-
-
- disableAnimation
- Boolean
-
- Disable animations and transitions when taking a screenshot. Default is `true`
- starting from version `8.0.0`.
-
-
-
- ignoreDiffPixelCount
- `` `${number}%` `` or Number
-
- The percentage of pixels to ignore during the diff. Useful to ignore very small
- differences. Default is `0`. Available starting from version `8.2.0`.
-
-
-
-
-
-## Usage Examples {#examples}
-
-**Visual check of certain element**
-
-```typescript
-it("should assert view", async ({ browser }) => {
- await browser.url("some/url");
- await browser.assertView("plain", ".button");
-
- await browser.click(".button");
- await browser.assertView("clicked", ".button");
-});
-```
-
-**Visual check of current viewport**
-
-```typescript
-it("should assert viewport without selector", async ({ browser }) => {
- await browser.url("some/url");
- await browser.execute(() => window.scrollTo(0, 1000));
- await browser.assertView("plain");
-
- await browser.$(".button").click();
- await browser.assertView("clicked", { ignoreDiffPixelCount: 5 });
-});
-```
-
-**Visual check with additional options**
-
-```typescript
-it("should assert view with given options", async ({ browser }) => {
- await browser.url("some/url");
- await browser.assertView("plain", ".form", {
- ignoreElements: [".link"],
- tolerance: 5,
- antialiasingTolerance: 4,
- allowViewportOverflow: true,
- captureElementFromTop: true,
- compositeImage: true,
- screenshotDelay: 10,
- selectorToScroll: ".modal",
- });
-});
-```
-
-## Related Commands {#related}
-
-- [element.assertView](../../element/assertView)
-- [browser.saveRecordingScreen](../saveRecordingScreen)
-- [browser.saveScreenshot](../saveScreenshot)
-- [element.saveScreenshot](../../element/saveScreenshot)
-
-[webdriverio-api]: https://webdriver.io/docs/api
-[browsers-tolerance]: ../../../config/browsers#tolerance
-[browsers-antialiasing-tolerance]: ../../../config/browsers#antialiasing_tolerance
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/call.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/call.mdx
deleted file mode 100644
index 40432fc..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/call.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
-# call
-
-## Overview {#overview}
-
-Use the `call` command to perform any asynchronous action in tests.
-
-This command is treated as a synchronous function. It accepts a promise and halts its execution until the promise is resolved.
-
-## Usage {#usage}
-
-```javascript
-await browser.call(callback);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-callback Function The function to call.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("some testing here", async ({ browser }) => {
- await browser.url("http://google.com");
-
- // make an asynchronous call using a third-party library
- // that supports promises, e.g., a call to a backend or DB
- // to inject a fixture
- await browser.call(() => {
- return somePromiseLibrary.someMethod().then(() => {
- // ...
- });
- });
-
- // example for an asynchronous call using a third-party library
- // that does not support promises
- const result = await browser.call(() => {
- return new Promise((resolve, reject) => {
- someOtherNodeLibrary.someMethod(param1, (err, res) => {
- if (err) {
- return reject(err);
- }
- resolve(res);
- });
- });
- });
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/call), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/debug.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/debug.mdx
deleted file mode 100644
index b0e87b3..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/debug.mdx
+++ /dev/null
@@ -1,31 +0,0 @@
-# debug
-
-## Overview {#overview}
-
-Use the `debug` command to pause the execution of a test in the browser.
-
-By pausing the test, you can switch to the browser, open _DevTools_, and inspect the web page in real-time. This can be useful for debugging the test.
-
-## Usage {#usage}
-
-```javascript
-await browser.debug();
-```
-
-## Usage Examples {#examples}
-
-```javascript
-it("should demonstrate the debug command", async ({ browser }) => {
- await browser.$("#input").setValue("FOO");
-
- await browser.debug(); // switch to the browser and change the value of #input to "BAR"
-
- const value = await browser.$("#input").getValue();
-
- console.log(value); // outputs: "BAR"
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/debug), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/deleteCookies.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/deleteCookies.mdx
deleted file mode 100644
index b65c24b..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/deleteCookies.mdx
+++ /dev/null
@@ -1,69 +0,0 @@
-# deleteCookies
-
-## Overview {#overview}
-
-Use the `deleteCookies` command to delete all or specific cookies for the current page.
-
-To delete specific cookies, you need to specify the cookie name as a string or a list of cookie names as an array of strings.
-
-## Usage {#usage}
-
-```javascript
-await browser.deleteCookies(names);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-names String or String[] Optional parameter. The cookie name or list of cookie names to delete. If the parameter is missing, all cookies for the current page will be deleted.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should delete cookies", async ({ browser }) => {
- await browser.setCookies([
- { name: "test", value: "123" },
- { name: "test2", value: "456" },
- { name: "test3", value: "789" },
- ]);
-
- let cookies = await browser.getCookies();
- console.log(cookies);
- // outputs:
- // [
- // { name: 'test', value: '123' },
- // { name: 'test2', value: '456' },
- // { name: 'test3', value: '789' }
- // ]
-
- await browser.deleteCookies(["test3"]);
-
- cookies = await browser.getCookies();
- console.log(cookies);
- // outputs:
- // [
- // { name: 'test', value: '123' },
- // { name: 'test2', value: '456' }
- // ]
-
- await browser.deleteCookies();
- cookies = await browser.getCookies();
- console.log(cookies); // outputs: []
-});
-```
-
-## Related Commands {#related}
-
-- [getCookies](../getCookies)
-- [setCookies](../setCookies)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/deleteCookies), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/execute.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/execute.mdx
deleted file mode 100644
index e9a7110..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/execute.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
-# execute
-
-## Overview {#overview}
-
-Use `execute` to _synchronously_ execute the specified JavaScript code in the context of the currently selected frame.
-
-The command returns the result of the script execution to the client.
-
-The `script` argument defines the script to be executed as the body of a function. The value returned by this function will be returned to the client. The function will be invoked with the provided array of `args`, and access to the values can be obtained through the `arguments` object in the specified order.
-
-Arguments can be any JSON primitives, arrays, or JSON objects. JSON objects that define a reference to a _WebElement_ will be converted to the corresponding DOM element. Similarly, any _WebElements_ in the script result will be returned to the client as _WebElement JSON_ objects.
-
-## Usage {#usage}
-
-```javascript
-await browser.execute(script, arguments);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-script String or Function The script to be executed.
-arguments Any Optional parameter. Arguments for the script.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should inject javascript on the page", async ({ browser }) => {
- const result = await browser.execute(
- (a, b, c, d) => {
- // here we are in the browser context: no access to console or client
- return a + b + c + d;
- },
- 1,
- 2,
- 3,
- 4,
- );
-
- // here we are in the node.js context: access to console and client is available
- console.log(result); // outputs: 10
-});
-```
-
-## Related Commands {#related}
-
-- [executeAsync](../executeAsync)
-- [setTimeout](../setTimeout)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/execute), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/executeAsync.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/executeAsync.mdx
deleted file mode 100644
index f4feab1..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/executeAsync.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
-# executeAsync
-
-## Overview {#overview}
-
-Use the `executeAsync` command to _asynchronously_ execute the specified JavaScript code in the context of the currently selected frame.
-
-The last argument of the command must be a callback that will be called as soon as the script completes its execution. The command passes the script result to the callback as an input parameter.
-
-The `script` argument defines the script to be executed as the body of a function. The function will be invoked with the provided array of `args`, and access to the values can be obtained through the `arguments` object in the specified order. The last argument must always be a callback function, which will be called once the script has been executed.
-
-Arguments can be any JSON primitives, arrays, or JSON objects. JSON objects that define a reference to a _WebElement_ will be converted to the corresponding DOM element. Similarly, any _WebElements_ in the script result will be returned to the client as _WebElement JSON_ objects.
-
-## Usage {#usage}
-
-```javascript
-await browser.executeAsync(script, arguments);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-script String or Function The script to be executed.
-arguments Any Arguments for the script. The last argument must be a callback function, which will be called once the script has been executed.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should execute async JavaScript on the page", async ({ browser }) => {
- await browser.setTimeout({ script: 5000 });
-
- const result = await browser.executeAsync(
- function (a, b, c, d, done) {
- // here we are in the browser context: no access to console or client
- setTimeout(() => {
- done(a + b + c + d);
- }, 3000);
- },
- 1,
- 2,
- 3,
- 4,
- );
-
- // here we are in the node.js context: access to console and client is available
- console.log(result); // outputs: 10
-});
-```
-
-## Related Commands {#related}
-
-- [execute](../execute)
-- [setTimeout](../setTimeout)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/executeAsync), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getConfig.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getConfig.mdx
deleted file mode 100644
index be96867..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getConfig.mdx
+++ /dev/null
@@ -1,27 +0,0 @@
-# getConfig
-
-## Overview {#overview}
-
-Use the `getConfig` command to get the browser [config][browser-config].
-
-## Usage {#usage}
-
-```javascript
-await browser.getConfig();
-```
-
-## Usage Examples {#examples}
-
-```javascript
-it("some test", async ({ browser }) => {
- const browserConfig = await browser.getConfig();
- console.log(browserConfig.id);
- // outputs: "chromeDesktop" – the name of the browser configuration specified in the config
-
- const { browserName } = browserConfig.desiredCapabilities;
- console.log(browserName);
- // outputs: "chrome" – the actual name of the browser
-});
-```
-
-[browser-config]: ../../../config/browsers#browser_main_settings
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getCookies.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getCookies.mdx
deleted file mode 100644
index c875668..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getCookies.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
-# getCookies
-
-## Overview {#overview}
-
-Use the `getCookies` command to get all or specific cookies on the current page.
-
-To get specific cookies, you need to specify the cookie name as a string or a list of cookie names as an array of strings.
-
-## Usage {#usage}
-
-```javascript
-await browser.getCookies(names);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-names String or String[] Optional parameter. The name of the cookie or list of cookie names to get. If the parameter is missing, all cookies for the current page will be returned.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should return a cookie for me", async ({ browser }) => {
- await browser.setCookies([
- { name: "test", value: "123" },
- { name: "test2", value: "456" },
- ]);
-
- const testCookie = await browser.getCookies(["test"]);
- console.log(testCookie);
- // outputs:
- // [
- // { name: 'test', value: '123' }
- // ]
-
- const allCookies = await browser.getCookies();
- console.log(allCookies);
- // outputs:
- // [
- // { name: 'test', value: '123' },
- // { name: 'test2', value: '456' }
- // ]
-});
-```
-
-## Related Commands {#related}
-
-- [setCookies](../setCookies)
-- [deleteCookies](../deleteCookies)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/getCookies), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getMeta.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getMeta.mdx
deleted file mode 100644
index 1619f97..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getMeta.mdx
+++ /dev/null
@@ -1,65 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# getMeta
-
-## Overview
-
-Use the `getMeta` command to retrieve metadata about the test.
-
-If a key is specified, the command returns the value for that specific key.
-If the key is not specified, the command will return an object with all the metadata for the test.
-
-To set values in the metadata, use the [setMeta](../setMeta) command.
-
-
- This command is implemented within Testplane and is not available in the [API
- WebDriverIO][webdriverio-api].
-
-
-## Usage {#usage}
-
-```javascript
-await browser.getMeta();
-```
-
-or
-
-```javascript
-await browser.getMeta(key);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-key String Optional parameter. The key whose value needs to be retrieved from the test metadata.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should get meta info of test", async ({ browser }) => {
- await browser.setMeta("foo", "bar");
- await browser.url("/foo/bar?baz=qux");
-
- const val = await browser.getMeta("foo");
- console.log(val); // outputs: bar
-
- const url = await browser.getMeta("url");
- console.log(url); // outputs: /foo/bar?baz=qux
-
- const meta = await browser.getMeta();
- console.log(meta); // outputs: {foo: 'bar', url: '/foo/bar?baz=qux'}
-});
-```
-
-## Related Commands {#related}
-
-- [setMeta](../setMeta)
-
-[webdriverio-api]: https://webdriver.io/docs/api
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getPuppeteer.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getPuppeteer.mdx
deleted file mode 100644
index 9159b42..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getPuppeteer.mdx
+++ /dev/null
@@ -1,51 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# getPuppeteer
-
-## Overview {#overview}
-
-Use the `getPuppeteer` command to get an instance of the browser's [Puppeteer][puppeteer] in order to execute specialized commands with it.
-
-Please note that all [Puppeteer][puppeteer] commands are asynchronous by default, so to switch between synchronous and asynchronous execution, be sure to wrap [Puppeteer][puppeteer] calls in [browser.call][browser-call], as shown in the example below.
-
-
-The _getPuppeteer_ command only works when using _Chrome DevTools Protocol (CDP)_.
-
-Read more in the section "[How to use Chrome DevTools Protocol in testplane][how-to-use-cdp]".
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.getPuppeteer();
-```
-
-## Usage Examples {#examples}
-
-```javascript
-it("should allow me to use Puppeteer", async ({ browser }) => {
- await browser.url("https://webdriver.io");
-
- const puppeteerBrowser = await browser.getPuppeteer();
-
- // switch to Puppeteer
- const metrics = await browser.call(async () => {
- const pages = await puppeteerBrowser.pages();
-
- await pages[0].setGeolocation({ latitude: 59.95, longitude: 30.31667 });
-
- return pages[0].metrics();
- });
-
- console.log(metrics.LayoutCount); // outputs: 42
-});
-```
-
-[how-to-use-cdp]: ../../../guides/how-to-use-cdp
-[puppeteer]: https://pptr.dev/#?product=Puppeteer&version=v5.1.0&show=api-class-browser
-[browser-call]: ../call
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/getPuppeteer), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getWindowSize.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getWindowSize.mdx
deleted file mode 100644
index 7a31f66..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/getWindowSize.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
-# getWindowSize
-
-## Overview {#overview}
-
-Use the `getWindowSize` command to get the size of the browser window.
-
-## Usage {#usage}
-
-```javascript
-await browser.getWindowSize();
-```
-
-## Usage Examples {#examples}
-
-```javascript
-it("should return browser window size", async ({ browser }) => {
- const windowSize = await browser.getWindowSize();
-
- console.log(windowSize); // outputs: { width: 1280, height: 767 }
-});
-```
-
-## Related Commands {#related}
-
-- [setWindowSize](../setWindowSize)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/getWindowSize), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/keys.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/keys.mdx
deleted file mode 100644
index 51c03fb..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/keys.mdx
+++ /dev/null
@@ -1,53 +0,0 @@
-# keys
-
-## Overview {#overview}
-
-Use the `keys` command to send a sequence of key presses to the active element.
-
-You can also use symbols like “Left Arrow” or “Right Arrow”. They will be automatically transformed to the corresponding unicode characters. You can see all supported characters [here][keyboard-actions].
-
-Modifiers such as `Ctrl`, `Shift`, `Alt`, and `Meta` remain pressed until you release them by calling the function again. However, modifying clicks requires using the [performActions][perform-actions] method from the WebDriver Actions API.
-
-## Usage {#usage}
-
-```javascript
-await browser.keys(value);
-```
-
-## Command Parameters {#parameters}
-
-
-
-
- **Name**
- **Type**
- **Description**
-
-
-
-
- value
- String or String[]
- The sequence of keys to type.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("copies text out of active element", async ({ browser }) => {
- // copy text from input element
- await browser.$("#username").setValue("anonymous");
-
- await browser.keys(["Meta", "a"]);
- await browser.keys(["Meta", "c"]);
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/keys), from which we drew some information while writing our version.
-
-[keyboard-actions]: https://w3c.github.io/webdriver/#keyboard-actions
-[perform-actions]: https://webdriver.io/docs/api/webdriver#performactions
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/mock.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/mock.mdx
deleted file mode 100644
index 0c83283..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/mock.mdx
+++ /dev/null
@@ -1,139 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# mock
-
-## Overview {#overview}
-
-Use the `mock` command to mock the response to a request.
-
-You can enable mocking depending on the URL, headers, or status code. Calling the `mock` method returns a stub object that you can use to modify the response from the web resource. With the stub object, you can return a mock response or abort the request.
-
-There are 3 ways to modify the response:
-
-- return a custom JSON object (e.g., to mock an API response);
-- replace the response with a local file (inject a modified JavaScript file);
-- redirect to another URL and return the response from there.
-
-
-The _mock_ command only works when using _Chrome DevTools Protocol (CDP)_.
-
-Read more in the section "[How to use Chrome DevTools Protocol in testplane][how-to-use-cdp]".
-
-Also, see the recipe "[How to intercept requests and responses][how-to-intercept-requests-and-responses]".
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.mock(url, { method, headers, responseHeaders, postData, statusCode });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-url String The URL of the request to mock.
-method String or Function The HTTP method to filter the resource.
-headers Object or Function The request headers to filter the resource.
-responseHeaders Object or Function The response headers to filter the resource.
-postData String or Function The request postData to filter the resource.
-statusCode Number or Function The status code to filter the resource.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should mock network resources", async ({ browser }) => {
- // use a static string
- const userListMock = await browser.mock("**" + "/users/list");
-
- // we can also mock responses based on
- // request or response headers, status code, or postData
- const strictMock = await browser.mock("**", {
- // mock all json responses
- statusCode: 200,
- headers: { "Content-Type": "application/json" },
- responseHeaders: { "Cache-Control": "no-cache" },
- postData: "foobar",
- });
-
- // comparator function
- const apiV1Mock = await browser.mock("**" + "/api/v1", {
- statusCode: statusCode => statusCode >= 200 && statusCode <= 203,
- headers: headers =>
- headers["Authorization"] && headers["Authorization"].startsWith("Bearer "),
- responseHeaders: headers => headers["Impersonation"],
- postData: data => typeof data === "string" && data.includes("foo"),
- });
-});
-
-it("should modify API responses", async ({ browser }) => {
- // filter by method
- const todoMock = await browser.mock("**" + "/todos", {
- method: "get",
- });
-
- // mock the response of the endpoint with predefined fixture
- mock.respond([
- {
- title: "Injected Todo",
- order: null,
- completed: false,
- url: "http://todo-backend-express-knex.herokuapp.com/916",
- },
- ]);
-
- // respond with a different status code or header
- mock.respond(
- [
- {
- title: "Injected Todo",
- order: null,
- completed: false,
- url: "http://todo-backend-express-knex.herokuapp.com/916",
- },
- ],
- {
- statusCode: 404,
- headers: {
- "x-custom-header": "foobar",
- },
- },
- );
-});
-
-it("should modify text assets", async ({ browser }) => {
- const scriptMock = await browser.mock("**" + "/script.min.js");
- scriptMock.respond("./tests/fixtures/script.js");
-});
-
-it("should redirect web resources", async ({ browser }) => {
- const headerMock = await browser.mock("**" + "/header.png");
- headerMock.respond("https://media.giphy.com/media/F9hQLAVhWnL56/giphy.gif");
-
- const pageMock = await browser.mock("https://google.com/");
- pageMock.respond("https://webdriver.io");
- await browser.url("https://google.com");
-
- console.log(await browser.getTitle());
- // outputs: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
-});
-```
-
-## Related Commands {#related}
-
-- [mockClearAll](../mockClearAll)
-- [mockRestoreAll](../mockRestoreAll)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/mock), from which we drew some information while writing our version.
-
-[how-to-use-cdp]: ../../../guides/how-to-use-cdp
-[how-to-intercept-requests-and-responses]: ../../../guides/how-to-intercept-requests-and-responses
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/newWindow.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/newWindow.mdx
deleted file mode 100644
index 6ed24f0..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/newWindow.mdx
+++ /dev/null
@@ -1,81 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# newWindow
-
-## Overview {#overview}
-
-Use the `newWindow` command to open a new window in the browser.
-
-This command is equivalent to the [window.open()][window-open] function.
-
-Note that this command will automatically switch you to the new window upon execution.
-
-
- The _newWindow_ command does not work in mobile environments (!)
-
-
-
- The command might not work with _devtools_ protocol. It also does not wait untill page load.
- In order to fix these problems, it is recommended to overwrite the command (on the Testplane side it would be done in version 9.0.0):
- ```javascript
- browser.overwriteCommand("newWindow", async function(pageUrl, windowName, windowFeatures) {
- if (browser.isDevTools) {
- const puppeteer = await browser.getPuppeteer();
- await puppeteer.newPage();
- } else {
- await browser.newWindow("about:blank", windowName, windowFeatures);
- }
-
- await browser.url(pageUrl);
- });
- ```
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.newWindow(url, { windowName, windowFeatures });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-url String The URL of the website to open.
-windowName String The name of the new window.
-windowFeatures String Settings for the new window, such as size, position, scrollbars, etc.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should open a new tab", async ({ browser }) => {
- await browser.url("http://google.com");
- console.log(await browser.getTitle());
- // outputs: "Google"
-
- await browser.newWindow(
- "https://webdriver.io",
- "WebdriverIO window",
- "width=420,height=230,resizable,scrollbars=yes,status=1",
- );
- console.log(await browser.getTitle());
- // outputs: "WebdriverIO · Next-gen browser and mobile automation test framework for Node.js"
-
- await browser.closeWindow();
- console.log(await browser.getTitle());
- // outputs: "Google"
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/newWindow), from which we drew some information while writing our version.
-
-[window-open]: https://developer.mozilla.org/en-US/docs/Web/API/Window/open
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/openAndWait.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/openAndWait.mdx
deleted file mode 100644
index a99418a..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/openAndWait.mdx
+++ /dev/null
@@ -1,72 +0,0 @@
-# openAndWait
-
-## Overview {#overview}
-
-Use the `openAndWait` command to open a page and wait for it to load (based on a combination of specified factors).
-
-Functions for waiting for network idle and failing on network errors are only available when using browsers that support _Chrome DevTools Protocol (CDP)_.
-
-## Usage {#usage}
-
-```javascript
-await browser.openAndWait("some/url", {
- selector: [".some", ".selector"],
- predicate: () => document.isReady,
- ignoreNetworkErrorsPatterns: ["https://mc.yandex.ru", "https://avatars.mds.yandex.net/*"],
- waitNetworkIdle: true,
- waitNetworkIdleTimeout: 500,
- failOnNetworkError: true,
- timeout: 20000,
-});
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-url String The page URL.
-WaitOpts Object Page waiting parameters. Optional, as are all its fields.
-
-
-
-
-### WaitOpts
-
-
-
-**Name** **Type** **Description**
-
-
-selector String\|String[] Selector(s) of element(s) that must exist on the loaded page.
-predicate () => Promise<bool> \| bool Predicate that returns `true` if the page is loaded. Executed in the browser context: [waitUntil](https://webdriver.io/docs/api/element/waitUntil).
-waitNetworkIdle Boolean If `true`, waits for the completion of all network requests. Default is `true`. Only works in CDP browsers; ignored for others.
-waitNetworkIdleTimeout Number Time (in milliseconds) after the completion of all network requests to consider the network idle. Default is 500.
-failOnNetworkError Boolean Whether to throw an error on network errors. Default is `true`. Only works in CDP browsers; ignored for others.
-shouldThrowError (match) => Boolean Predicate that should return `true` by [Match](https://webdriver.io/docs/api/mock#match) if the network error is considered critical for proper page loading. By default, returns `true` for images, styles, and fonts.
-ignoreNetworkErrorsPatterns Array<String \| RegExp> Patterns of resource URLs for which load success checks are ignored. Takes precedence over `shouldThrowError`.
-timeout Number Page load timeout. By default, the `pageLoadTimeout` value is used. An exception is thrown if selectors still do not exist or the predicate still resolves to `false` after the time has elapsed.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("some test", async ({ browser }) => {
- // With `waitNetworkIdle` also wait for loading images, fonts, styles, ignoring metric errors
- await browser.openAndWait("some/url", {
- selector: [".selector"],
- predicate: () => document.isReady,
- ignoreNetworkErrorsPatterns: ["https://mc.yandex.ru"],
- waitNetworkIdle: true,
- waitNetworkIdleTimeout: 500,
- failOnNetworkError: true,
- timeout: 20000,
- });
-
- await browser.assertView("plain", ".selector");
-});
-```
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/overwriteCommand.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/overwriteCommand.mdx
deleted file mode 100644
index 4ee162f..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/overwriteCommand.mdx
+++ /dev/null
@@ -1,61 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# overwriteCommand
-
-## Overview {#overview}
-
-Use the `overwriteCommand` command to override existing commands of the browser or an element.
-
-
- Also see the recipe "[How to add custom commands][how-to-add-custom-commands]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.overwriteCommand(name, callback, elementScope);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-name String The name of the custom command.
-callback Function The function implementation of the command.
-elementScope Boolean If the value is _true_, add the command to the element instead of the browser. Default: _false_.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-// log the pause duration in ms before the pause and then return the value
-await browser.overwriteCommand("pause", function (origPauseFunction, ms) {
- console.log(`Sleeping for ${ms}`);
-
- origPauseFunction(ms);
-
- return ms;
-});
-
-// use the overwritten pause command
-it("should use my overwrite command", async ({ browser }) => {
- await browser.url("https://webdriver.io");
-
- await browser.pause(1000); // outputs: "Sleeping for 1000"
-});
-```
-
-## Related Commands {#related}
-
-- [addCommand](../addCommand)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/overwriteCommand), from which we drew some information while writing our version.
-
-[how-to-add-custom-commands]: https://webdriver.io/docs/customcommands/#adding-custom-commands
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/pause.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/pause.mdx
deleted file mode 100644
index 1dcbc36..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/pause.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# pause
-
-## Overview {#overview}
-
-Use the `pause` command to halt the execution of the test for a specified period of time.
-
-
- It is not recommended to use this command for waiting for an element to appear. To avoid false
- test results, it's better to use commands like [waitForExist][wait-for-exist] or other
- _waitFor*_ commands.
-
-
-## Usage {#usage}
-
-```javascript
-await browser.pause(milliseconds);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-milliseconds Number Time in milliseconds.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should pause the execution", async ({ browser }) => {
- const starttime = new Date().getTime();
- await browser.pause(3000);
- const endtime = new Date().getTime();
-
- console.log(endtime - starttime); // outputs: 3000
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/pause), from which we drew some information while writing our version.
-
-[wait-for-exist]: ../../element/waitForExist
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollar.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollar.mdx
deleted file mode 100644
index d92be12..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollar.mdx
+++ /dev/null
@@ -1,80 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# react$
-
-## Overview {#overview}
-
-Use the `react$` command to find React components on the page by their actual name, while filtering them by props and state.
-
-
-The _react$_ command only works in applications that use _React v16.x._
-
-Read more about React selectors in the recipe "[How to use selectors][how-to-use-selectors]".
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.react$(reactComponentSelector, { props, state });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-reactComponentSelector String The React component selector.
-props Object React properties the component should have.
-state Any or Any[] React state the component should be in.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should calculate 7 * 6", async ({ browser }) => {
- await browser.url("https://ahfarmer.github.io/calculator/");
-
- await browser
- .react$("t", {
- props: { name: "7" },
- })
- .click();
-
- await browser
- .react$("t", {
- props: { name: "x" },
- })
- .click();
-
- await browser
- .react$("t", {
- props: { name: "6" },
- })
- .click();
-
- await browser
- .react$("t", {
- props: { name: "=" },
- })
- .click();
-
- console.log(await browser.$(".component-display").getText()); // outputs: "42"
-});
-```
-
-## Related Commands {#related}
-
-- [browser.react$$](../reactDollarDollar)
-- [element.react$](../../element/reactDollar)
-- [element.react$$](../../element/reactDollarDollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/react$), from which we drew some information while writing our version.
-
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollarDollar.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollarDollar.mdx
deleted file mode 100644
index a97b712..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reactDollarDollar.mdx
+++ /dev/null
@@ -1,61 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# react$$
-
-## Overview {#overview}
-
-Use the `react$$` command to find multiple React components on the page by their actual name, while filtering them by props and state.
-
-
-The _react$_ command only works in applications that use _React v16.x._
-
-Read more about React selectors in the recipe "[How to use selectors][how-to-use-selectors]".
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.react$$(reactComponentSelector, { props, state });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-reactComponentSelector String The React component selector.
-props Object React properties the component should have.
-state Any or Any[] React state the component should be in.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should calculate 7 * 6", async ({ browser }) => {
- await browser.url("https://ahfarmer.github.io/calculator/");
-
- const orangeButtons = await browser.react$$("t", {
- props: { orange: true },
- });
-
- console.log(await Promise.all(orangeButtons.map(btn => btn.getText())));
- // outputs: "[ '÷', 'x', '-', '+', '=' ]"
-});
-```
-
-## Related Commands {#related}
-
-- [browser.react$](../reactDollar)
-- [element.react$](../../element/reactDollar)
-- [element.react$$](../../element/reactDollarDollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/react$$), from which we drew some information while writing our version.
-
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reloadSession.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reloadSession.mdx
deleted file mode 100644
index a089b60..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/reloadSession.mdx
+++ /dev/null
@@ -1,29 +0,0 @@
-# reloadSession
-
-## Overview {#overview}
-
-Use the `reloadSession` command to create a new Selenium session with the current capabilities.
-
-This command can be useful if you are testing an application with many states and need to clear the browser session between individual tests in a single file, to avoid creating hundreds of separate test files with WDIO. However, be cautious, as this command significantly impacts testing time since creating new Selenium sessions is time-consuming, especially when using cloud services.
-
-## Usage {#usage}
-
-```javascript
-await browser.reloadSession();
-```
-
-## Usage Examples {#examples}
-
-```javascript
-it("should reload my session with current capabilities", async ({ browser }) => {
- console.log(browser.sessionId); // outputs: e042b3f3cd5a479da4e171825e96e655
-
- await browser.reloadSession();
-
- console.log(browser.sessionId); // outputs: 9a0d9bf9d4864160aa982c50cf18a573
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/reloadSession), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/runStep.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/runStep.mdx
deleted file mode 100644
index 8f02545..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/runStep.mdx
+++ /dev/null
@@ -1,78 +0,0 @@
-# runStep
-
-## Overview {#overview}
-
-Use the `runStep` command to obtain a human-readable execution history of the test, which will automatically be displayed in the [html-reporter][reporter].
-Steps can be nested.
-
-## Usage {#usage}
-
-```typescript
-await browser.runStep(stepName, stepCb);
-```
-
-## Command Parameters {#parameters}
-
-
-
-
- **Name**
- **Type**
- **Description**
-
-
-
-
- `stepName`
- `string`
- Step name.
-
-
- `stepCb`
- `() => Promise`
- A function with commands that need to be combined into a single step.
-
-
-
-
-## Usage Examples {#examples}
-
-```typescript
-it("test", async ({ browser }) => {
- await browser.runStep("prepare page", async () => {
- await browser.url("some/url");
- await browser.setCookies(someCookies);
- });
-
- await browser.runStep("make an order", async () => {
- await browser.runStep("navigate to the shopping cart", async () => {
- await browser.$("not-exist-selector").click();
- });
- });
-});
-```
-
-This test will fail with the error "Cannot call click on element with selector 'not-exist-selector' because element wasn't found" due to the missing selector and the following history will be generated:
-
-```
-- testplane: init browser
-- prepare page
-- make an order
- - navigate to the shopping cart
- - $("not-exist-selector")
- - click()
- - waitForExist
-```
-
-In this example step `some step name` is collapsed, because it is completed successfully.
-
-You can also return values from step:
-
-```typescript
-const parsedPage = await browser.runStep("parse page", async () => {
- // ...
- return someData;
-});
-```
-
-[reporter]: ../../../html-reporter/html-reporter-setup
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/savePDF.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/savePDF.mdx
deleted file mode 100644
index 882452d..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/savePDF.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
-# savePDF
-
-## Overview {#overview}
-
-Use the `savePDF` command to save the current browser context to a PDF file.
-
-## Usage {#usage}
-
-```javascript
-await browser.savePDF(filepath, {
- orientation,
- scale,
- background,
- width,
- height,
- top,
- bottom,
- left,
- right,
- shrinkToFit,
- pageRanges,
-});
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-filepath String Path to the PDF file relative to the execution directory (the _.pdf_ extension is mandatory).
-orientation String Orientation of the PDF page.
-scale Number Scale of the PDF page.
-background Boolean Include the background in the PDF.
-width Number Width of the PDF page.
-height Number Height of the PDF page.
-top Number Top margin of the PDF page.
-bottom Number Bottom margin of the PDF page.
-left Number Left margin of the PDF page.
-right Number Right margin of the PDF page.
-shrinkToFit Number Shrink the page to fit the PDF page size.
-pageRanges Object[] Range of pages to include in the PDF.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should save a PDF screenshot of the browser view", async ({ browser }) => {
- await browser.savePDF("./some/path/screenshot.pdf");
-});
-```
-
-## Related Commands {#related}
-
-- [saveRecordingScreen](../saveRecordingScreen)
-- [saveScreenshot](../saveScreenshot)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/savePDF), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveRecordingScreen.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveRecordingScreen.mdx
deleted file mode 100644
index bd65754..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveRecordingScreen.mdx
+++ /dev/null
@@ -1,52 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# saveRecordingScreen
-
-## Overview {#overview}
-
-Use the `saveRecordingScreen` command to save a video to a file that was started with the [startRecordingScreen][start-recording-screen] command.
-
-
- The _saveRecordingScreen_ command is only supported for mobile sessions that use
- [Appium][appium].
-
-
-## Usage {#usage}
-
-```javascript
-await browser.saveRecordingScreen(filepath);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-filepath String Full or relative path to the video file from the execution directory.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should save a video", async ({ browser }) => {
- await browser.startRecordingScreen();
- await browser.$("~BUTTON").click();
- await browser.saveRecordingScreen("./some/path/video.mp4");
-});
-```
-
-## Related Commands {#related}
-
-- [savePDF](../savePDF)
-- [saveScreenshot](../saveScreenshot)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/saveRecordingScreen), from which we drew some information while writing our version.
-
-[start-recording-screen]: https://webdriver.io/docs/api/appium/#startrecordingscreen
-[appium]: http://appium.io/docs/en/commands/device/recording-screen/start-recording-screen/
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveScreenshot.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveScreenshot.mdx
deleted file mode 100644
index 144db5a..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/saveScreenshot.mdx
+++ /dev/null
@@ -1,46 +0,0 @@
-# saveScreenshot
-
-## Overview {#overview}
-
-Use the `saveScreenshot` command to save a screenshot of the current browser context to a PNG file.
-
-Keep in mind that some browser drivers capture screenshots of the entire document (e.g., the [Gecko driver][gecko] for Firefox), while others capture only the current viewport (e.g., [Chromedriver][chromedriver] for Chrome).
-
-## Usage {#usage}
-
-```javascript
-await browser.saveScreenshot(filepath);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-filepath String The path to the screenshot relative to the execution directory (the _.png_ extension is mandatory).
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should save a screenshot of the browser view", async ({ browser }) => {
- await browser.saveScreenshot("./some/path/screenshot.png");
-});
-```
-
-## Related Commands {#related}
-
-- [browser.savePDF](../savePDF)
-- [browser.saveRecordingScreen](../saveRecordingScreen)
-- [element.saveScreenshot](../../element/saveScreenshot)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/saveScreenshot), from which we drew some information while writing our version.
-
-[gecko]: https://github.com/mozilla/geckodriver
-[chromedriver]: https://chromedriver.chromium.org/
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/scroll.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/scroll.mdx
deleted file mode 100644
index 768ff11..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/scroll.mdx
+++ /dev/null
@@ -1,44 +0,0 @@
-# scroll
-
-## Overview {#overview}
-
-Use the `scroll` command to scroll the browser viewport. Note that the `x` and `y` coordinates refer to the current scrolling position of the viewport.
-
-## Usage {#usage}
-
-```typescript
-await browser.scroll(x, y);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-x Number Optional parameter. The x-coordinate to scroll to. Default: _0_.
-y Number Optional parameter. The y-coordinate to scroll to. Default: _0_.
-
-
-
-
-## Usage Examples {#examples}
-
-```typescript
-it("should demonstrate the scroll command", async ({ browser }) => {
- await browser.url("https://webdriver.io");
-
- console.log(await browser.execute(() => window.scrollY)); // returns 0
- await browser.scroll(0, 200);
- console.log(await browser.execute(() => window.scrollY)); // returns 200
-});
-```
-
-## Related Commands {#related}
-
-- [element.scrollIntoView](../../element/scrollIntoView)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/scroll), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setCookies.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setCookies.mdx
deleted file mode 100644
index 07a0e01..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setCookies.mdx
+++ /dev/null
@@ -1,97 +0,0 @@
-# setCookies
-
-## Overview {#overview}
-
-Use the `setCookies` command to set cookies on the current page.
-
-Make sure you are on the page for which you want to set the cookies. You cannot set cookies for an arbitrary page without being on it.
-
-## Usage {#usage}
-
-```javascript
-await browser.setCookies(cookies);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-cookies WebDriver.Cookie or WebDriver.Cookie[] A cookie object or an array of cookie objects.
-
-
-
-
-### WebDriver.Cookie Object Parameters
-
-
-
-**Name** **Type** **Default** **Description**
-
-
-name String _N/A_ The name of the cookie.
-value String _N/A_ The value of the cookie.
-path String "/" The path of the cookie.
-domain String _see description_ The domain the cookie is visible to. If omitted, defaults to the domain of the current document's URL in the browser context.
-secure Boolean false The secure flag of the cookie.
-httpOnly Boolean false The HTTP-only flag of the cookie.
-expiry Number _not set_ The expiry date of the cookie as the number of seconds since the Unix epoch.
-sameSite String "None" The SameSite attribute of the cookie. Valid values are _"Lax"_ or _"Strict"_.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should set a cookie for the page", async ({ browser }) => {
- await browser.url("/");
-
- // set a single cookie
- await browser.setCookies({
- name: "test1",
- value: "one",
- // Optional parameters:
- // cookie path, defaults to "/"
- // path: '/foo',
- // domain the cookie is visible to
- // defaults to domain of the current document's URL in the browser context
- // domain: '.example.com',
- // secure cookie flag, defaults to false
- // secure: true,
- // HTTP-only cookie flag, defaults to false
- // httpOnly: true,
- // expiry date of the cookie in seconds since the Unix epoch
- // expiry: 1551393875
- });
-
- // set multiple cookies
- await browser.setCookies([
- { name: "test2", value: "two" },
- { name: "test3", value: "three" },
- ]);
-
- const cookies = await browser.getCookies();
-
- await console.log(cookies);
- // outputs:
- // [
- // { name: 'test1', value: 'one', domain: 'www.example.com' },
- // { name: 'test2', value: 'two', domain: 'www.example.com' },
- // { name: 'test3', value: 'three', domain: 'www.example.com' }
- // ]
-});
-```
-
-## Related Commands {#related}
-
-- [getCookies](../getCookies)
-- [deleteCookies](../deleteCookies)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/setCookies), from which we drew some information while writing our version.
-
-[same-site]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setMeta.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setMeta.mdx
deleted file mode 100644
index 3ea4575..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setMeta.mdx
+++ /dev/null
@@ -1,57 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# setMeta
-
-## Overview
-
-Use the `setMeta` command to write a value under a specified key in the test's metadata.
-
-To read the metadata, use the [getMeta](../getMeta) command.
-
-
- This command is implemented within Testplane and is not available in the [API
- WebDriverIO][webdriverio-api].
-
-
-## Usage {#usage}
-
-```javascript
-await browser.setMeta(key, value);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-key String The key whose value needs to be written in the test's metadata.
-value String The value to be saved in the test's metadata.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should get meta info of test", async ({ browser }) => {
- await browser.setMeta("foo", "bar");
- await browser.url("/foo/bar?baz=qux");
-
- const val = await browser.getMeta("foo");
- console.log(val); // outputs: bar
-
- const url = await browser.getMeta("url");
- console.log(url); // outputs: /foo/bar?baz=qux
-
- const meta = await browser.getMeta();
- console.log(meta); // outputs: {foo: 'bar', url: '/foo/bar?baz=qux'}
-});
-```
-
-## Related Commands {#related}
-
-- [getMeta](../getMeta)
-
-[webdriverio-api]: https://webdriver.io/docs/api
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setOrientation.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setOrientation.mdx
deleted file mode 100644
index ff1353a..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setOrientation.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
-# setOrientation
-
-## Overview {#overview}
-
-Use the `setOrientation` command to change the browser orientation. This command ensures that subsequent commands will not start executing until the orientation change occurs.
-If the device does not support this feature, the command will be ignored.
-
-## Usage {#usage}
-
-```typescript
-await browser.setOrientation(orientation);
-```
-
-## Command Parameters {#parameters}
-
-
-
-
- **Name**
- **Type**
- **Description**
-
-
-
-
- `orientation`
- `"landscape" | "portrait"`
-
- The path to the screenshot relative to the execution directory (the _.png_ extension
- is mandatory).
-
-
-
-
-
-## Usage Examples {#examples}
-
-```typescript
-it("test", async ({ browser }) => {
- await browser.setOrientation("landscape");
-});
-```
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setTimeout.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setTimeout.mdx
deleted file mode 100644
index e7d08a0..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setTimeout.mdx
+++ /dev/null
@@ -1,49 +0,0 @@
-# setTimeout
-
-## Overview {#overview}
-
-Use the `setTimeout` command to set timeouts for element searches on the page, document load waits, and script executions through the [execute][execute] or [executeAsync][execute-async] commands.
-
-## Usage {#usage}
-
-```javascript
-await browser.setTimeout({ implicit, pageLoad, script });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-implicit Number Time in milliseconds for retrying element location when searching for an element.
-pageLoad Number Time to wait for the document to load, in milliseconds.
-script Number Timeout for scripts run using [execute][execute] or [executeAsync][execute-async], in milliseconds.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should change timeout duration for session with long code duration", async ({ browser }) => {
- await browser.setTimeout({
- pageLoad: 10000,
- script: 60000,
- });
-
- // execute code that takes a long time
- await browser.executeAsync(done => {
- console.log("Wake me up before you go!");
- setTimeout(done, 59000);
- });
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/setTimeout), from which we drew some information while writing our version.
-
-[execute]: ../execute
-[execute-async]: ../executeAsync
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setWindowSize.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setWindowSize.mdx
deleted file mode 100644
index 9144891..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/setWindowSize.mdx
+++ /dev/null
@@ -1,32 +0,0 @@
-# setWindowSize
-
-## Overview {#overview}
-
-Use the `setWindowSize` command to change the outer size of the browser window to the specified width and height.
-
-## Usage {#usage}
-
-```javascript
-await browser.setWindowSize(width, height);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-width Number The width of the browser window to set.
-height Number The height of the browser window to set.
-
-
-
-
-## Related Commands {#related}
-
-- [getWindowSize](../getWindowSize)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/setWindowSize), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchToRepl.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchToRepl.mdx
deleted file mode 100644
index 5ac5890..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchToRepl.mdx
+++ /dev/null
@@ -1,82 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# switchToRepl
-
-## Overview {#overview}
-
-Use the `switchToRepl` command to stop the test execution and open an interactive `REPL` interface in the terminal where you can execute code line by line and observe the results in real-time. This mode allows for convenient debugging of problematic tests both in a locally installed browser and in a remote grid (for example, using [VNC][vnc]).
-
-For more convenient use of the `REPL` mode, it is recommended to use the [VS Code extension][extension].
-
-## Usage {#usage}
-
-```typescript
-await browser.runStep(stepName, stepCb);
-```
-
-## Command Parameters {#parameters}
-
-
-
-
- **Name**
- **Type**
- **Description**
-
-
-
-
- `stepName`
- `string`
- Step name.
-
-
- `context`
- `Record`
- A context with data that will be available in the interactive console.
-
-
-
-
-## Usage Examples {#examples}
-
-```typescript
-it("test", async ({ browser }) => {
- console.log("before open repl");
-
- await browser.switchToRepl();
-
- console.log("after open repl");
-});
-```
-
-When executing this test, the text before open repl will first be printed to the console. Then, the test execution will stop, and an interactive `REPL` interface will open in the terminal, waiting for command input.
-For example, you can execute the following command and immediately get the result of its execution:
-
-```bash
-> await browser.getUrl();
-about:blank
-```
-
-After you finish working in the `REPL` (for instance, by pressing `Cmd+D`), the test execution will continue, and the text after open repl will be printed in the terminal console, after which the browser will close.
-
-You can also pass context to the REPL so that a variable is available in the interface. For example:
-
-```
-it("test", async ({browser}) => {
- const counter = 1;
-
- await browser.switchToRepl({ counter });
-});
-```
-
-Since we passed the `counter` variable to the context, it will be available in the terminal:
-
-```bash
-npx hermione --repl --grep "test" -b "chrome"
-> console.log("counter:", counter);
-counter: 1
-```
-
-[extension]: https://marketplace.visualstudio.com/items?itemName=gemini-testing.vscode-testplane
-[vnc]: https://novnc.com/info.html
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchWindow.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchWindow.mdx
deleted file mode 100644
index 4eb9a90..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/switchWindow.mdx
+++ /dev/null
@@ -1,45 +0,0 @@
-# switchWindow
-
-## Overview {#overview}
-
-Use the `switchWindow` command to focus on a specific tab or window.
-
-## Usage {#usage}
-
-```javascript
-await browser.switchWindow(urlOrTitleToMatch);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-urlOrTitleToMatch String or RegExp A string or regular expression matching the page's title or URL.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should switch to another window", async ({ browser }) => {
- // open URL
- await browser.url("https://google.com");
-
- // create a new window
- await browser.newWindow("https://webdriver.io");
-
- // switch back by matching the URL
- await browser.switchWindow("google.com");
-
- // switch again by matching the page title
- await browser.switchWindow("Next-gen browser and mobile automation test framework for Node.js");
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/switchWindow), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/throttle.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/throttle.mdx
deleted file mode 100644
index e512387..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/throttle.mdx
+++ /dev/null
@@ -1,73 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# throttle
-
-## Overview {#overview}
-
-Use the `throttle` command to simulate different types of network connections for the user.
-
-This command allows you to model the behavior of a website or web application under various network bandwidth conditions.
-
-There are also many presets with ready-made network configuration settings. For example:
-
-- offline | online
-- GPRS
-- Regular2G | Good2G
-- Regular3G | Good3G
-- Regular4G
-- DSL
-- WiFi
-
-
-The _throttle_ command only works when using the _Chrome DevTools Protocol (CDP)_.
-
-Read more in the section "[How to use Chrome DevTools Protocol in testplane][how-to-use-cdp]".
-
-Also, see the recipe "[How to manage network bandwidth][how-to-manage-network-bandwidth]".
-
-
-
-## Usage {#usage}
-
-```javascript
-await browser.throttle({ offline, latency, downloadThroughput, uploadThroughput });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-offline Boolean Enable emulation of a loss of connection.
-latency Number Minimum latency from the sent request to received response headers, in milliseconds.
-downloadThroughput Number Maximum total download throughput (bytes/sec). _-1_ disables download throttling.
-uploadThroughput Number Maximum total upload throughput (bytes/sec). _-1_ disables upload throttling.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should throttle the network", async ({ browser }) => {
- // use a preset
- await browser.throttle("Regular 3G");
-
- // configure the network settings manually
- await browser.throttle({
- offline: false,
- downloadThroughput: (200 * 1024) / 8,
- uploadThroughput: (200 * 1024) / 8,
- latency: 20,
- });
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/throttle), from which we drew some information while writing our version.
-
-[how-to-use-cdp]: ../../../guides/how-to-use-cdp
-[how-to-manage-network-bandwidth]: ../../../guides/how-to-manage-network-bandwidth
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/touchAction.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/touchAction.mdx
deleted file mode 100644
index fe5850f..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/touchAction.mdx
+++ /dev/null
@@ -1,90 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# touchAction
-
-## Overview {#overview}
-
-Use the `touchAction` command to perform gestures in mobile platform tests.
-
-The command allows chaining separate ad hoc actions, which will then be applied to the application element on the device.
-
-The main actions you can use are:
-
-- **press** — requires an element or coordinates (x, y), or both
-- **longPress** — requires an element or coordinates (x, y), or both
-- **tap** — requires an element or coordinates (x, y), or both
-- **moveTo** — requires absolute coordinates (x, y)
-- **wait** — requires time in milliseconds
-- **release** — no parameters needed
-
-
- Currently, the _touchAction_ command is only available for native apps and cannot be used to
- interact with web apps.
-
-
-## Usage {#usage}
-
-```javascript
-await browser.touchAction(action);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-action Object The action to perform.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-it("should do a touch gesture", async ({ browser }) => {
- const screen = await browser.$("//UITextbox");
-
- // simple touch action on element
- await browser.touchAction({
- action: "tap",
- element: screen,
- });
-
- // simple touch action with x and y coordinates
- // touch coordinates are 30px right and 20px down from the viewport
- await browser.touchAction({
- action: "tap",
- x: 30,
- y: 20,
- });
-
- // simple touch action with x and y coordinates
- // touch coordinates are 30px right and 20px down from the element center
- await browser.touchAction({
- action: "tap",
- x: 30,
- y: 20,
- element: screen,
- });
-
- // multi action on element
- // drag&drop from point (200, 200) down by 100px on the screen
- await browser.touchAction([
- { action: "press", x: 200, y: 200 },
- { action: "moveTo", x: 200, y: 300 },
- "release",
- ]);
-});
-```
-
-## Related Commands {#related}
-
-- [element.touchAction](../../element/touchAction)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/touchAction), from which we drew some information while writing our version.
-
-[ad-hoc]: https://en.wikipedia.org/wiki/Ad_hoc
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/uploadFile.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/uploadFile.mdx
deleted file mode 100644
index ea77b00..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/uploadFile.mdx
+++ /dev/null
@@ -1,55 +0,0 @@
-import Admonition from "@theme/Admonition";
-
-# uploadFile
-
-## Overview {#overview}
-
-Use the `uploadFile` command to upload a file to a _[Selenium Standalone][selenium-file]_ server or to the browser via its driver (e.g., [Chromedriver][chromedriver]).
-
-
- The _uploadFile_ command is only supported when using [Selenium Grid][selenium-grid] or
- [Chromedriver][chromedriver]. This is because it uses an unofficial protocol feature that is
- currently implemented only in _Chrome_ and when running on [Selenium Grid][selenium-grid].
-
-
-## Usage {#usage}
-
-```javascript
-await browser.uploadFile(localPath);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-localPath String The path to the local file.
-
-
-
-
-## Usage Examples {#examples}
-
-```javascript
-const path = require("path");
-
-it("should upload a file", async ({ browser }) => {
- await browser.url("https://the-internet.herokuapp.com/upload");
-
- const filePath = "/path/to/some/file.png";
- const remoteFilePath = await browser.uploadFile(filePath);
-
- await browser.$("#file-upload").setValue(remoteFilePath);
- await browser.$("#file-submit").click();
-});
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/uploadFile), from which we drew some information while writing our version.
-
-[selenium-grid]: https://www.selenium.dev/documentation/grid/
-[selenium-file]: https://webdriver.io/docs/api/selenium/#file
-[chromedriver]: https://chromedriver.chromium.org/
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/url.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/url.mdx
deleted file mode 100644
index 7d07423..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/url.mdx
+++ /dev/null
@@ -1,63 +0,0 @@
-# url
-
-## Overview {#overview}
-
-Use the `url` command to navigate to the specified URL in the browser.
-
-If [baseUrl][base-url] is specified in the configuration, it will be added to the `url` parameter using the Node.js method [url.resolve()][url-resolve].
-
-Calling `browser.url()` with the same URL as before will reload the page.
-
-## Usage {#usage}
-
-```javascript
-await browser.url(url);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-url String The URL to open.
-
-
-
-
-## Usage Examples {#examples}
-
-**url.js**
-
-```javascript
-// navigate to URL
-await browser.url("https://webdriver.io");
-
-// get the URL
-console.log(await browser.getUrl()); // outputs: "https://webdriver.io"
-```
-
-**baseUrlResolutions.js**
-
-```javascript
-// Let baseUrl = http://example.com/site
-
-// Specifying a full URL results in https://webdriver.io
-await browser.url("https://webdriver.io");
-
-// Specifying a URL without a leading slash
-// results in the URL relative to the baseUrl: http://example.com/site/relative
-await browser.url("relative");
-
-// Specifying a URL with a leading slash
-// results in the URL relative to the root of baseUrl: http://example.com/rootRelative
-await browser.url("/rootRelative");
-```
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/url), from which we drew some information while writing our version.
-
-[base-url]: ../../../config/browsers#base_url
-[url-resolve]: https://nodejs.org/api/url.html#urlresolvefrom-to
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/waitUntil.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/waitUntil.mdx
deleted file mode 100644
index 77b2553..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/browser/waitUntil.mdx
+++ /dev/null
@@ -1,61 +0,0 @@
-# waitUntil
-
-## Overview {#overview}
-
-Use the `waitUntil` command to wait for a specific condition to be met on the page in the browser.
-
-## Usage {#usage}
-
-```javascript
-await browser.waitUntil(condition, { timeout, timeoutMsg, interval });
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Default** **Description**
-
-
-condition Function _N/A_ The condition to wait for.
-timeout Number 5000 Timeout in milliseconds.
-timeoutMsg String _N/A_ Error message to throw when the timeout is reached.
-interval Number 500 Interval in milliseconds between condition checks.
-
-
-
-
-## Usage Examples {#examples}
-
-**example.html**
-
-```javascript
-I am some text
-
-```
-
-**waitUntil.js**
-
-```javascript
-it("should wait until text has changed", async ({ browser }) => {
- await browser.waitUntil(
- async () => (await browser.$("#someText").getText()) === "I am now different",
- {
- timeout: 5000,
- timeoutMsg: "expected text to be different after 5s",
- },
- );
-});
-```
-
-## Related Commands {#related}
-
-- [element.waitUntil](../../element/waitUntil)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/browser/waitUntil), from which we drew some information while writing our version.
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$$.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$$.mdx
deleted file mode 100644
index 6f1216c..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$$.mdx
+++ /dev/null
@@ -1,98 +0,0 @@
----
-slug: _dollardollar
-sidebar_label: $$
----
-
-import Admonition from "@theme/Admonition";
-
-# $$
-
-## Overview {#overview}
-
-Use the `$$` command instead of [findElements][find-elements] as a shorter command to get multiple elements on the page within the scope of an element. This command is similar to the [browser.$$()](../../browser/_dollardollar) command but differs in that the search for elements will be among the children of the current element.
-
-
- Read more about how to select specific elements in the recipe "[How to use
- selectors][how-to-use-selectors]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.$(selector).$$(subSelector);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-subSelector String or Function or Matcher Selector, JS function, or Matcher object to get multiple elements.
-
-
-
-
-## Usage Examples {#examples}
-
-**index.html**
-
-```html
-
-```
-
-**$$.js**
-
-```javascript
-it("should get text of a menu link", async ({ browser }) => {
- const text = await browser.$("#menu");
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-
-it("should get text of a menu link - JS Function", async ({ browser }) => {
- const text = await browser.$("#menu");
-
- console.log(
- await text
- .$$(function () {
- // Arrow function cannot be used here.
- // This is Element – https://developer.mozilla.org/en-US/docs/Web/API/Element
- // in this specific example – this is HTMLUListElement
- //
- // TypeScript users can do something like:
- // return (this as Element).querySelector('li')
- return this.querySelectorAll("li"); // Element[]
- })[2]
- .$("a")
- .getText(),
- ); // outputs: "API"
-});
-```
-
-## Related Commands
-
-- [element.$](../_dollar)
-- [browser.$](../../browser/_dollar)
-- [browser.$$](../../browser/_dollardollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/$$), from which we drew some information while writing our version.
-
-[find-elements]: https://webdriver.io/docs/api/webdriver/#findelements
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$.mdx
deleted file mode 100644
index ec7edc6..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/$.mdx
+++ /dev/null
@@ -1,123 +0,0 @@
----
-slug: _dollar
-sidebar_position: 1
----
-
-import Admonition from "@theme/Admonition";
-
-# $
-
-## Overview {#overview}
-
-Use the `$` command instead of [findElement][find-element] as a shorter command to get a single element on the page.
-
-The `$` command returns an object describing the element, on which you can call action commands without passing the selector. However, if you do pass a selector, it will first find the corresponding element and then call the action for that element. You can also pass an object as the selector, where the object contains the property `element-6066-11e4-a52e-4f735466cecf` with the value of the element reference. The command then converts the reference into an extended WebdriverIO element. Note: Use these element objects only if you are certain they exist on the page. This can be verified, for example, using the [isExisting](../isExisting) command.
-
-You can chain `$` or `$$` together to navigate down the DOM tree. But note that chaining `$` and `$$` commands makes sense only when using multiple selector strategies. Otherwise, you will be making unnecessary requests that will slow down the test (e.g., `$('body').$('div')` creates two requests, whereas `$('body div')` does the same in one request).
-
-
- Read more about how to select specific elements in the recipe "[How to use
- selectors][how-to-use-selectors]".
-
-
-## Usage {#usage}
-
-```javascript
-await browser.$(selector);
-```
-
-## Command Parameters {#parameters}
-
-
-
-**Name** **Type** **Description**
-
-
-selector String or Function or Matcher Selector, JS function, or Matcher object to get a specific element.
-
-
-
-
-## Usage Examples {#examples}
-
-**index.html**
-
-```html
-
-```
-
-```javascript
-it("should get text of a menu link - JS Function", async ({ browser }) => {
- const text = await browser.$("#menu");
-
- console.log(
- await text
- .$$("li")[2]
- .$(function () {
- // Arrow function cannot be used here.
- // This is Element – https://developer.mozilla.org/en-US/docs/Web/API/Element
- // in this specific example – this is HTMLLIElement
- //
- // TypeScript users can do something like:
- // return (this as Element).querySelector('a')
- return this.querySelector("a"); // Element
- })
- .getText(),
- ); // outputs: "API"
-});
-
-it("should get text of a menu link", async ({ browser }) => {
- const text = await browser.$("#menu");
-
- console.log(await text.$$("li")[2].$("a").getText()); // outputs: "API"
-});
-
-it("should allow to convert protocol result of an element into a WebdriverIO element", async ({
- browser,
-}) => {
- const activeElement = await browser.getActiveElement();
-
- console.log(await browser.$(activeElement).getTagName()); // outputs the active element
-});
-
-it("should use Android's DataMatcher or ViewMatcher selector", async ({ browser }) => {
- const menuItem = await browser.$({
- name: "hasEntry",
- args: ["title", "ViewTitle"],
- class: "androidx.test.espresso.matcher.ViewMatchers",
- });
- await menuItem.click();
-
- const menuItem = await browser.$({
- name: "hasEntry",
- args: ["title", "ViewTitle"],
- });
- await menuItem.click();
-});
-```
-
-## Related Commands {#related}
-
-- [element.$$](../_dollardollar)
-- [browser.$](../../browser/_dollar)
-- [browser.$$](../../browser/_dollardollar)
-
-## References
-
-We'd like to give credit to the original WebdriverIO docs [article](https://webdriver.io/docs/api/element/$), from which we drew some information while writing our version.
-
-[find-element]: https://webdriver.io/docs/api/webdriver/#findelement
-[how-to-use-selectors]: https://webdriver.io/docs/selectors
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/addValue.mdx b/i18n/en/docusaurus-plugin-content-docs/current/commands/element/addValue.mdx
deleted file mode 100644
index d2989ba..0000000
--- a/i18n/en/docusaurus-plugin-content-docs/current/commands/element/addValue.mdx
+++ /dev/null
@@ -1,46 +0,0 @@
-# addValue
-
-## Overview {#overview}
-
-Use the `addValue` command to add a value to an ` ` or `