使用异步/等待方式进行异步Mocha测试时遇到麻烦

问题描述 投票:2回答:1

我正在使用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()。那么到底是什么呢?即使我这样做,我仍然会收到相同的错误。

我该如何解决?似乎一切都井井有条,但我似乎无法在不相互碰触的情况下适当地进行测试。

asynchronous selenium-webdriver async-await mocha
1个回答
0
投票

而不是使用:

await driver.wait(until.elementIsVisible(driver.findElement(By.className('element'))), 1000)

尝试:

await driver.wait(until.elementLocated(By.className('element'))).isDisplayed()
© www.soinside.com 2019 - 2024. All rights reserved.