在量角器中,有browser.pause()
function:
Beta(不稳定)
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()
:
Beta(不稳定)
enterRepl
函数用于从任何进入repl循环 指向控制流程。在测试中使用browser.enterRepl()。是否 不需要更改命令行(无需添加' debug')。
element(by.id('foo')).click();
browser.enterRepl();
// Execution will stop before the next click action.
element(by.id('bar')).click();
从提供的文档和示例中可以清楚地看到它们都用于调试测试。但是,目前尚不清楚,两者之间有什么区别。
我们应该何时使用pause()
以及何时使用enterRepl()
?
答案 0 :(得分:33)
一般在docs中解释过,但我会尝试更深入。
量角器有two modes用于调试: DebuggerRepl 和 CommandRepl 。
Repl 这里代表 Read-eval-print-loop ,这通常意味着无论您输入什么命令,它都会立即在当前上下文中进行评估。立即提供结果。例如, Chrome开发者工具中的控制台有点 REPL 用于 Chrome JavaScript / DOM 的实现,或者当您在终端中运行node
时,您会获得 Node.js的JavaScript 上下文的 REPL - 您可以输入命令并获取结果。
当您使用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
因此,您可以使用c
命令转到下一个WebDriver命令,或使用browser.pause()
命令跳转到测试中的下一个d
语句。它们会在您使用时立即执行。因此,此模式基本上允许您跳过页面状态并探索结果。 (注意:此模式提供more commands;它们确实有效,但我不确定它们的输出含义是什么,以及它们对Protractor用户是否有用。)
使用browser.enterRepl()
时,您正在激活 CommandRepl模式。它允许您使用 Protractor 方法,这些方法将在测试中使用,但是在交互模式下。您可以访问element
,browser
和protractor
个对象,因此您可以运行,例如:
> $('.hello').getText();
> 'World'
它会立即打印出结果,因此它可以在沙箱中查询当前页面状态上的DOM 并查看结果。
您可能已经注意到,browser.pause()
命令列表有一行:
type "repl" to enter interactive mode
这意味着当您处于 DebuggerRepl模式时,您可以执行repl
命令激活 CommandRepl模式以获取当前页面状态< / strong>您只需运行browser.pause()
,就可以像使用browser.enterRepl()
一样使用DOM。您可以使用exit
命令返回 DebuggerRepl模式。但是,如果您使用browser.enterRepl()
进入 CommandRepl模式,则无法切换到 DebuggerRepl模式。
此外,可以使用名为 elementExplorer 的功能激活 CommandRepl模式。它可以在没有任何笔试的情况下使用;它只是在 CommandRepl模式中打开一个URL。
TL;博士
总而言之,我相信它们应该根据它们的使用方式来使用。
browser.pause()
- 我希望浏览器完全停留在该位置,以便我可以看到页面上发生了什么。然后,根据我的命令,我希望它跳转到下一个状态,这样我就可以看到这里发生了什么。如果我需要有关当前状态的更多信息,我可以运行repl
并使用 Protractor API (browser
,element
,protractor
)进行调查。然后我可以exit
这种模式并继续跳过各州。
browser.enterRepl()
- 我希望浏览器完全停留在该位置,然后让我使用 Protractor API (browser
,element
,{来调查页面{1}})马上,我不需要能够在页面状态之间跳转。
答案 1 :(得分:1)
带有节点版本8.10 的量角器版本5.3不再支持 browser.pause()
。更多信息here。
您可以通过protractor async aswait完成所需的操作。