我正在研究selenium网络驱动程序示例,但它无效。几个月前它工作得很好,所以我想知道我做错了什么或者测试方法是否已经改变。
var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');
var By = webdriver.By;
test.describe('Google Search', function() {
test.it('should work', function(done) {
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get("http://www.google.com");
driver.findElement(By.name("q")).sendKeys("webdriver");
driver.findElement(By.name("btnG")).click();
driver.getTitle().then(function(title) {
assert.equal("webdriver - Google Search", title);
done();
});
driver.quit();
});
});
输出结果为:
AssertionError: "webdriver - Google Search" == "Google"
Expected :"Google"
Actual :"webdriver - Google Search"
这告诉我该页面尚未更新,但我不确定原因。示例显示在此处:https://code.google.com/p/selenium/wiki/WebDriverJs#Getting_Started
package.json的Selenium版本:2.39.0
我还应该说,测试是通过Mocha进行的。摩卡是罪魁祸首吗?当我上次尝试使用Jasmine时。
答案 0 :(得分:1)
直接从the example in the documentation开始,使用wait
:
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title === 'webdriver - Google Search';
});
}, 1000);
为什么需要等待?因为Google页面异步工作。输入密钥后,服务器发送响应并更新页面可能需要一些时间。
您还应该删除done
。虽然通常你需要它用于异步测试,但是看起来Selenium的webdriver的这个版本的序列器将在quit
上阻塞,直到执行所有操作。文档中的example不使用它。
另外,如果你想知道为什么没有断言:如果你在超时到期时遇到超时异常,你就会知道你的测试失败了。