gpt4 book ai didi

node.js - new Builder().forBrowser ('chrome' ).build() 无限期挂起

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:54 25 4
gpt4 key购买 nike

我正在使用 mocha 和 selenium 进行端到端集成测试。我使用 beforeEach 和 afterEach 钩子(Hook)来初始化浏览器并在每次测试后终止它。这是我的 js 文件,其中包含这两种方法

require('chromedriver')

// globals
global.assert = require('assert')
global.driver = null
const { Builder, By, until, promise } = require('selenium-webdriver')


// setup
beforeEach(async function () {
this.timeout(utils.DEFAULT_TEST_TIMEOUT)
while (driver !== null) {
console.log('waiting for driver to quit from last test')
await utils.sleep(1000)
}
try {
driver = await new Builder().forBrowser('chrome').build()
await driver.manage().window().setSize(1600, 900)
} catch (ex) {
console.log(ex.stack)
}

})

afterEach(async function () {
this.timeout(utils.DEFAULT_TEST_TIMEOUT)
if (driver === null) {
console.log('some problem in before each of the test ' + this.currentTest.title + ' returning...')
return
}
await saveScreenShot(SCREENSHOTS_PATH + this.currentTest.parent.title, this.currentTest.title)
await driver.quit()
driver = null
})

现在,当我在 Jenkins 上运行测试套件时,我经常看到这个(“电子邮件已注册”是一个测试名称)

✓ email domain not allowed (4167ms)
1) "before each" hook for "email already registered"
some problem in before each of the test email already registered returning...


39 passing (9m)
1 pending
1 failing

1) "before each" hook for "email already registered":
Error: Timeout of 60000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

需要注意的是,一旦出现此错误,后续测试就不会运行。我的测试套件有 100 多个测试,在上面的运行中,一旦遇到 beforeEach 错误,它就会退出,并且不会运行下一组测试。

我尝试了各种方法,但似乎没有任何效果。任何调试此问题的指针都会非常有帮助。提前致谢。

最佳答案

beforeEach 永远不会解析并导致测试超时。您必须通过已解决的 Promise 或调用 did() 回调函数来表示 beforeEach 已完成。

您可以执行以下任一操作:

将 beforeEach 的主体包裹起来,返回一个新的 Promise,如下所示:

beforeEach(async function () {
return new Promise(async (resolve,reject) => {
this.timeout(60000)
try {
driver = await new webdriver.Builder().forBrowser('chrome').build()
await driver.manage().window().setSize(1600, 900)
resolve()
} catch (ex) {
reject(ex.stack)
}
})
})

或者您可以将 did() 回调函数添加到 beforeEach 定义中:

beforeEach(async function (done) {
this.timeout(60000)
try {
driver = await new webdriver.Builder().forBrowser('chrome').build()
await driver.manage().window().setSize(1600, 900)
done();
} catch (ex) {
done(ex.stack)
}
})

我没有测试这些,但它们都应该可以工作。

关于node.js - new Builder().forBrowser ('chrome' ).build() 无限期挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43875449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com