Skip to content

Commit a86d194

Browse files
authored
Merge pull request #23 from gemini-testing/sp.commands
docs(commands): add documentation about missing browser commands
2 parents bd899ad + e4d4eb8 commit a86d194

File tree

12 files changed

+559
-4
lines changed

12 files changed

+559
-4
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# clearSession
2+
3+
## Обзор {#overview}
4+
5+
Команда браузера, которая очищает состояние сессии (удаляет куки, очищает локальное и сессионное хранилища).
6+
7+
## Использование {#usage}
8+
9+
```javascript
10+
await browser.clearSession();
11+
```
12+
13+
## Примеры использования {#examples}
14+
15+
```typescript
16+
it("test", async ({ browser }) => {
17+
await browser.url("https://github.com/gemini-testing/testplane");
18+
19+
(await browser.getCookies()).length; // 5
20+
await browser.execute(() => localStorage.length); // 2
21+
await browser.execute(() => sessionStorage.length); // 1
22+
23+
await browser.clearSession();
24+
25+
(await browser.getCookies()).length; // 0
26+
await browser.execute(() => localStorage.length); // 0
27+
await browser.execute(() => sessionStorage.length); // 0
28+
});
29+
```

docs/commands/browser/runStep.mdx

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# runStep
2+
3+
## Обзор {#overview}
4+
5+
Используйте команду `runStep`, чтобы получить человекочитаемую историю выполнения теста, которая, в том числе, автоматически будет отображаться в [html-reporter][reporter].
6+
Шаги могут быть вложенными.
7+
8+
## Использование {#usage}
9+
10+
```typescript
11+
await browser.runStep(stepName, stepCb);
12+
```
13+
14+
## Параметры команды {#parameters}
15+
16+
<table>
17+
<thead>
18+
<tr>
19+
<td>**Имя**</td>
20+
<td>**Тип**</td>
21+
<td>**Описание**</td>
22+
</tr>
23+
</thead>
24+
<tbody>
25+
<tr>
26+
<td>`stepName`</td>
27+
<td>`string`</td>
28+
<td>Название шага.</td>
29+
</tr>
30+
<tr>
31+
<td>`stepCb`</td>
32+
<td>`() => Promise<any>`</td>
33+
<td>Функция с набором команд, которые нужно объединить в единый шаг.</td>
34+
</tr>
35+
</tbody>
36+
</table>
37+
38+
## Примеры использования {#examples}
39+
40+
```typescript
41+
it("test", async ({ browser }) => {
42+
await browser.runStep("prepare page", async () => {
43+
await browser.url("some/url");
44+
await browser.setCookies(someCookies);
45+
});
46+
47+
await browser.runStep("make an order", async () => {
48+
await browser.runStep("navigate to the shopping cart", async () => {
49+
await browser.$("not-exist-selector").click();
50+
});
51+
});
52+
});
53+
```
54+
55+
Данный тест завершится с ошибкой "Cannot call click on element with selector 'not-exist-selector' because element wasn't found" из-за отсутствующего селектора и будет создана следующая история:
56+
57+
```
58+
- testplane: init browser
59+
- prepare page
60+
- make an order
61+
- navigate to the shopping cart
62+
- $("not-exist-selector")
63+
- click()
64+
- waitForExist
65+
```
66+
67+
В этом примере шаг `prepare page` свернут, т.к. он был выполнен успешно.
68+
69+
Также, вы можете вернуть конкретное значение из шага.
70+
71+
```typescript
72+
const parsedPage = await browser.runStep("parse page", async () => {
73+
// ...
74+
return someData;
75+
});
76+
```
77+
78+
[reporter]: ../../../html-reporter/html-reporter-setup
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# setOrientation
2+
3+
## Обзор {#overview}
4+
5+
Используйте команду `setOrientation`, чтобы изменить ориентацию браузера. Эта команда гарантирует, что последующие команды не начнут выполнение раньше, чем произойдет смена ориентации.
6+
Если устройство не поддерживает такую возможность, то команда будет проигнорирована.
7+
8+
## Использование {#usage}
9+
10+
```typescript
11+
await browser.setOrientation(orientation);
12+
```
13+
14+
## Параметры команды {#parameters}
15+
16+
<table>
17+
<thead>
18+
<tr>
19+
<td>**Имя**</td>
20+
<td>**Тип**</td>
21+
<td>**Описание**</td>
22+
</tr>
23+
</thead>
24+
<tbody>
25+
<tr>
26+
<td>`orientation`</td>
27+
<td>`"landscape" | "portrait"`</td>
28+
<td>The orientation to set.</td>
29+
</tr>
30+
</tbody>
31+
</table>
32+
33+
## Примеры использования {#examples}
34+
35+
```typescript
36+
it("test", async ({ browser }) => {
37+
await browser.setOrientation("landscape");
38+
});
39+
```
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import Admonition from "@theme/Admonition";
2+
3+
# switchToRepl
4+
5+
## Обзор {#overview}
6+
7+
Используйте команду `switchToRepl`, чтобы остановить выполнение теста и открыть интерактивный интерфейс REPL в терминале, в котором можно выполнять код построчно и наблюдать за результатом выполнения в реальном времени.
8+
Этот режим позволяет удобно пошабого дебажить проблемные тесты как в локально установленном браузере, так и в удаленном гриде (например, с помощью [VNC][vnc]).
9+
10+
Для более удобного использования REPL-режима рекомендуется использовать [расширение для VS Code][extension].
11+
12+
<Admonition type="warning">
13+
Данная команда доступна только при запуске `testplane` с опцией `--repl`. При запуске необходимо
14+
явно указать тест и браузер, т.к. в REPL-режиме нельзя запускать сразу несколько тестов.
15+
</Admonition>
16+
17+
## Использование {#usage}
18+
19+
```typescript
20+
await browser.switchToRepl(ctx);
21+
```
22+
23+
## Параметры команды {#parameters}
24+
25+
<table>
26+
<thead>
27+
<tr>
28+
<td>**Имя**</td>
29+
<td>**Тип**</td>
30+
<td>**Описание**</td>
31+
</tr>
32+
</thead>
33+
<tbody>
34+
<tr>
35+
<td>`context`</td>
36+
<td>`Record<string, unknown>`</td>
37+
<td>Контекст с данными, которые будут доступны в интерактивном режиме.</td>
38+
</tr>
39+
</tbody>
40+
</table>
41+
42+
## Примеры использования {#examples}
43+
44+
```typescript
45+
it("test", async ({ browser }) => {
46+
console.log("before open repl");
47+
48+
await browser.switchToRepl();
49+
50+
console.log("after open repl");
51+
});
52+
```
53+
54+
При выполнении данного теста сначала будет выведен текст `before open repl` в консоль. Затем выполнение теста остановится, и в терминале откроется интерактивный интерфейс REPL, ожидающий ввода команд.
55+
Например, можно выполнить следующую команду и сразу получить результат ее выполнения:
56+
57+
```bash
58+
> await browser.getUrl();
59+
about:blank
60+
```
61+
62+
После того, как вы закончите работу в REPL (например, нажатием `Cmd+D`), выполнение теста продолжится, и в консоли терминала будет выведен текст `after open repl`, а затем браузер закроется.
63+
64+
Также, можно передать контекст в REPL, чтобы переменная была доступна в интерфейсе. Например:
65+
66+
```
67+
it("test", async ({browser}) => {
68+
const counter = 1;
69+
70+
await browser.switchToRepl({ counter });
71+
});
72+
```
73+
74+
Т.к. мы передали в контекст переменную `counter`, то она будет доступна в терминале:
75+
76+
```bash
77+
npx hermione --repl --grep "test" -b "chrome"
78+
> console.log("counter:", counter);
79+
counter: 1
80+
```
81+
82+
[extension]: https://marketplace.visualstudio.com/items?itemName=gemini-testing.vscode-testplane
83+
[vnc]: https://novnc.com/info.html
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import Admonition from "@theme/Admonition";
2+
3+
# moveCursorTo
4+
5+
## Обзор {#overview}
6+
7+
<Admonition type="info">
8+
Эта команда является временной и будет удалена в следующей мажорной версии (`[email protected]`).
9+
Отличается от стандартной `moveTo` тем, что перемещает курсор относительно верхнего левого угла
10+
элемента (как это было в `hermione@7`).
11+
</Admonition>
12+
13+
Используйте команду `moveCursorTo`, чтобы переместить курсор мыши на смещение относительно указанного элемента.
14+
Если смещение не указано, то курсор мыши будет перемещен в верхний левый угол элемента.
15+
16+
## Использование {#usage}
17+
18+
```typescript
19+
await browser.$(selector).moveCursorTo({ xOffset, yOffset });
20+
```
21+
22+
## Параметры команды {#parameters}
23+
24+
<table>
25+
<thead>
26+
<tr>
27+
<td>**Имя**</td>
28+
<td>**Тип**</td>
29+
<td>**Описание**</td>
30+
</tr>
31+
</thead>
32+
<tbody>
33+
<tr>
34+
<td>`xOffset`</td>
35+
<td>`number`</td>
36+
<td>
37+
Смещение по оси X. Задается относительно верхнего левого угла элемента. Если не
38+
указано, мышь переместится в левый верхний угол элемента.
39+
</td>
40+
</tr>
41+
<tr>
42+
<td>`yOffset`</td>
43+
<td>`number`</td>
44+
<td>
45+
Смещение по оси Y. Задается относительно верхнего левого угла элемента. Если не
46+
указано, мышь переместится в левый верхний угол элемента.
47+
</td>
48+
</tr>
49+
</tbody>
50+
</table>

