2016-09-23 8 views
0

したがって、ロードするバックグラウンドのためにロードするのにかなり時間がかかるページが1つあります。私は、DOMがロードされreadyStateが '対話型'であるとすぐに、それと対話できるようにしたい。基本的には、私が移動する前にすべてのものを読み込む必要はないので、このページから私を連れ去るリンクをクリックしたいだけです。しかし、ページがロードされるまで、私はドライバでJavascriptを実行できないようです。何が起こるかは、ExecuteJavascript関数が私にもタイムアウトすることです。C#Selenium、ページがまだロードされている間にWebドライバでjavascriptを実行する方法

try 
{ 
    element.Click(); //BrowserCommandTimeout was set to 10 seconds 
} 
catch (Timeout e) 
{ 
    string state = driver.ExecuteJs("return document.readyState").ToString(); //Also times out after 10 seconds 

    while ((state != "complete") && state != "interactive") 
    { 
      Utilities.Sleep(2000); 
    } 
} 

誰もがこの問題を解決する方法を知っていますか?

+0

あなたは、エスケープキーで '.SendKeysを()'やってみましたがありますか?これでページの読み込みが停止され、処理を続行できるはずです。私は他の誰かがそれを過去に試しているのを覚えているようです。私はそれが問題全体を解決するだろうが、あなたが少し早く行きたいところにあなたを得るかもしれないことはわかりません。 – JeffC

答えて

0

あなたはこのようにjavascriptを使いたくありません。 「待機」機能としてのセレン。暗黙的および明示的な待機があります(明示的な待機は一般的にはより良い...それらを混ぜないようにしてください)。明示的な待機を使用する例を次に示します。

public static WebDriverWait WebDriverWait => 
new WebDriverWait(_driver, TimeSpan.FromSeconds(15)); 

var element = WebDriverWait.Until(ExpectedConditions.ElementToBeClickable(By.Id("id"))); 
+0

これは質問に答えません。 – JeffC

+0

...これは、オペアンプが探している機能を提供していませんか? – CSharper

+0

いいえ、OPはページの読み込みに時間がかかるため、ページの読み込みが完了する前に移動しようとしています。 Seleniumは、readyStateが完了するまで待機します。 – JeffC

0

ちょうどこの

var waitForElement = new WebDriverWait(_driver, TimeSpan.FromSeconds(5)); 
waitForElement.Until(driver =>_driver.ExecuteJavaScript<string>("return document.readyState").ToString() == "complete"); 
関連する問題