【发布时间】:2021-07-07 17:51:56
【问题描述】:
我正在尝试创建一个简单的自动化测试来检测添加的元素是否包含它应该具有的文本。使用带有jest 命令的node.js 运行测试。我正在使用 Selenium 来自动化 UI 流程,并使用 Jest 来验证 UI 的内容。
我想做以下事情。
- 在运行任何测试之前,在
describe块中的所有tests中创建可访问的变量 - 在
describe块中的所有tests运行后关闭 Selenium 驱动的浏览器
到目前为止,我有这个代码。
const { Builder, By, until } = require('selenium-webdriver')
const url = 'http://127.0.0.1:3000'
describe('addUser', async() => {
afterAll(async() => {
await driver.quit()
}, 15000)
test('valid name and age should add a new element', async() => {
const driver = await new Builder().forBrowser('firefox').build()
await driver.get(url)
const nameField = await driver.wait(until.elementLocated(By.id('name')), 10000)
const ageField = await driver.wait(until.elementLocated(By.id('age')), 10000)
const btnAddUser = await driver.wait(until.elementLocated(By.id('btnAddUser')), 10000)
await nameField.click()
await nameField.sendKeys('Adam')
await ageField.click()
await ageField.sendKeys('39')
await btnAddUser.click()
const userItem = await driver.wait(until.elementLocated(By.css('.user-item')), 10000)
const userItemText = await userItem.getText()
expect(userItemText).toBe('Adam (39 years old)')
}, 10000)
})
我面临的问题如下。
- 我必须声明
driver,要求driver打开一个新页面,并在每次运行测试时找到所有必要的元素。如果可能的话,我想在beforeAll函数(通过 Jest)中执行这些初始化步骤,并以某种方式存储变量。然后,我可以在每个测试中使用driver、nameField、ageField等,而无需再次声明它们。在保持干净代码的同时,我将如何做到这一点? - 在
addUserdescribe块内的所有测试运行后,我将关闭 Selenium 驱动的浏览器。所以,我在afterAll(Jest) 中添加了driver.quit()来关闭浏览器。不幸的是,这不起作用。浏览器不会自行关闭。如何在每个describe块之后关闭 Selenium 操作的浏览器?
测试很好,但是我该如何解决上面的两个问题?
【问题讨论】:
-
driver在测试范围内声明,在 afterAll 中不可用。为每个测试使用单独的驱动程序,在 beforeEach 中定义它们并在 afterEach 中执行 driver.quit()。或者重用同一个驱动,在 beforeAll 中定义,在 afterAll 中做 driver.quit()。 -
@EstusFlask 我尝试在
beforeAll中定义driver, nameField, ageField, and btnAddUser。但是,当我尝试访问test中的nameField、ageField和btnAddUser时,它说nameField没有定义。 -
如果您在 beforeAll(
let等)中声明变量,它们在测试中将不可见。这是特定于 JS 而不是 Jest,您可能需要检查变量范围。你当然不需要 beforeAll 中的 nameField 等,因为它们是特定于这个测试的,而驱动程序不是。
标签: selenium selenium-webdriver jestjs