如何 运行 在 mocha 中进行 selenium 测试?

how to run a selenium test in mocha?

我有这样的摩卡测试:

selenium = require 'selenium-webdriver'

driver = new selenium.Builder().forBrowser('firefox').build()

after (done)->
  driver.quit().then done

describe 'simple test', ->
  before (done) ->
    driver.get('http://127.0.0.1:8016').then done

  it 'should pass this simple test', (done) ->
    done()

但是当我 运行 它时,我遇到了错误:

>mocha --compilers coffee:coffee-script/register

  simple test
    1) "before all" hook

  2) "after all" hook

  0 passing (4s)
  2 failing

  1) simple test "before all" hook:
     Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
    at [object Object].<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:170:19)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)


  2)  "after all" hook:
     Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
    at [object Object].<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:170:19)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

版本:

如何编写一个简单的测试才能通过?

UPD:我已经通过了,但是每次测试都要制作一个新的驱动程序:

selenium = require 'selenium-webdriver'

describe 'simple test', ->
  @timeout 10000
  beforeEach ->
    @driver = new selenium.Builder().forBrowser('firefox').build()
  afterEach (done)->
    @driver.quit().then -> done()

  it 'should pass this simple test', (done) ->
    @driver.get('http://127.0.0.1:8016').then ->
      console.log('done')
      done()

有效代码的超时时间为 10 秒。您的原始代码使用 2s 默认超时。您应该在原始代码中增加超时。

您应该能够通过返回承诺而不是使用 done 来简化您的代码。

after ()->
  driver.quit();

为了那些不使用 CoffeeScript 的人的利益,以上内容转换为:

after(function() {
  return driver.quit();
});

因为 driver.quit() returns 一个承诺,Mocha 将使用这个承诺来计算 after 钩子何时完成。

尝试像这样使用 /testing 区域:

var test = require('selenium-webdriver/testing');

然后...

test.describe(...)
    it(...)

Mocha 似乎需要这个包装器。