【问题标题】:selenium-webdriver in nodejs sample not returning current titlenodejs示例中的selenium-webdriver不返回当前标题
【发布时间】:2014-02-19 04:26:23
【问题描述】:

我正在研究 selenium web-driver 示例,但它不起作用。几个月前它工作得很好,所以我想知道是我做错了什么还是测试方法发生了变化。

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。

【问题讨论】:

    标签: node.js selenium selenium-webdriver mocha.js


    【解决方案1】:

    直接来自the example in the documentation,使用wait:

    driver.wait(function() {
     return driver.getTitle().then(function(title) {
       return title === 'webdriver - Google Search';
     });
    }, 1000);
    

    为什么需要使用等待?因为谷歌页面是异步工作的。输入密钥后,服务器发送响应并更新页面可能需要一些时间。

    您还应该删除done。虽然通常您需要它进行异步测试,但似乎 Selenium 网络驱动程序的这个化身附带的序列器将阻塞quit,直到执行所有操作。文档中的这个example没有用到。

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

    【讨论】:

    • 我尝试了示例中的所有变体,包括末日金字塔回调。我觉得mocha+chai+webdriver有冲突。我能够让承诺链工作:code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows
    • 我正在编辑我的答案,而你正在写作。无论如何,我在答案中向您展示的代码在我在这里运行时有效。
    • 感谢您的回答。我怀疑这是我的配置问题,可能不容易复制。我会删除这个问题并加上你的另一个答案。再次感谢您抽出宝贵时间。
    • 原来你是完全正确的。 js 方面真的可以用一本食谱。我用了2天,可以用一句话来概括。 Driver.wait() will execute a function every x milliseconds until it returns true.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2014-09-08
    • 1970-01-01
    相关资源
    最近更新 更多