docs/commands/overview.mdx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ import Admonition from "@theme/Admonition";
3939

4040
- не проставлены связи между похожими командами: нет кластеризации команд;
4141

42-
- все команды описаны только на английском языке.
43-
4442
Тем не менее в наше описание пока ещё не вошли протоколо-специфичные команды. Соответствующие команды вы можете посмотреть на сайте WebDriverIO в разделе "[Protocols][webdriverio-protocols]".
4543

4644
Также в описаниях некоторых команд ссылки на отдельные рецепты все еще не локализованы и ведут на сайт WebDriverIO.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# clearSession
2+
3+
## Overview {#overview}
4+
5+
Browser command that clears session state (deletes cookies, clears local and session storages).
6+
7+
## Usage {#usage}
8+
9+
```javascript
10+
await browser.clearSession();
11+
```
12+
13+
## Usage Examples {#examples}
14+
15+
```typescript
16+
it("test", async ({ browser }) => {
17+
await browser.url("https://github.com/gemini-testing/testplane");
18+
19+
(await browser.getCookies()).length; // 5
20+
await browser.execute(() => localStorage.length); // 2
21+
await browser.execute(() => sessionStorage.length); // 1
22+
23+
await browser.clearSession();
24+
25+
(await browser.getCookies()).length; // 0
26+
await browser.execute(() => localStorage.length); // 0
27+
await browser.execute(() => sessionStorage.length); // 0
28+
});
29+
```

0 commit comments

Comments
 (0)