跳至主要内容

浏览器对象

扩展: EventEmitter

浏览器对象是您用来控制浏览器或移动设备的会话实例。如果您使用 WDIO 测试运行器,则可以通过全局 browserdriver 对象访问 WebDriver 实例,或者使用 @wdio/globals 导入它。如果您在独立模式下使用 WebdriverIO,则 remote 方法将返回浏览器对象。

会话由测试运行器初始化。结束会话也是如此。这也由测试运行器进程完成。

属性

浏览器对象具有以下属性

名称类型详情
capabilities对象从远程服务器分配的功能。
示例
{
acceptInsecureCerts: false,
browserName: 'chrome',
browserVersion: '105.0.5195.125',
chrome: {
chromedriverVersion: '105.0.5195.52',
userDataDir: '/var/folders/3_/pzc_f56j15vbd9z3r0j050sh0000gn/T/.com.google.Chrome.76HD3S'
},
'goog:chromeOptions': { debuggerAddress: 'localhost:64679' },
networkConnectionEnabled: false,
pageLoadStrategy: 'normal',
platformName: 'mac os x',
proxy: {},
setWindowRect: true,
strictFileInteractability: false,
timeouts: { implicit: 0, pageLoad: 300000, script: 30000 },
unhandledPromptBehavior: 'dismiss and notify',
'webauthn:extension:credBlob': true,
'webauthn:extension:largeBlob': true,
'webauthn:virtualAuthenticators': true
}
requestedCapabilities对象从远程服务器请求的功能。
示例
{ browserName: 'chrome' }
sessionId字符串从远程服务器分配的会话 ID。
options对象根据浏览器对象的创建方式,WebdriverIO 选项。请参阅更多设置类型
commandListString[]注册到浏览器实例的命令列表
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

如果命令执行成功,则事件有效负载将为

  • typesuccess
  • id:命令 ID
  • result:命令结果(请参阅API

如果命令出错,则事件有效负载将为

  • typeerror
  • id:命令 ID
  • error:错误代码,例如 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,
},

自定义命令

您可以在浏览器范围内设置自定义命令,以抽象化常用的工作流程。查看我们关于自定义命令的指南以获取更多信息。

欢迎!我如何提供帮助?

WebdriverIO AI Copilot