内部超时" beforeEach"没有受到考试

时间:2017-01-24 10:12:20

标签: javascript selenium selenium-webdriver automated-tests mocha

我知道,为了测试API端点,应该模拟xhtml请求,但是现在我想用真实的API测试它。

我想做什么:

打开一个页面,点击连接按钮,然后等待某个元素innertext更改为"已连接"。

,最多等待10秒钟。

这是我的简单测试代码:

    const assert = require('assert');
    const webdriver = require('selenium-webdriver');
    const By = webdriver.By;
    const until = webdriver.until;
    const chrome = require('selenium-webdriver/chrome');
    const test = require('selenium-webdriver/testing');
    const mochaTimeOut = 25000;


    test.beforeEach(function() {
      this.timeout(mochaTimeOut);
      driver = new webdriver.Builder()
        .forBrowser('chrome')
        .setChromeOptions(options)
        .build();
      driver.get('http://127.0.0.1/dist/popup.html');
    });

    test.afterEach(function() {
      driver.quit();
    });

    test.describe('Connect functionality', function() {
      test.it('Try to connect', function(done) {
        // this.timeout(22222); // only works if I uncomment this line
        driver.findElement(By.id('connect')).click().then(function (el) {
            driver.findElement(By.id('state')).then(function (stateEl) {
              driver.wait(until.elementTextContains(stateEl, 'Connected'), 10000);
            })
          }).then(done);
      });
    });

如果按原样运行此测试,我会收到此错误:

  

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

但如果我取消注释这一行,它就可以了:

// this.timeout(22222);

我不是非常喜欢使用超时,但我没有看到其他方式。

1 个答案:

答案 0 :(得分:1)

timeout的呼叫是分层的。问题是你的beforeEach没有孩子。您需要全局设置超时,或者可以在test.describe调用中复制它:

test.describe('Connect functionality', function() {
  this.timeout(mochaTimeout);

这样它将适用于test.describe块内的所有测试。