nodejs中的selenium-webdriver示例未返回当前标题

时间:2014-02-19 04:26:23

标签: node.js selenium selenium-webdriver mocha

我正在研究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时。

1 个答案:

答案 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不使用它。

另外,如果你想知道为什么没有断言:如果你在超时到期时遇到超时异常,你就会知道你的测试失败了。