API 命令

Nightwatch 提供了基本的 WebDriver 协议映射,以及各种复合命令,以确保更流畅和方便的语法来编写测试。

  • 复合命令 - 例如 getValueisVisible,通常包含两个或多个 WebDriver 协议命令
  • 协议命令 - 通常是针对 W3C WebDriver 协议的简单映射,或者在某些情况下,是其前身 - Selenium JsonWireProtocol 协议。

其中一些是基本命令(如 urlexecute),而另一些是 Nightwatch 命令和断言使用的内部命令。

回调函数

下面每个方法都允许将 callback 参数作为最后一个参数传递。命令完成后,回调函数将使用主 API (browser) 作为上下文和响应对象作为参数进行调用。


this.demoTest = function (browser) {
  browser.click("#main ul li a.first", function(result) {
    this.assert.ok(browser === this);
    this.assert.ok(typeof result == "object");
  });
};

回调中的 Promise

如果回调返回一个 Promise,测试运行器将在继续执行其余命令之前等待 Promise 解决(即解析或拒绝)。


module.exports = {
  demoTest: function (browser) {
    browser
      .init()
      .getText("#main ul li", function(result) {
        return new Promise(function(resolve, reject) {
          setTimeout(function() {
            console.log('Value:', result.value);
            resolve();
          }, 1000);
        });
      })
      .click('#login button');
  },
  
demoTestAsync: async function(browser) { const text = await browser.init().getText("#main ul li", function(result) { return Promise.resolve(result.value); });
console.log('The text is', text); } };

使用 Chrome DevTools 协议

既有 ChromeDriver 以及 EdgeDriver 会暴露一些特定命令,用于处理其各自的浏览器。

当使用 ChromeDriver 或 EdgeDriver 时,现在可以通过 Chrome DevTools 协议 执行命令。

以下是 browser 对象上 chrome 命名空间中可用的所有命令列表

browser.chrome

更多信息

示例

describe('Chrome DevTools Example', function() {
  
it ('using CDP DOM Snapshot', async function() { const dom = await browser.chrome.sendAndGetDevToolsCommand('DOMSnapshot.captureSnapshot', { computedStyles: [] });
console.log('DOM', dom) }) });

Firefox 特定命令

FirefoxDriver 会暴露一些特定命令,例如设置上下文以运行“特权”javascript 代码或处理附加组件。现在可以在 Nightwatch 中直接使用这些命令,位于 firefox 命名空间中。

browser.firefox

更多信息

自定义 Firefox 配置文件

每个 Firefox WebDriver 实例都将使用匿名配置文件创建,确保浏览器历史记录不会共享会话数据(cookie、历史记录、缓存、离线存储等)。

用于每个 WebDriver 会话的配置文件可以使用 Selenium 中的 Options 类进行配置。Nightwatch 2 完全支持使用 selenium-webdriver 库创建的选项对象。

不会修改现有的 Firefox 配置文件;相反,WebDriver 将创建一个副本供其修改。某些浏览器首选项是 WebDriver 正常运行所必需的,并且始终会被覆盖。

安装 Firefox 扩展

假设您需要安装一个名为 Firebug 的扩展。在您的 nightwatch.conf.js 中,可以使用 Options 类配置 WebDriver 会话,如下所示

const firefox = require('selenium-webdriver/firefox');

const options = new firefox.Options() .addExtensions('../../../path/to/firebug.xpi') .setPreference('extensions.firebug.showChromeErrors', true);
module.exports = { src_folders: ['tests'], test_settings: { default: { browserName: 'firefox', desiredCapabilities: options } } };

或者作为函数

module.exports = {
  src_folders: ['tests'],
  test_settings: {
    default: {
      browserName: 'firefox',
      desiredCapabilities() {
        const firefox = require('selenium-webdriver/firefox');
        
const options = new firefox.Options() .addExtensions('../../../path/to/firebug.xpi') .setPreference('extensions.firebug.showChromeErrors', true);
return options; } } } };