selenium
sidebar_position: 2
Selenium
此 WebDrive 测试示例将使用 Selenium 和一个流行的 Node.js 测试套装。 您应该已经安装 node.js , 并且一起安装了 npm
或 yarn
, 已完成的示例项目 使用了 yarn
.
创建测试目录
让我们创建一个空目录用做测试项目。 在此示例项目中我们将使用嵌套目录,因为稍后还将使用其他框架,但通常您只需要使用一个框架。创建接下来我们需要使用的目录。 创建我们将要使用的目录 mkdir -p webdriver/selenium
。 指南接下来的部分我们假定您也在目录 webdriver/selenium
中完成。
初始化 Selenium 项目
我们将使用预设的 package.j son
来引导此测试套件,因为我们已经选择了特定的要使用的依赖项,并希望展示一个简单的工作解决方案。 此部分的底部有一个折叠起来的内容,其中有关如何从头开始设置的指南。
package.json
:
{
"name": "selenium",
"version": "1.0.0",
"private": true,
"scripts": {
"test": "mocha"
},
"dependencies": {
"chai": "^4.3.4",
"mocha": "^9.0.3",
"selenium-webdriver": "^4.0.0-beta.4"
}
}
我们有一个脚本将 Mocha 作为测试框架运行,暴露在 test
命令中。 我们还有将用于运行测试的各种依赖项。 Mocha 作为测试框架, Chai 作为断言库, 和 selenium-webdriver
(Node.js 中的 Selenium 软件包)。
如果你想看到如何从头开始设置一个项目,请点击我
测试
与 WebdriverIO 测试套件不同,Selenium不是开箱即用的测试套件,需要开发人员来构建这些内容。 我们选择 Mocha, 它是相当中性的,与 WebDrivers 没有关系。 因此我们的脚本需要做一些工作才能以正确的顺序为我们设置所有内容。 Mocha默认会在 test/test.js
处生成一个测试文件,所以我们现在就来创建该文件。
test/test.js
:
const os = require('os')
const path = require('path')
const { expect } = require('chai')
const { spawn, spawnSync } = require('child_process')
const { Builder, By, Capabilities } = require('selenium-webdriver')
// create the path to the expected application binary
const application = path.resolve(
__dirname,
'..',
'..',
'..',
'target',
'release',
'hello-tauri-webdriver'
)
// keep track of the webdriver instance we create
let driver
// keep track of the tauri-driver process we start
let tauriDriver
before(async function () {
// set timeout to 2 minutes to allow the program to build if it needs to
this.timeout(120000)
// ensure the program has been built
spawnSync('cargo', ['build', '--release'])
// start tauri-driver
tauriDriver = spawn(
path.resolve(os.homedir(), '.cargo', 'bin', 'tauri-driver'),
[],
{ stdio: [null, process.stdout, process.stderr] }
)
const capabilities = new Capabilities()
capabilities.set('tauri:options', { application })
capabilities.setBrowserName('wry')
// start the webdriver client
driver = await new Builder()
.withCapabilities(capabilities)
.usingServer('http://localhost:4444/')
.build()
})
after(async function () {
// stop the webdriver session
await driver.quit()
// kill the tauri-driver process
tauriDriver.kill()
})
describe('Hello Tauri', () => {
it('should be cordial', async () => {
const text = await driver.findElement(By.css('body > h1')).getText()
expect(text).to.match(/^[hH]ello/)
})
it('should be excited', async () => {
const text = await driver.findElement(By.css('body > h1')).getText()
expect(text).to.match(/!$/)
})
it('should be easy on the eyes', async () => {
// selenium returns color css values as rgb(r, g, b)
const text = await driver
.findElement(By.css('body'))
.getCssValue('background-color')
const rgb = text.match(/^rgb\((?\d+), (?\d+), (?\d+)\)$/).groups
expect(rgb).to.have.all.keys('r', 'g', 'b')
const luma = 0.2126 * rgb.r + 0.7152 * rgb.g + 0.0722 * rgb.b
expect(luma).to.be.lessThan(100)
})
})
如果您熟悉 JS 测试框架,那么 describe
、it
和 expect
应该不会陌生。我们还有半复杂的 before()
和 after()
回调来设置和拆卸 mocha。不是测试本身的行都有注释来解释设置和关闭代码。如果你熟悉 WebdriverIO示例中的 Spec 文件,你就会发现有更多的代码不是测试,因为我们必须设置更多与 WebDriver 相关的项目。
运行测试套件
现在,我们已经设置好了依赖项和测试脚本,让我们运行它吧!
- npm
- Yarn
npm test
yarn test
我们应该看到以下输出结果:
➜ selenium git:(main) ✗ yarn test
yarn run v1.22.11
$ Mocha
Hello Tauri
✔ should be cordial (120ms)
✔ should be excited
✔ should be easy on the eyes
3 passing (588ms)
Done in 0.93s.
我们可以看到,我们用 describe
创建的 Hello Tauri
测试套件的 3 个项目都通过了测试!
有了 Selenium 和一些测试套件,我们就可以启用 e2e 测试,完全不用修改我们的 Tauri 应用程序!