Подтвердить что ты не робот

В чем разница между браузером .pause() и browser.enterRepl()?

В транспортимере есть функция browser.pause():

Бета (неустойчивая) pause функция для отладки тестов webdriver. использование browser.pause() в вашем тесте, чтобы ввести отладчик транспортира из эта точка в потоке управления.

element(by.id('foo')).click();
browser.pause();
// Execution will stop before the next click action.
element(by.id('bar')).click();

И, кроме того, есть менее известный - browser.enterRepl():

Бета (нестабильная) enterRepl функция для ввода цикла реплики из любого точки в потоке управления. Используйте браузер .enterRepl() в своем тесте. Есть ли не требуют изменений в командной строке (нет необходимости добавлять "debug" ).

element(by.id('foo')).click();
browser.enterRepl();
// Execution will stop before the next click action.
element(by.id('bar')).click();

Из предоставленной документации и примеров ясно, что они оба используются для отладки тестов. Но, непонятно, какая разница между ними.

Когда мы должны использовать pause() и когда enterRepl()?

4b9b3361

Ответ 1

В общем, это объясняется docs, но я попытаюсь немного глубже.

Прототип имеет два режима для отладки: DebuggerRepl и CommandRepl.

Здесь здесь обозначается цикл Read-eval-print-loop, который обычно означает, что любая команда, которую вы вводите, получает сразу в текущем контексте, и вам предоставляется результат немедленно. Например, консоль в Chrome Developer Tools является своего рода REPL для внедрения JavaScript в JavaScript/DOM или при запуске node в терминале вы получаете REPL для контекста JavaScript Node.js - вы можете вводить команды и получать результат.


Когда вы используете browser.pause(), вы активируете DebuggerRepl. Он приносит вам Repl, где вы можете выполнять команды этого режима. Обычно вы видите этот список команд в терминале:

press c to continue to the next webdriver command
press d to continue to the next debugger statement
type "repl" to enter interactive mode
type "exit" to break out of interactive mode
press ^C to exit

Итак, вы можете перейти к следующей команде WebDriver с помощью команды c или перейти к следующей инструкции browser.pause() в вашем тесте с помощью команды d. Они выполняются сразу же, как вы их используете. Таким образом, этот режим в основном позволяет перепрыгивать через состояния страницы и исследовать результат. (Примечание: этот режим предоставляет больше команд, они действительно работают, но я не уверен, в чем смысл их вывода, и если они полезны для пользователя Protractor в все.)


Когда вы используете browser.enterRepl(), вы активируете режим CommandRepl. Это позволяет использовать методы Protractor, которые вы использовали бы в тестах, но в интерактивном режиме. Вы получаете доступ к объектам element, browser и protractor, поэтому вы можете запустить, например:

> $('.hello').getText();
> 'World'

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

Как вы могли заметить, список команд browser.pause() имеет строку:

type "repl" to enter interactive mode

Это означает, что когда вы находитесь в режиме DebuggerRepl, вы можете выполнить команду repl, чтобы активировать режим CommandRepl для состояния текущей страницы, где вы только что запустили browser.pause(), так что вы можете играйте с DOM, как будто вы только что использовали browser.enterRepl(). Вы можете вернуться в режим DebuggerRepl, используя команду exit. Но если вы вошли в режим CommandRepl с помощью browser.enterRepl(), вы не можете переключиться в режим DebuggerRepl.

Кроме того, режим CommandRepl можно активировать с помощью функции, называемой elementExplorer. Его можно использовать без каких-либо письменных тестов; он просто открывает URL-адрес в режиме CommandRepl.


ТЛ; дг

Подводя итог, я считаю, что они должны использоваться в соответствии с тем, как они называются.

browser.pause() - Я хочу, чтобы браузер останавливался точно в этом месте, чтобы я мог видеть, что происходит на странице. Затем, по моей команде, я хочу, чтобы он перешел в следующее состояние, чтобы я мог видеть, что здесь происходит. Если мне нужно больше информации для текущего состояния, я могу запустить repl и использовать API-интерфейс Protractor (browser, element, protractor) для исследования. Я могу затем exit использовать этот режим и продолжать прыгать через состояния.

browser.enterRepl() - Я хочу, чтобы браузер останавливался точно в этом месте, и позвольте мне сразу же исследовать страницу с помощью API-интерфейса Protractor (browser, element, protractor), и мне не нужно быть в состоянии перепрыгнуть между состояниями страницы.