browser.pause()和browser.enterRepl()之间有什么区别?

时间:2015-07-14 17:20:49

标签: javascript angularjs selenium selenium-webdriver protractor

在量角器中,有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()

2 个答案:

答案 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 方法,这些方法将在测试中使用,但是在交互模式下。您可以访问elementbrowserprotractor个对象,因此您可以运行,例如:

> $('.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 browserelementprotractor)进行调查。然后我可以exit这种模式并继续跳过各州。

browser.enterRepl() - 我希望浏览器完全停留在该位置,然后让我使用 Protractor API browserelement,{来调查页面{1}})马上,我不需要能够在页面状态之间跳转。

答案 1 :(得分:1)

带有节点版本8.10 的量角器版本5.3不再支持 browser.pause()。更多信息here

您可以通过protractor async aswait完成所需的操作。