1

以下代码永远不会命中控制台日志点“post4”或“post3”。它确实返回了承诺,但是如果我尝试从该承诺中链接,则永远不会遵循该链。

loginPage.prototype.doLogin = function(isGood){
    var d = webdriver.promise.defer();
    this.driver.findElement(webdriver.By.css('input.loginbutton')).click(function() {
        if(isGood){
            //return new statementPage;
            console.log("post3")
            d.fulfill(new statement.statementPage(this.driver));
        } else {
            console.log("post4")
            d.fulfill(this);
        }
    });
    console.log("post5")
    return d.promise;
}

如果我调用login.doLogin(true).then(function(){console.log("foo")})它,它将永远不会记录 post3、post4 或 foo。

我在我的代码中的其他地方有其他成功的承诺,所以我不明白为什么这不起作用。

4

2 回答 2

2

webdriverjs的click函数不接受任何参数/回调,因此您的函数从未运行过。click代码如下(来自API

webdriver.WebElement.prototype.click = function() {
  return this.schedule_(
      new webdriver.Command(webdriver.CommandName.CLICK_ELEMENT),
      'WebElement.click()');
};

这是一个小提琴,显示一个不接受参数的 js 函数实际上并不使用参数,除非用arguments变量指定。

使用 thenelement.click().then(function(){d.fulfill()});可以实现点击承诺,然后运行您的代码。从Webdriverjs 页面阅读承诺

于 2014-03-28T22:55:51.337 回答
1

而不是使用回调,例如

element.click(function(){d.fulfill(););

您应该使用点击中的承诺,因此:

element.click().then(function(){d.fulfill()});
于 2013-10-21T12:41:18.613 回答