[英]Does Selenium WebElement.Click() wait until the next page is loaded?
我告訴 Selenium 等到它看到一個元素 - Selenium 看到它 我告訴 Selenium 點擊這個元素,它是一個鏈接到新頁面的按鈕 - Selenium 點擊它。
問題是,在點擊它之后,Selenium 會等到下一頁完全加載(頁面有時會在一秒鍾內加載,或者等待很長時間,我認為該頁面上的 Zen Desk Live Chat 有問題)。
當它完全加載時,它會拋出一個錯誤並說它點擊的元素無法看到(自然它不能因為它現在在一個新頁面上)
我試過改變等待時間
driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
然而這無濟於事。 我也試過
wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath(element)));
然而,這有同樣的問題。
下面是我目前使用的代碼。
try {
wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath(element)));
WebElement we = driver.findElement(By.xpath(element));
we.click();
System.out.println("Clicked: " + element);
}catch (Exception e){
System.out.println(e.getMessage());
}
我希望一旦元素被點擊,Selenium 就會繼續運行而不關心下一頁是否已經加載。
然而,當第二個頁面加載時,有時頁面會卡住“等待 widget-mediator.zopim.com”並且 Selenium 不會超過 click() 行,直到 WebDriverWait 時間到期(60 秒)之后60 秒已過期我在控制台輸出中看到此錯誤:
[1561374309.111][SEVERE]: Timed out receiving message from renderer: 60.000
[1561374309.112][SEVERE]: Timed out receiving message from renderer: -0.002
這里發生了其他事情嗎? 或者 Click() 是否等到頁面加載完畢,如果點擊將其帶到新頁面? 如果確實如此,有沒有辦法告訴它停止等待? 我還有其他代碼可以檢查頁面是否已加載,但我不需要 Click() 來執行此操作。
提前致謝。
Selenium(或更准確地說,WebDriver 的)點擊行為受W3C WebDriver 規范管理。 在該文檔中,完整的算法是針對請求元素單擊時發生的情況定義的。 一般來說,如果點擊將導航到一個新頁面,驅動程序將根據頁面加載策略等待該新頁面被“加載”(有意恐嚇),直到頁面加載超時。
頁面加載策略默認為“正常”,或者等待文檔的readyState
完成。 如果在驅動程序實例化期間請求的功能中將其設置為“none”,則驅動程序根本不會等待。 選擇該路由意味着您需要處理正在加載的頁面的所有同步。 請注意,還有第三種頁面加載策略“eager”,但在撰寫本文時,並非所有 WebDriver 實現(尤其是 chromedriver)都支持它。
您可以在 Selenium 代碼中在運行時調整頁面加載超時。 一種方法可能是在單擊此特定元素的持續時間內將超時降低到相對較低的值,然后將其恢復到先前的值。 這里的缺點是您必須在繼續之前捕獲頁面加載超時時拋出的超時異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.