Ответ 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
), и мне не нужно быть в состоянии перепрыгнуть между состояниями страницы.