我刚刚了解了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毫秒以显示身体标签,输入夜班值,等待,点击按钮,暂停完成某些事情并做一些断言。 但是浏览器变量对我来说仍然是匿名的 - 我还可以用它做些什么呢?
答案 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命令所定义的命令队列,并在其中异步执行其中的每个命令。