2016-09-23 23 views
0

因此,我有一個頁面,由於加載了一些背景資料而需要很長時間才能加載。我希望能夠在DOM加載後立即與之交互,並且readyState是「交互式」的。基本上我只是想點擊一個鏈接,讓我離開這個頁面,因爲在我繼續前我不需要加載整個東西。但是,似乎我不能在驅動程序上運行Javascript,直到頁面加載完畢;發生什麼事是ExecuteJavascript函數也會超時。C#硒,如何在頁面仍在加載時在網頁驅動程序上執行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()'用ESC鍵?這應該阻止加載頁面,然後你應該能夠繼續。我似乎記得過去看到其他人嘗試過。我不知道這會解決整個問題,但可能會讓你想要更快一點。 – JeffC

回答

0

你不想使用這樣的javascript。 Selenium作爲「等待」功能。有隱含的和明確的等待(顯式等待通常更好......確保你不混合這兩個!)。這是一個使用顯式等待的例子。

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"); 
相關問題