簡體   English   中英

Selenium Webdriver c#無需等待頁面加載

[英]Selenium Webdriver c# without waiting for page to load

我有以下場景:

我想導航到一個頁面。 然后在出現時立即單擊按鈕(不等待頁面加載)。 我不想等待初始頁面加載,因為它需要很長時間。 我的程序當前一直停滯,直到頁面加載,然后單擊按鈕。

我基本上想要導航到鏈接,然后沒有等待頁面並繼續我的代碼。

無論如何圍繞這個?

使用最新版本的.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"));
}
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

簡答:不。

答案很長:Selenium默認嘗試模擬真實用戶 - 我知道它有點糟糕,特別是有時你需要在部署后部署后測試部署...

但是:如果真實用戶必須等待按鈕出現,那么程序也必須這樣做......

順便說一句:如果按鈕確實出現在頁面的第一位,你可以試試這個:

  1. 按ID,xpath搜索按鈕......你的方式
  2. 抓住異常(我是Java家伙,所以不要問我怎么樣)
  3. 如果有錯誤,請等待很短的時間(例如200毫秒),然后轉到1
  4. 如果沒有,請單擊按鈕
  5. 如果經過一定時間(10s),循環也應該結束,如果是,則拋出異常

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM