API 命令
Nightwatch 提供了基本的 WebDriver 协议映射,以及各种复合命令,以确保更流畅和方便的语法来编写测试。
- 复合命令 - 例如
getValue
或isVisible
,通常包含两个或多个 WebDriver 协议命令 - 协议命令 - 通常是针对 W3C WebDriver 协议的简单映射,或者在某些情况下,是其前身 - Selenium JsonWireProtocol 协议。
其中一些是基本命令(如 url
和 execute
),而另一些是 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
- .launchApp()
- .getNetworkConditions()
- .setNetworkConditions()
- .sendDevToolsCommand()
- .sendAndGetDevToolsCommand()
- .setPermission()
- .setDownloadPath()
- .getCastSinks()
- .setCastSinkToUse()
- .startCastTabMirroring()
- .getCastIssueMessage()
- .stopCasting()
更多信息
示例
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 扩展
假设您需要安装一个名为 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;
}
}
}
};