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

then をelement.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 に答える