使用async / await

时间:2018-03-13 15:26:15

标签: asynchronous selenium-webdriver async-await mocha

我正在使用mocha和selenium-webdriver进行E2E测试。大多数测试都是异步的,我使用async / await函数来处理这个问题。不幸的是,我现在无法完成一个。这是我的代码:

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毫秒超时。对于异步测试和挂钩,请确保   "()完成"叫做;如果返回Promise,请确保它已解决。

     

{NoSuchSessionError:没有这样的会话(驱动程序信息:   chromedriver = 2.36.540469   (1881fd7f8641508feb5166b7cae561d87723cfa8),platform = Mac OS X 10.13.3   x86_64的)       at Object.checkLegacyResponse(/Users/me./myproject/node_modules/selenium-webdriver/lib/error.js:585:15)       at 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)       在       at process._tickCallback(internal / process / next_tick.js:188:7)name:' NoSuchSessionError',remoteStacktrace:'' }

如果我删除after()功能,我仍然会

  

错误:超出2000毫秒超时。对于异步测试和挂钩,请确保   "()完成"叫做;如果返回Promise,请确保它已解决。

但是,我的console.log显示我的元素已被找到。

如果我然后尝试使after()异步,就像这样:

  after(async function () {
    await driver.quit()
  })

我得到与第一个相同的错误。

同样重要的是要注意,我在执行async / await时已经读过我不必使用done()。那么世界上究竟是什么呢?即使我这样做了,我仍然会遇到同样的错误。

我该如何解决这个问题?似乎一切都井然有序,但我似乎无法适当地让测试运行而不会相互碰撞。

1 个答案:

答案 0 :(得分:0)

代替使用:

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

尝试:

await driver.wait(until.elementLocated(By.className('element'))).isDisplayed()