浏览器对象
扩展: EventEmitter
浏览器对象是您用来控制浏览器或移动设备的会话实例。如果您使用 WDIO 测试运行器,则可以通过全局 browser
或 driver
对象访问 WebDriver 实例,或者使用 @wdio/globals
导入它。如果您在独立模式下使用 WebdriverIO,则 remote
方法将返回浏览器对象。
会话由测试运行器初始化。结束会话也是如此。这也由测试运行器进程完成。
属性
浏览器对象具有以下属性
名称 | 类型 | 详情 |
---|---|---|
capabilities | 对象 | 从远程服务器分配的功能。 示例 { |
requestedCapabilities | 对象 | 从远程服务器请求的功能。 示例 { browserName: 'chrome' } |
sessionId | 字符串 | 从远程服务器分配的会话 ID。 |
options | 对象 | 根据浏览器对象的创建方式,WebdriverIO 选项。请参阅更多设置类型。 |
commandList | String[] | 注册到浏览器实例的命令列表 |
isMobile | 布尔值 | 指示移动会话。请参阅移动标志下的更多信息。 |
isIOS | 布尔值 | 指示 iOS 会话。请参阅移动标志下的更多信息。 |
isAndroid | 布尔值 | 指示 Android 会话。请参阅移动标志下的更多信息。 |
方法
根据会话使用的自动化后端,WebdriverIO 会识别哪些协议命令将附加到浏览器对象。例如,如果您在 Chrome 中运行自动化会话,则可以访问 Chromium 特定的命令,例如 elementHover
,但不能访问任何Appium 命令。
此外,WebdriverIO 提供了一组方便的方法,建议使用这些方法与浏览器或页面上的元素进行交互。
此外,还提供以下命令
名称 | 参数 | 详情 |
---|---|---|
addCommand | - commandName (类型:String )- fn (类型:Function )- attachToElement (类型:boolean ) | 允许定义可从浏览器对象调用的自定义命令,以用于组合目的。在自定义命令指南中了解更多信息。 |
overwriteCommand | - commandName (类型:String )- fn (类型:Function )- attachToElement (类型:boolean ) | 允许使用自定义功能覆盖任何浏览器命令。谨慎使用,因为它可能会混淆框架用户。在自定义命令指南中了解更多信息。 |
addLocatorStrategy | - strategyName (类型:String )- fn (类型:Function ) | 允许定义自定义选择器策略,在选择器指南中了解更多信息。 |
备注
移动标志
如果您需要根据会话是否在移动设备上运行来修改测试,则可以访问移动标志进行检查。
例如,给定此配置
// wdio.conf.js
export const config = {
// ...
capabilities: \\{
platformName: 'iOS',
app: 'net.company.SafariLauncher',
udid: '123123123123abc',
deviceName: 'iPhone',
// ...
}
// ...
}
您可以在测试中像这样访问这些标志
// Note: `driver` is the equivalent to the `browser` object but semantically more correct
// you can choose which global variable you want to use
console.log(driver.isMobile) // outputs: true
console.log(driver.isIOS) // outputs: true
console.log(driver.isAndroid) // outputs: false
例如,如果您想根据设备类型在页面对象中定义选择器,这将非常有用,如下所示
// mypageobject.page.js
import Page from './page'
class LoginPage extends Page {
// ...
get username() {
const selectorAndroid = 'new UiSelector().text("Cancel").className("android.widget.Button")'
const selectorIOS = 'UIATarget.localTarget().frontMostApp().mainWindow().buttons()[0]'
const selectorType = driver.isAndroid ? 'android' : 'ios'
const selector = driver.isAndroid ? selectorAndroid : selectorIOS
return $(`${selectorType}=${selector}`)
}
// ...
}
您还可以使用这些标志仅对某些设备类型运行某些测试
// mytest.e2e.js
describe('my test', () => {
// ...
// only run test with Android devices
if (driver.isAndroid) {
it('tests something only for Android', () => {
// ...
})
}
// ...
})
事件
浏览器对象是一个 EventEmitter,并且会发出一些事件以供您使用。
这是一个事件列表。请记住,这还不是可用事件的完整列表。请随时通过在此处添加更多事件的描述来贡献更新文档。
command
每当 WebdriverIO 发送 WebDriver Classic 命令时,都会发出此事件。它包含以下信息
command
:命令名称,例如navigateTo
method
:用于发送命令请求的 HTTP 方法,例如POST
endpoint
:命令端点,例如/session/fc8dbda381a8bea36a225bd5fd0c069b/url
body
:命令有效负载,例如{ url: 'https://webdriverio.node.org.cn' }
result
每当 WebdriverIO 接收 WebDriver Classic 命令的结果时,都会发出此事件。它包含与 command
事件相同的信息,并增加了以下信息
result
:命令结果
bidiCommand
每当 WebdriverIO 向浏览器驱动程序发送 WebDriver Bidi 命令时,都会发出此事件。它包含有关以下方面的信息
method
:WebDriver Bidi 命令方法params
:关联的命令参数(请参阅API)
bidiResult
如果命令执行成功,则事件有效负载将为
type
:success
id
:命令 IDresult
:命令结果(请参阅API)
如果命令出错,则事件有效负载将为
type
:error
id
:命令 IDerror
:错误代码,例如invalid argument
message
:有关错误的详细信息stacktrace
:堆栈跟踪
request.performance
这是一个用于衡量 WebDriver 级操作的事件。每当 WebdriverIO 向 WebDriver 后端发送请求时,都会发出此事件,并提供一些有用的信息
durationMillisecond
:请求以毫秒为单位的时间持续时间。error
:如果请求失败,则为错误对象。request
:请求对象。您可以找到 url、方法、标头等。retryCount
:如果为0
,则该请求是第一次尝试。当 WebdriverIO 在后台重试时,它会增加。success
:布尔值,表示请求是否成功。如果为false
,则也会提供error
属性。
一个示例事件
Object {
"durationMillisecond": 0.01770925521850586,
"error": [Error: Timeout],
"request": Object { ... },
"retryCount": 0,
"success": false,
},
自定义命令
您可以在浏览器范围内设置自定义命令,以抽象化常用的工作流程。查看我们关于自定义命令的指南以获取更多信息。