Selenium WebElement.Click() 是不是等到加载下一页?
Posted
技术标签:
【中文标题】Selenium WebElement.Click() 是不是等到加载下一页?【英文标题】:Does Selenium WebElement.Click() wait until the next page is loaded?Selenium WebElement.Click() 是否等到加载下一页? 【发布时间】:2019-11-06 04:30:37 【问题描述】:我告诉 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 在 WebDriverWait 时间到期之前不会超过 click() 行(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() 来执行此操作。
提前致谢。
【问题讨论】:
【参考方案1】:Selenium(或更准确地说,WebDriver)的点击行为由W3C WebDriver Specification 控制。在该文档中,针对请求元素单击时发生的情况定义了完整的算法。一般来说,如果单击将导航到新页面,驱动程序将等待根据页面加载策略“加载”该新页面(故意使用引号),直到 页面加载超时。
页面加载策略默认为“正常”,或者等待文档的readyState
完成。如果您在驱动程序实例化期间请求的功能中将其设置为“无”,则驱动程序根本不会等待。选择该路由意味着您需要处理正在加载的页面的所有同步。请注意,还有第三种页面加载策略“eager”,但在撰写本文时,并非所有 WebDriver 实现(尤其是 chromedriver)都支持它。
您可以在运行时在 Selenium 代码中调整页面加载超时。一种方法可能是在单击此特定元素的持续时间内将超时值降低到相对较低的值,然后将其恢复到之前的值。这里的缺点是您必须在继续之前捕获页面加载超时时引发的超时异常。
【讨论】:
以上是关于Selenium WebElement.Click() 是不是等到加载下一页?的主要内容,如果未能解决你的问题,请参考以下文章
selenium测试为啥要启动selenium server
Selenium-IDE,Selenium-RC ,Selenium grid以及 Selenium-Core