21

私はselenium-webdriverjsを使用しています。次のように明示的な待機を作成した特定の要素が表示されるのを待ちたいのですが、うまく機能します。

var displayed = false;
driver.wait(function(){
    driver.findElement(locator).isDisplayed().then(function(value){
        displayed = value;
    });
    return displayed;
}, timeout);

これは私ができる最善の方法ですか、それともこれを行うためのより良い方法はありますか? 私が尋ねる理由は、待機コールバックが初めて呼び出されたとき (私の場合) は常に false を返すためです。その後 isDisplayed promise が実行されたときにのみ、表示される値が変更されます。

4

2 に答える 2

28

あなたのコードは同期リターンと非同期コールバックを混在させています。次のコードは正しいことをするはずです:

return driver.wait(function() {
    return driver.findElement(locator).isDisplayed();
}, timeout);

内部関数は、待機するプロミスを返し、driver.waitその値 (true/false) を待機条件として受け取ります。

于 2013-06-02T12:50:23.440 に答える