我建立了一个selenium-mocha测试用例来打开谷歌,输入一些文本并点击搜索. 这是我的selenium-mocha测试用例代码片段 但是我需要在输入搜索文本60秒后才执行点击搜索 var assert = require('assert
这是我的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)在得到问题之前,有几点注意事项:
>您不需要为传递给test.it的函数完成.您正在使用selenium-webdriver包装的Mocha函数,这使得所有测试都是异步的.这样做是没用的.
>您的第二次测试取决于第一项测试.这是糟糕的设计.测试应该是独立的.关于如何使测试独立的SO已经存在问题,所以我不打算在这里再次解决这个问题.
这里的等待问题是你如何解决它.您可以将第二个测试修改为:
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,它将以传递给函数的毫秒数来解析.然后你可以在浏览器上调用方法.最终效果是暂停浏览器上的操作30秒.
您的代码的另一个问题是它没有等待标题更改.当点击发生时,标题需要更改,因此Selenium代码必须等待,因此最后会调用browser.wait.如果标题永远不会更改,则测试将因超时而失败.