我建立了一个selenium-mocha测试用例来打开谷歌,输入一些文本并点击搜索。 这是我的selenium-mocha测试用例代码段
但我需要在输入搜索文本
后60秒内执行点击搜索 var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');
var urladd ='http://www.google.com/';
function clickLink(link){
link.click();
return link;
}
var testSimple=function(searchContent){
var browser = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
test.describe('\n\nGoogle Search\n', function() {
this.timeout(60000);
test.it('Enter element to be searched', function(done) {
browser.get(urladd);
browser.findElement(webdriver.By.name('q')).sendKeys(searchContent);
browser.getTitle().then(function(title) {
assert.equal(title,'Google');
})
});
test.it('Click search button', function(done) {
setTimeout(function(){
browser.findElement(webdriver.By.name('btnG')).then(clickLink).then(function(){
browser.getTitle().then(function(title) {
assert.equal(title,'selenium mocha test cases - Google Search');
});
});
},30000);
});
});
}
testSimple('selenium mocha test cases');
我使用setTimeout暂停60秒但是,mocha只是通过测试用例而不执行超时内的代码
是否有人可以为此或任何其他可用于暂停mocha测试的API建议更好的解决方案
Google Search
√ Enter element to be searched (7771ms)
√ Click search button
2 passing (8s)
答案 0 :(得分:1)
在谈到此事之前,有几点注意事项:
您传递给done
的函数不需要test.it
。您正在使用selenium-webdriver
包装的Mocha函数,这使得所有测试都是异步的。所以done
没用。
您的第二次测试取决于第一次测试。这是糟糕的设计。测试应该是独立的。关于如何使测试独立的问题已经有了问题,所以我不打算在这里再次解决这个问题。
这里的等待问题是你如何解决它。您可以将第二个测试修改为:
test.it('Click search button', function() {
var flow = webdriver.promise.controlFlow();
flow.execute(
function () { return webdriver.promise.delayed(30 * 1000); });
browser.findElement(webdriver.By.name('btnG')).then(clickLink);
browser.wait(function () {
return browser.getTitle().then(function (title) {
return title === 'selenium mocha test cases - Google Search';
});
});
});
这样做是创建一个执行承诺的control flow。 webdriver.promise.delayed
只创建一个promise,它将以传递给函数的毫秒数来解析。然后你可以在browser
上调用方法。最终效果是暂停浏览器上的操作30秒。
您的代码的另一个问题是,等待标题无法更改。当点击发生时,标题需要更改,因此Selenium代码必须等待,因此最后调用browser.wait
。如果标题永远不会更改,则测试将因超时而失败。