Skip to content

docs(emulation): user environment emulation guide (ru) - #139

Open
swordqueen wants to merge 1 commit into
masterfrom
users/kseniataranov/DOCORG-8371.emulation
Open

docs(emulation): user environment emulation guide (ru)#139
swordqueen wants to merge 1 commit into
masterfrom
users/kseniataranov/DOCORG-8371.emulation

Conversation

@swordqueen

Copy link
Copy Markdown
Collaborator

Adds a new "Basic guides" article on emulating the user environment in Testplane.
Russian version only; the English page is a stub for now.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

✅ Successfully deployed static


Пользовательская среда влияет на то, как приложение выглядит и работает. Один и тот же интерфейс может по-разному вести себя на мобильном экране, при другой локали, в тёмной теме, без доступа к геолокации или при медленном соединении.

В Testplane эти условия настраиваются несколькими способами: через WebDriver BiDi, обычные WebDriver-команды, CDP и capabilities браузера. Выбор механизма зависит от того, какое свойство среды нужно изменить и в каком браузере выполняется тест.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь речь идет о 4 способах эмуляции, а ниже таблица уже с тремя способами.
я бы здесь капабилити просто вынес на уровень выше как общий способ задать донастройку браузеру и добавил, что какие-то части эмулации (например, user agent) лучше выносить в настройку браузера, чтобы не применять ее к каждому тесту. Собственно, в текущей документации сейчас вообще ничего про это нет, только упоминание про capabilities


<Admonition type="caution" title="Сохраняйте функцию отката">

`browser.restore()` возвращает user agent, но не viewport, установленный через `emulate("device")`. Для полного отката вызывайте функцию, которую вернул `emulate("device")`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

про функцию restoreDevice я бы написал сразу в примере, т.к. сразу не понятно что вообще мы сохранили в переменную. и только в самом конце мы получаем эту информацию

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

При этом, у нас внезапно появляется уже второй раз метод restore(), но мы все еще не знаем что он делает в подробностях


`browser.restore()` возвращает user agent, но не viewport, установленный через `emulate("device")`. Для полного отката вызывайте функцию, которую вернул `emulate("device")`.

Viewport при этом вернётся к профилю `Desktop Chrome`, а не к исходному размеру.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

так а делать то что с этим? :)
если мы пишем проблему, то сразу нужно приводить и пример ее решения. Например, заранее сохранить размеры окна, чтобы их потом применить

});
```

Команда применяется к текущему контексту и не возвращает функцию отката. Чтобы восстановить viewport, вызовите `setViewport()` повторно с нужными значениями.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь не хватает полного примера с сохранением и восстановлением размеров вьюпорта


### User agent

Если клиентский код выбирает мобильный интерфейс по `navigator.userAgent`, задайте значение отдельно:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отдельно от чего?


Значение `1` соответствует обычной скорости, `2` замедляет CPU вдвое, `4` — вчетверо.

Команда поддерживается только в Chromium-браузерах с доступным CDP-подключением. В Firefox она завершается ошибкой до применения ограничений.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

достаточно только того, что оно работает только с chromium. Думаю, и так понятно, что в остальных браузерах оно не сработает


Предварительно выдавать разрешение не нужно.

Чтобы проверить обработку ошибки, передайте объект `Error`:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь нужно явно указать какую именно ошибку мы хотим проверить


</Admonition>

Способ предназначен для Chromium-браузеров, поскольку использует `goog:chromeOptions`.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это вообще никак не связано. просто для каждого типа браузеров свое обозначение. Для chromium это goog:chromeOptions, для остальных браузеров она другая. например,

"moz:firefoxOptions": {
    prefs: {
        "javascript.enabled": false,
    },
}


Повторяющиеся сценарии удобно оформлять как отдельные браузерные профили или вспомогательные функции: например, `mobile`, `dark-theme` и `slow-network`.

Настройки, специфичные для одного сценария, оставляйте явными в самом тесте. Состояние `emulate()` может перейти в следующий тест даже при `isolation: true`, поэтому восстанавливайте его в том же тесте:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Состояние emulate() может перейти в следующий тест даже при isolation: true

хм... звучит сомнительно. есть примеры?

Для гарантированно чистой сессии в каждом тесте задайте для браузера:

```typescript
testsPerSession: 1,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это очень плохой совет, т.к. на создание новой сессии может уходить много времени

может даже быть кейс, когда создание сессию будет занимать больше времени, чем время самого теста. Поэтому такую настройку нужно использовать только в крайних случаях

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants