我正在使用mocha和selenium-webdriver进行E2E测试。大多数测试都是异步的,我正在使用异步/等待功能来处理此问题。不幸的是,现在我无法完成一个任务。这是我的代码的样子:
describe('Some test', function () {
before(function () {
driver.navigate().to('http://localhost:3000')
})
after(function () {
driver.quit()
})
it('should display element', async function () {
let elementFound = false
try {
await driver.wait(until.elementIsVisible(driver.findElement(By.className('element'))), 1000)
assessForm = await driver.findElement(By.className('element')).isDisplayed()
assert.ok(elementFound)
console.log('elementFound', elementFound)
} catch (err) {
console.log(err)
assert.fail(err)
}
})
})
正在发生的问题似乎是在测试可以完成之前就调用了after
函数。这是错误日志:
错误:超时超过2000毫秒。对于异步测试和挂钩,请确保称为“ done()”;如果返回承诺,请确保其解决。
{NoSuchSessionError:没有这样的会话(驱动程序信息:chromedriver = 2.36.540469(1881fd7f8641508feb5166b7cae561d87723cfa8),平台= Mac OS X 10.13.3x86_64)在Object.checkLegacyResponse(/Users/me./myproject/node_modules/selenium-webdriver/lib/error.js:585:15)在parseHttpResponse(/Users/me./myproject/node_modules/selenium-webdriver/lib/http.js:533:13)在Executor.execute(/Users/me./myproject/node_modules/selenium-webdriver/lib/http.js:468:26)在在process._tickCallback(internal / process / next_tick.js:188:7)处名称:“ NoSuchSessionError”,remoteStacktrace:``}
如果删除after()
功能,我仍然可以得到
错误:超时超过2000毫秒。对于异步测试和挂钩,请确保称为“ done()”;如果返回承诺,请确保其解决。
但是,我的console.log显示已找到我的元素。
如果我再尝试使after()
异步,就像这样:
after(async function () {
await driver.quit()
})
我遇到与第一个相同的错误。
同样重要的是要注意,我已阅读到在进行异步/等待时不必使用done()
。那么到底是什么呢?即使我这样做,我仍然会收到相同的错误。
我该如何解决?似乎一切都井井有条,但我似乎无法在不相互碰触的情况下适当地进行测试。
而不是使用:
await driver.wait(until.elementIsVisible(driver.findElement(By.className('element'))), 1000)
尝试:
await driver.wait(until.elementLocated(By.className('element'))).isDisplayed()