跳至主要内容

运行器

在使用测试运行器时,WebdriverIO 中的运行器会协调测试的运行方式和位置。WebdriverIO 目前支持两种不同类型的运行器:本地运行器和浏览器运行器。

本地运行器

本地运行器在工作进程中启动您的框架(例如 Mocha、Jasmine 或 Cucumber),并在您的 Node.js 环境中运行所有测试文件。每个测试文件都将在每个功能的单独工作进程中运行,从而实现最大并发性。每个工作进程使用单个浏览器实例,因此运行自己的浏览器会话,从而实现最大隔离。

鉴于每个测试都在其自己的隔离进程中运行,因此无法跨测试文件共享数据。有两种方法可以解决此问题

如果在wdio.conf.js中未定义其他内容,则本地运行器是 WebdriverIO 中的默认运行器。

安装

要使用本地运行器,您可以通过以下方式安装它

npm install --save-dev @wdio/local-runner

设置

本地运行器是 WebdriverIO 中的默认运行器,因此无需在您的wdio.conf.js中定义它。如果要显式设置它,可以按如下方式定义它

// wdio.conf.js
export const {
// ...
runner: 'local',
// ...
}

浏览器运行器

本地运行器相反,浏览器运行器在浏览器中启动并执行框架。这允许您在实际浏览器中运行单元测试或组件测试,而不是像许多其他测试框架那样在 JSDOM 中运行。

虽然JSDOM被广泛用于测试目的,但它最终不是一个真正的浏览器,也无法用它模拟移动环境。借助此运行器,WebdriverIO 使您能够轻松地在浏览器中运行测试,并使用 WebDriver 命令与页面上呈现的元素进行交互。

以下是 JSDOM 中运行测试与 WebdriverIO 浏览器运行器的概述

JSDOMWebdriverIO 浏览器运行器
1.使用 Web 标准(特别是 WHATWG DOM 和 HTML 标准)的重新实现,在 Node.js 中运行您的测试在实际浏览器中执行您的测试,并在用户使用的环境中运行代码
2.与组件的交互只能通过 JavaScript 模仿您可以使用WebdriverIO API通过 WebDriver 协议与元素进行交互
3.画布支持需要其他依赖项,并且存在局限性您可以访问真实的Canvas API
4.JSDOM 有一些注意事项和不支持的 Web API所有 Web API 都受支持,因为测试在实际浏览器中运行
5.无法检测跨浏览器错误支持所有浏览器,包括移动浏览器
6.不能测试元素伪状态支持伪状态,例如:hover:active

此运行器使用Vite编译您的测试代码并在浏览器中加载它。它带有以下组件框架的预设

  • React
  • Preact
  • Vue.js
  • Svelte
  • SolidJS
  • Stencil

每个测试文件/测试文件组都在单个页面内运行,这意味着每次测试之间都会重新加载页面以确保测试之间的隔离。

安装

要使用浏览器运行器,您可以通过以下方式安装它

npm install --save-dev @wdio/browser-runner

设置

要使用浏览器运行器,您必须在wdio.conf.js文件中定义一个runner属性,例如

// wdio.conf.js
export const {
// ...
runner: 'browser',
// ...
}

运行器选项

浏览器运行器允许以下配置

preset

如果您使用上述提到的框架之一测试组件,则可以定义一个预设,确保一切开箱即用。此选项不能与viteConfig一起使用。

类型:vue | svelte | solid | react | preact | stencil
示例

wdio.conf.js
export const {
// ...
runner: ['browser', {
preset: 'svelte'
}],
// ...
}

viteConfig

定义您自己的Vite 配置。您可以传入一个自定义对象,或者如果您在开发中使用 Vite.js,则导入现有的vite.conf.ts文件。请注意,WebdriverIO 保留自定义 Vite 配置以设置测试工具。

类型:stringUserConfig(env: ConfigEnv) => UserConfig | Promise<UserConfig>
示例

wdio.conf.ts
import viteConfig from '../vite.config.ts'

export const {
// ...
runner: ['browser', { viteConfig }],
// or just:
runner: ['browser', { viteConfig: '../vites.config.ts' }],
// or use a function if your vite config contains a lot of plugins
// which you only want to resolve when value is read
runner: ['browser', {
viteConfig: () => ({
// ...
})
}],
// ...
}

headless

如果设置为true,则运行器将更新功能以无头方式运行测试。默认情况下,这在设置了CI环境变量为'1''true'的 CI 环境中启用。

类型:boolean
默认值:false,如果设置了CI环境变量,则设置为true

rootDir

项目根目录。

类型:string
默认值:process.cwd()

coverage

WebdriverIO 通过istanbul支持测试覆盖率报告。有关更多详细信息,请参阅覆盖率选项

类型:object
默认值:undefined

覆盖率选项

以下选项允许配置覆盖率报告。

enabled

启用覆盖率收集。

类型:boolean
默认值:false

include

作为 glob 模式包含在覆盖范围内的文件列表。

类型:string[]
默认值:[**]

exclude

作为 glob 模式排除在覆盖范围内的文件列表。

类型:string[]
默认值

[
'coverage/**',
'dist/**',
'packages/*/test{,s}/**',
'**/*.d.ts',
'cypress/**',
'test{,s}/**',
'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}',
'**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}',
'**/__tests__/**',
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*',
'**/.{eslint,mocha,prettier}rc.{js,cjs,yml}',
]

extension

报告应包含的文件扩展名列表。

类型:string | string[]
默认值:['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte']

reportsDirectory

写入覆盖率报告的目录。

类型:string
默认值:./coverage

reporter

要使用的覆盖率报告器。有关所有报告器的详细列表,请参阅istanbul 文档

类型:string[]
默认值:['text', 'html', 'clover', 'json-summary']

perFile

检查每个文件的阈值。有关实际阈值,请参阅linesfunctionsbranchesstatements

类型:boolean
默认值:false

clean

在运行测试之前清除覆盖率结果。

类型:boolean
默认值:true

lines

行的阈值。

类型: number
默认值:undefined

functions

函数阈值。

类型: number
默认值:undefined

branches

分支阈值。

类型: number
默认值:undefined

statements

语句阈值。

类型: number
默认值:undefined

限制

当使用 WebdriverIO 浏览器运行器时,需要注意线程阻塞对话框(如 alertconfirm)无法原生使用。这是因为它们会阻塞网页,这意味着 WebdriverIO 无法继续与页面通信,导致执行挂起。

在这种情况下,WebdriverIO 提供了具有默认返回值的默认模拟。这确保了如果用户意外使用了同步弹出式 Web API,执行不会挂起。但是,仍然建议用户模拟这些 Web API 以获得更好的体验。在 模拟 中了解更多信息。

示例

请务必查看有关 组件测试 的文档,并查看 示例仓库 以获取使用这些框架和其他各种框架的示例。

欢迎!我如何帮助您?

WebdriverIO AI Copilot