selenium


sidebar_position: 2


Selenium

示例应用程序

Selenium 指南期望您已经完成了 示例应用程序设置 以便一步一步跟进 。 一般性资料可能仍然会有帮助。

此 WebDrive 测试示例将使用 Selenium 和一个流行的 Node.js 测试套装。 您应该已经安装 node.js , 并且一起安装了 npmyarn已完成的示例项目 使用了 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 软件包)。

如果你想看到如何从头开始设置一个项目,请点击我

如果你想从头安装依赖关系,只需运行以下命令。

  • npm
  • Yarn

npm install mocha chai selenium-webdriver

yarn add mocha chai selenium-webdriver

我建议将 "test": "mocha" 命令添加到 package.json"scripts" 中,这样运行 Mocha 只需要执行

  • npm
  • Yarn

npm test

yarn test

测试

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 测试框架,那么 describeitexpect 应该不会陌生。我们还有半复杂的 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 应用程序!