nightwatchjs上的浏览器变量是什么

时间:2015-11-04 15:41:57

标签: nightwatch.js

我刚刚了解了nighwatchjs并尝试了解编写测试的框架。 根据示例,我可以使用变量浏览器注意到api - 我无法找到有关API Reference或任何外部文档的更多信息。

我认为我理解了页面对象设计模式的概念,并且我在使用选择器等方面经验丰富。

但我想了解更多关于浏览器对象的信息,因为它让我感到困惑:

考虑这个例子:

this.demoTestGoogle = function (browser) {
  browser
    .url('http://www.google.com')
    .waitForElementVisible('body', 1000)
    .setValue('input[type=text]', 'nightwatch')
    .waitForElementVisible('button[name=btnG]', 1000)
    .click('button[name=btnG]')
    .pause(1000)
    .assert.containsText('#main', 'The Night Watch')
    .end();
};

我可以理解它使用谷歌网址并将等待1000毫秒以显示身体标签,输入夜班值,等待,点击按钮,暂停完成某些事情并做一些断言。 但是浏览器变量对我来说仍然是匿名的 - 我还可以用它做些什么呢?

3 个答案:

答案 0 :(得分:3)

我知道Commands documented at nightwatchjs.org描述了browser对象可以做什么。

如果这有帮助,请告诉我。我只是在学习自己,但我会尝试分享我对这些命令的了解。

答案 1 :(得分:2)

浏览器对象是所有测试的基础,因为它实际上代表了浏览器(或会话)环境。我本身写的是环境,因为在这种情况下,浏览器等于当前窗口是误导性的,因为你可以用PhantomJS无头地运行测试。

您可以使用浏览器对象执行许多很酷的操作。在我的Nightwatch配置中,我在globals_path下设置了一个自定义的globals.js文件,它允许我像这样访问全局变量:

browser.globals.someFunction(browser.globals.someVariable);

这也是您实际使用Nightwatch API的所有命令的地方。因此,要最大化当前运行环境的窗口,您可以使用:

browser.maximizeWindow();

之前,比如说,将浏览器指向您要测试的网址:

browser.url(www.example.com);

浏览器对象在您发布的示例中看起来有点奇怪的原因是因为Nightwatch支持并允许其所有命令chained(使用jQuery链接到命令链示例 - 相同的原则适用)

看起来非常漂亮,链接时,不是吗??但是,您不必将测试链接起来。您只需在要发送到会话的每个命令之前编写browser.即可。

顺便说一句,

浏览器在这里不是保留字。你可以随意调用它。我实际上用的是“客户”这个词。因为我想到了“浏览器”这个词。这是误导,因为我还在Chrome和Firefox上对PhantomJS进行了测试。

希望有所帮助!

答案 2 :(得分:1)

有关夜表文档-https://github.com/nightwatchjs/nightwatch/wiki/Understanding-the-Command-Queue

这是用法定义,

  

Nightwatch运行测试时,会在称为命令队列的列表中处理其命令。该列表管理该测试中定义的命令的异步执行。

     

作为队列,命令队列通常遵循先进先出(FIFO)的规则。在测试中调用的第一个命令是在测试运行时首先执行的命令。第二个命令称为下一个,接着是下一个命令,直到添加的最后一个命令为止,这成为最后执行的命令。

     

The command API in Nightwatch - accessible via the object passed into test cases, usually called "client" or "browser" - consists of a collection of methods that are used to construct the command queue.当您调用Nightwatch命令(例如click())时,您不是在向Selenium客户端发送命令以立即单击某些东西,至少不是立即单击。该方法将向命令队列中添加“点击”命令。测试用例函数解析后,它会同步执行某些操作(命令是非阻塞的),它会遍历您调用的Nightwatch命令所定义的命令队列,并在其中异步执行其中的每个命令。

参考命令API-http://nightwatchjs.org/api/#commands