多重远程
WebdriverIO 允许您在单个测试中运行多个自动化会话。这在测试需要多个用户的功能时非常方便(例如,聊天或 WebRTC 应用程序)。
您无需创建多个远程实例,在每个实例上执行常见命令(如 newSession 或 url),而是可以简单地创建一个 multiremote 实例,同时控制所有浏览器。
为此,只需使用 multiremote() 函数,并传入一个对象,该对象中的名称作为键,capabilities 作为值。通过为每个能力指定名称,您可以在对单个实例执行命令时轻松选择和访问该实例。
Multiremote 的目的_不是_并行执行所有测试。 它旨在帮助协调多个浏览器和/或移动设备进行特殊集成测试(例如聊天应用程序)。
所有 multiremote 实例都会返回结果数组。第一个结果代表能力对象中定义的第一个能力,第二个结果代表第二个能力,依此类推。
使用独立模式
以下是在__独立模式__中创建 multiremote 实例的示例:
import { multiremote } from 'webdriverio'
(async () => {
const browser = await multiremote({
myChromeBrowser: {
capabilities: {
browserName: 'chrome'
}
},
myFirefoxBrowser: {
capabilities: {
browserName: 'firefox'
}
}
})
// open url with both browser at the same time
await browser.url('http://json.org')
// call commands at the same time
const title = await browser.getTitle()
expect(title).toEqual(['JSON', 'JSON'])
// click on an element at the same time
const elem = await browser.$('#someElem')
await elem.click()
// only click with one browser (Firefox)
await elem.getInstance('myFirefoxBrowser').click()
})()
使用 WDIO 测试运行器
要在 WDIO 测试运行器中使用 multiremote,只需在 wdio.conf.js 中将 capabilities 对象定义为以浏览器名称为键的对象(而不是能力列表):
export const config = {
// ...
capabilities: {
myChromeBrowser: {
capabilities: {
browserName: 'chrome'
}
},
myFirefoxBrowser: {
capabilities: {
browserName: 'firefox'
}
}
}
// ...
}
这将创建两个 WebDriver 会话,分别使用 Chrome 和 Firefox。除了 Chrome 和 Firefox 外,您还可以使用 Appium 启动两个移动设备,或者一个移动设备和一个浏览器。
您还可以通过将浏览器 capabilities 对象放入数组中来并行运行 multiremote。请确保在每个浏览器中包含 capabilities 字段,因为这是我们区分每种模式的方式。
export const config = {
// ...
capabilities: [{
myChromeBrowser0: {
capabilities: {
browserName: 'chrome'
}
},
myFirefoxBrowser0: {
capabilities: {
browserName: 'firefox'
}
}
}, {
myChromeBrowser1: {
capabilities: {
browserName: 'chrome'
}
},
myFirefoxBrowser1: {
capabilities: {
browserName: 'firefox'
}
}
}]
// ...
}
您甚至可以启动其中一个云服务后端,并结合本地 Webdriver/Appium 或 Selenium Standalone 实例。如果您在浏览器功能中指定了 bstack:options(Browserstack)、sauce:options(SauceLabs)或 tb:options