我有以下情形:Selenium Webdriver c#無需等待頁面加載
我想導航到頁面。然後點擊一個按鈕,一出現(不等待頁面加載)。我不想等待最初的頁面加載,因爲它需要很長時間。我的程序目前被卡住,直到頁面加載,然後單擊按鈕。
我基本上想導航到鏈接,然後不必等待頁面並繼續我的代碼。
無論如何圍繞此?
我有以下情形:Selenium Webdriver c#無需等待頁面加載
我想導航到頁面。然後點擊一個按鈕,一出現(不等待頁面加載)。我不想等待最初的頁面加載,因爲它需要很長時間。我的程序目前被卡住,直到頁面加載,然後單擊按鈕。
我基本上想導航到鏈接,然後不必等待頁面並繼續我的代碼。
無論如何圍繞此?
簡短的回答:第
龍回答:硒是默認試圖模擬真實用戶 - 我知道這有點很爛,特別是在你需要測試一個部署部署後部署後次...
但如果真正的用戶必須等待按鈕出現,則該程序必須做到這一點也...
順便說一句:如果真的按鈕最早出現在頁面上,你可以試試這個:
如上所述:我選擇的語言是Java。我可以做到這一點。但我不知道如何寫在C#
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"));
});
它確實是你想要的。它查詢頁面以查找元素,如果找不到元素則捕獲異常,並在找到時返回元素。
之後,你可以操縱按鈕忽略一個事實,即頁面可以不加載
隨着.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"));
}