我知道,为了测试API端点,应该模拟xhtml请求,但是现在我想用真实的API测试它。
我想做什么:
打开一个页面,点击连接按钮,然后等待某个元素innertext
更改为"已连接"。
这是我的简单测试代码:
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);
我不是非常喜欢使用超时,但我没有看到其他方式。
答案 0 :(得分:1)
对timeout
的呼叫是分层的。问题是你的beforeEach
没有孩子。您需要全局设置超时,或者可以在test.describe
调用中复制它:
test.describe('Connect functionality', function() {
this.timeout(mochaTimeout);
这样它将适用于test.describe
块内的所有测试。