2017-10-29 7 views
0

カスタム待機条件を定義する際に、セレンのJavaScriptバインディングに問題があります。私はボタンが最初に無効になっているが、最終的に有効になるボタンの機能をテストするテストケースを作成しています。状態間の待機時間は非常に長く(4分)、ページ読み込み時にチュートリアルアニメーションが再生され、ボタンが終了するとボタンが有効になります。selenium-webdriver(JavaScriptバインディング)のカスタム待機状態が機能していません

ボタンのuntil.elementIsEnabled条件を使用しようとしましたが、動作しません。だから、私はカスタム条件を働かせようとしています。

API documentation on until conditionsによると、カスタムイベントがようにコード化することができます。

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

その例から、私がtrueに反転する状態で待つようにこのコードを持っている:

const locator = { id: "Button" }; 
await driver.wait(until.elementLocated(locator)); 
const button = await driver.findElement(locator); 

await driver.wait(async function() { 
    const attr = await button.getAttribute("enabled"); 
    log.info(model.browser.type + " - " + "Polling attribute value: " + attr); 
    return await attr === true; 
}, 400000); 

私がそこに持っているロギング(js-logging npmパッケージです)から、セレンのwebdriverが毎ミリ秒ごとにそのコードをループしていることがわかりました。そして状態は約4分間違っています。しかし、ループは、変数のステータス変更の約2分後にタイムアウト値400000msに達するまで継続します。

私はここで何が欠けていますか?

答えて

0

fluentWaitを試しましたか?

Wait wait = new FluentWait(driver) 
    .withTimeout(30, SECONDS) 
    .pollingEvery(5, SECONDS) 
    .ignoring(NoSuchElementException.class); 

WebElement foo = wait.until(new Function() { 

    public WebElement apply(WebDriver driver) { 
     return driver.findElement(By.id("foo")); 
    } 

}); 
+0

Javaバインディングでは流暢ではありませんか?私はJavaScriptバインディングを使用しています。私が間違っていない限り、私はjavascript APIのドキュメントの例がfluentWaitの動作をしていると考えています。 私はまだ私の待機コードが機能していないのか分からない。 – Charles