2017-11-12 22 views
0

私は最近、セレンのjavascript webdriverで開発を開始しました。私が達成しようとしているのは、ウェブサイトにログインして別のページに移動することです。以下は私のコードスニペットです。上記のコードSelenium WebDriver implicitlyWait

var checkPaymentStatus = function() { 
    var driver = new webdriver.Builder().forBrowser('chrome').build(); 
    driver.get('https://url/#/login'); 
    driver.findElement(By.name('username')).sendKeys('user'); 
    driver.findElement(By.name('password')).sendKeys('pass'); 
    driver.findElement(By.name('loginForm')).submit(); 
    driver.manage().timeouts().implicitlyWait(10000); 
    driver.get('https://url/#/report/advanced-options'); 
}; 

ログインまでの期待どおりに動作しますが、問題は、私は常に試みがレポート/上級オプションにをナビゲートする際に認証されていないエラーになってしまったとの暗黙の待ち時間のように思える機能していないのですですまたはdriver.getは、待機の前に実行されます。問題を解決するための提案は非常に高く評価されます。

+0

implicitlyWaitは、()のタイムアウトを設定するために使用されますpage load timeoutではなく、driver.findElement()/ findElements()認証されていないエラーは、ログインが完了するのを待たずに、次のページを開く前にサーバー側が自動トークンをブラウザのCookieに挿入していないことが原因です。 implicitlyWait(10000)コード行を削除し、10秒後にsleepを追加します。スリープで問題が解決された場合は、スリープを明示的に待機に変更することができます – yong

+0

@yong yes sleepで問題が解決されましたが、明示的に待機する方法はわかりません。あなたは私に例を与えてくれますか? – Lakmal

+0

私はあなたがRatim Asanov – yong

答えて

0

は、次を使用することができます。

driver.wait(until.elementLocated(element)); 
driver.wait(until.elementIsVisible(element), timeout); 

どこ要素 - 要素の可視性のための時間を待つ - これはあなたのWeb要素およびタイムアウトです。 documentation 1として

1

暗黙ウェイツ:

暗黙の待ち時間は、任意の要素(または要素)を検索しようとしたときに一定の時間 のためのDOMをポーリングするwebdriverをを伝えませんすぐに が利用可能です。既定の設定は0です。設定されると、WebDriverオブジェクトの有効期間として暗黙の待機時間が に設定されます。あなたのコードで

driver.manage().timeouts().implicitlyWait(10000); 
driver.get('https://url/#/report/advanced-options'); 

あなたが任意の要素を見つけようとせずに、GETを呼び出して簡単です。 explicit waits

明示的な待ち時間を使用すると、コード内でさらに進む前に発生することがある条件 を待つために定義するコードです。極端な場合は です。これはtime.sleep()で、条件を正確な期間( )に設定します。 は、必要な時間だけ待つコードを書くのに役立ついくつかの便利な方法があります。 のWebDriverWaitとExpectedConditionの組み合わせは、 を達成する1つの方法です。

ウェブサイトの例は非常に説明的です。

ので、ログイン後、あなたがあなたを呼ぶ前に、あなたのDOMに「表示される」しなければならない何かのために(expected conditionに)待つことができる:

driver.get('https://url/#/report/advanced-options');