gpt4 book ai didi

java - Selenium WebElement.Click() 是否会等到下一页加载?

转载 作者:行者123 更新时间:2023-11-30 05:35:27 30 4
gpt4 key购买 nike

我告诉 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 Specification 控制。在该文档中,定义了请求元素单击时发生的情况的完整算法。一般来说,如果点击将导航到新页面,驱动程序将根据页面加载策略等待该新页面“加载”(有意使用引号),直到页面加载超时

页面加载策略默认为“正常”,即等待文档的readyState完成。如果在驱动程序实例化期间请求的功能中将其设置为“none”,则驱动程序将根本不会等待。选择该路线意味着您需要处理正在加载的页面的所有同步。请注意,还有第三种页面加载策略“eager”,但在撰写本文时,并非所有 WebDriver 实现(尤其是 chromedriver)都支持它。

您可以在运行时在 Selenium 代码中调整页面加载超时。一种方法可能是将单击此特定元素期间的超时降低到相对较低的值,然后将其恢复到之前的值。这里的缺点是,您必须捕获页面加载超时时引发的超时异常,然后才能继续。

关于java - Selenium WebElement.Click() 是否会等到下一页加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735339/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com