2012-08-12 136 views
3

我有以下情形:Selenium Webdriver c#無需等待頁面加載

我想導航到頁面。然後點擊一個按鈕,一出現(不等待頁面加載)。我不想等待最初的頁面加載,因爲它需要很長時間。我的程序目前被卡住,直到頁面加載,然後單擊按鈕。

我基本上想導航到鏈接,然後不必等待頁面並繼續我的代碼。

無論如何圍繞此?

回答

0

簡短的回答:第

龍回答:硒是默認試圖模擬真實用戶 - 我知道這有點很爛,特別是在你需要測試一個部署部署後部署後次...

但如果真正的用戶必須等待按鈕出現,則該程序必須做到這一點也...

順便說一句:如果真的按鈕最早出現在頁面上,你可以試試這個:

  1. 搜索通過ID,XPath的...順便按鈕你做
  2. 捕獲異常(我的Java的傢伙,所以不要問我怎麼了)
  3. 如果有錯誤,等待時間短(例如200毫秒),然後轉到1
  4. 如果不是,點擊按鈕
  5. 的週期是否一定的時間量經過(10S也應該結束),並且如果是這樣,拋出異常

如上所述:我選擇的語言是Java。我可以做到這一點。但我不知道如何寫在C#

2
IWebDriver driver = new FirefoxDriver(); 
driver.Url = "http://somedomain/url_that_delays_loading"; 
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("someDynamicElement")); 
}); 

它確實是你想要的。它查詢頁面以查找元素,如果找不到元素則捕獲異常,並在找到時返回元素。

之後,你可以操縱按鈕忽略一個事實,即頁面可以不加載

http://seleniumhq.org/docs/04_webdriver_advanced.html

3

隨着.NET綁定的最新版本,您可以設置頁面加載超時。但是,您需要注意一些注意事項。首先,這並未被所有瀏覽器實現。它應該適用於IE和Firefox,如果內存服務。其次,你需要捕捉一個異常來使其正常工作,但是可以完成。

// WARNING! Completely untested code written without 
// the benefit of an IDE! 
IWebDriver driver = new InternetExplorerDriver(); 
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(1)); 

try 
{ 
    driver.Url = "http://your.long.loading.page.com"; 
} 
catch (TimeoutException) 
{ 
    // NOTE: In 2.26 or later, this will be WebDriverTimeoutException 
} 

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
IWebElement element = wait.Until<IWebElement>((d) => 
{ 
    return d.FindElement(By.Id("yourId")); 
} 
相關問題