nightwatchjs 的浏览器变量是什么

What is the browser variable at nightwatchjs

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

我想我理解了页面对象设计模式的概念并且我在使用选择器等方面有经验

但我想了解更多有关使用的浏览器对象的信息,因为它让我困惑到底发生了什么:

考虑这个例子:

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();
};

我可以理解它使用 google url 并且会等待 1000 毫秒让 body 标签可见,输入守夜值,等待,点击按钮,暂停做某事并做一些断言。 但是浏览器变量对我来说仍然是匿名的——我还能用它做什么?

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

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

浏览器对象是所有测试的重要基础,因为它从字面上表示浏览器(或会话)环境。我写 environment 本身,因为在这种情况下说浏览器等于当前的 window 是误导性的,因为例如你可以是 运行ning 使用 PhantomJS 进行无头测试。

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

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

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

browser.maximizeWindow();

之前,比方说,将浏览器指向您要测试的 URL:

browser.url(www.example.com);

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

它看起来确实非常漂亮,当被链接起来时,不是吗!?但是您不必链接测试。您可以在要发送到会话的每个命令之前简单地写 browser.

顺便说一句,浏览器在这里不是保留字。你可以随心所欲地称呼它。我实际上使用了 'client' 这个词,因为我认为 'browser' 这个词具有误导性,因为我还 运行 与 Chrome 和 Firefox 一起在 PhantomJS 上进行了测试。

希望对您有所帮助!

参考 nightwatch 文档 - https://github.com/nightwatchjs/nightwatch/wiki/Understanding-the-Command-Queue

这里是用法定义,

When Nightwatch runs a test, it processes its commands in a list known as the command queue. This list manages the asynchronous execution of the commands defined in that test.

As a queue, the command queue generally follows the rule of first in, first out (FIFO). The first command you call in a test is the first executed when the test runs. The second command is called next, followed by the next command up until the last command added, which becomes the last command executed.

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. When you call a Nightwatch command such as click(), you're not sending the Selenium client the command to immediately click something, at least not right away. That method instead adds a "click" command to the command queue. After the test case function has resolved, something it does synchronously (commands are non-blocking), it traverses the command queue as defined by the Nightwatch commands you called, running through the queue executing each command in it asynchronously.

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