模块
WebdriverIO 将各种模块发布到 NPM 和其他注册中心,您可以使用这些模块构建自己的自动化框架。请参阅有关 WebdriverIO 设置类型的更多文档 此处。
webdriver
和 devtools
协议包(webdriver
和 devtools
)公开了一个类,该类附加了以下静态函数,允许您启动会话
newSession(options, modifier, userPrototype, customCommandWrapper)
使用特定的功能启动新会话。基于会话响应,将提供来自不同协议的命令。
参数
options
: WebDriver 选项modifier
: 允许在返回客户端实例之前修改客户端实例的函数userPrototype
: 允许扩展实例原型的属性对象customCommandWrapper
: 允许在函数调用周围包装功能的函数
返回值
- 浏览器 对象
示例
const client = await WebDriver.newSession({
capabilities: { browserName: 'chrome' }
})
attachToSession(attachInstance, modifier, userPrototype, customCommandWrapper)
附加到正在运行的 WebDriver 或 DevTools 会话。
参数
attachInstance
: 附加会话的实例,或者至少具有属性sessionId
的对象(例如{ sessionId: 'xxx' }
)modifier
: 允许在返回客户端实例之前修改客户端实例的函数userPrototype
: 允许扩展实例原型的属性对象customCommandWrapper
: 允许在函数调用周围包装功能的函数
返回值
- 浏览器 对象
示例
const client = await WebDriver.newSession({...})
const clonedClient = await WebDriver.attachToSession(client)
reloadSession(instance)
重新加载给定实例的会话。
参数
instance
: 要重新加载的包实例
示例
const client = await WebDriver.newSession({...})
await WebDriver.reloadSession(client)
webdriverio
与协议包(webdriver
和 devtools
)类似,您还可以使用 WebdriverIO 包 API 来管理会话。可以使用 import { remote, attach, multiremote } from 'webdriverio
导入 API,并包含以下功能
remote(options, modifier)
启动 WebdriverIO 会话。该实例包含与协议包相同的所有命令,但还具有其他高阶函数,请参阅 API 文档。
参数
options
: WebdriverIO 选项modifier
: 允许在返回客户端实例之前修改客户端实例的函数
返回值
- 浏览器 对象
示例
import { remote } from 'webdriverio'
const browser = await remote({
capabilities: { browserName: 'chrome' }
})
attach(attachOptions)
附加到正在运行的 WebdriverIO 会话。
参数
attachOptions
: 附加会话的实例,或者至少具有属性sessionId
的对象(例如{ sessionId: 'xxx' }
)
返回值
- 浏览器 对象
示例
import { remote, attach } from 'webdriverio'
const browser = await remote({...})
const newBrowser = await attach(browser)
multiremote(multiremoteOptions)
初始化多远程实例,允许您在一个实例中控制多个会话。查看我们的 多远程示例 以了解具体的用例。
参数
multiremoteOptions
: 一个对象,其键表示浏览器名称及其 WebdriverIO 选项。
返回值
- 浏览器 对象
示例
import { multiremote } from 'webdriverio'
const matrix = await multiremote({
myChromeBrowser: {
capabilities: { browserName: 'chrome' }
},
myFirefoxBrowser: {
capabilities: { browserName: 'firefox' }
}
})
await matrix.url('http://json.org')
await matrix.getInstance('browserA').url('https://google.com')
console.log(await matrix.getTitle())
// returns ['Google', 'JSON']
@wdio/cli
您可以包含测试运行程序作为模块并在任意环境中运行它,而不是调用 wdio
命令。为此,您需要将 @wdio/cli
包作为模块引入,如下所示
- EcmaScript 模块
- CommonJS
import Launcher from '@wdio/cli'
const Launcher = require('@wdio/cli').default
之后,创建启动程序的实例并运行测试。
Launcher(configPath, opts)
Launcher
类构造函数需要配置文件的 URL 和一个 opts
对象,其中包含将覆盖配置文件中设置的设置。
参数
configPath
: 要运行的wdio.conf.js
的路径opts
: 参数(<RunCommandArguments>
)以覆盖配置文件中的值
示例
const wdio = new Launcher(
'/path/to/my/wdio.conf.js',
{ spec: '/path/to/a/single/spec.e2e.js' }
)
wdio.run().then((exitCode) => {
process.exit(exitCode)
}, (error) => {
console.error('Launcher failed to start the test', error.stacktrace)
process.exit(1)
})
run
命令返回一个 Promise。如果测试成功或失败,则解析它;如果启动程序无法启动运行测试,则拒绝它。
@wdio/browser-runner
当使用 WebdriverIO 的 浏览器运行程序 运行单元测试或组件测试时,您可以为您的测试导入模拟实用程序,例如:
import { fn, spyOn, mock, unmock } from '@wdio/browser-runner'
以下命名导出可用
fn
模拟函数,请参阅官方 Vitest 文档 中的更多信息。
spyOn
间谍函数,请参阅官方 Vitest 文档 中的更多信息。
mock
模拟文件或依赖模块的方法。
参数
moduleName
: 要模拟的文件的相对路径或模块名称。factory
: 返回模拟值的函数(可选)
示例
mock('../src/constants.ts', () => ({
SOME_DEFAULT: 'mocked out'
}))
mock('lodash', (origModuleFactory) => {
const origModule = await origModuleFactory()
return {
...origModule,
pick: fn()
}
})
unmock
取消模拟在手动模拟(__mocks__
)目录中定义的依赖项。
参数
moduleName
: 要取消模拟的模块的名称。
示例
unmock('lodash')