早上好,
我目前正在学习如何使用javascript(使用mocha)驱动Selenium。我创建了一个非常基本的测试,它在运行时给了我很多麻烦。每当我运行测试时,都会创建一个新的chrome实例并显示浏览器。当浏览器最初出现时,它会放置"数据:,"在“URL”框中,然后转到google.com。然后我收到以下错误:
$ mocha test
Array
#indexOf()
✓ should return -1 when the value is not present!
Google Search
1) should work
1 passing (2s)
1 failing
1) Google Search should work:
Error: timeout of 2000ms exceeded
at null.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:157:19)
at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
这是测试本身:
var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver'),
chrome = require('selenium-webdriver/chrome');
test.describe('Google Search', function() {
test.it('should work', function() {
var chromeOptions = new chrome.Options();
chromeOptions.addArguments(['test-type']);
var driver = new webdriver.Builder().withCapabilities(chromeOptions.toCapabilities()).build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver');
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title === 'webdriver - Google Search';
});
}, 1000);
driver.quit();
});
});
答案 0 :(得分:3)
您收到的错误消息对我来说就像是Mocha超时。在Mocha中设置超时的常规方法是:
it("foo", function () {
this.timeout(value);
...
});
其中value
是您想要的任何值(以毫秒为单位)。值为0将关闭Mocha的超时。默认值为2000毫秒。
答案 1 :(得分:0)
如果它在某个地方特别失败,也许你应该考虑调用driver.Manage().Timeouts()
。
ImplicitlyWait()
实际上并不像Thread.sleep()
那样等待,它只是为隐式等待设置驱动程序最长等待时间。只需在代码开头调用一次(传入20秒参数)就足够了。阅读 ImplicitlyWait 和 WebDriverWait 类。
据我所知(当我不得不使用时),这是因为你没有得到预期/默认时间的响应。