当前位置: 首页 > 面试题库 >

通过JS事件加载新页面时,如何使Selenium WebDriver等待页面加载

隆睿
2023-03-14
问题内容

我正在自动化一个包含许多链接的站点,这些链接通过JS事件加载新页面。基本上,有一些元素是可单击的,单击其中一个会导致运行一些JavaScript,这会导致提交表单并将其路由到新页面。

现在,如果这些只是标准的HTML链接,那将没有问题,因为Selenium足够聪明,可以告诉我们即将出现一个新页面并等待处理。但是,尽管如此,Selenium并不能说这种情况下的点击导致了新页面的加载,因此它不会等待并且只会继续前进。因此,它不等待新页面,而是尝试查找不存在的元素,并且我的测试全部失败。笨蛋

作为一个临时解决方案,我只是将程序暂停三秒钟,如下所示:

oldPageDriver.clickThatButton();

try {
  Thread.sleep(3000);
} catch(InterruptedException ex) {
  Thread.currentThread().interrupt();
}

newPageDriver = new NewPageDriver(driver);
newPageDriver.doStuffOnNewPage();

这是可行的。我不喜欢它,因为它是“
hacky”的,只是中断程序而不是做一些更聪明的事情。因为延迟是在三秒上硬编码的,所以如果链接正常工作,我会失败,但是速度很慢。我考虑过类似隐式等待之类的事情,但它完成了同样的事情,经过大量的查找,我在Java的任何地方都没有找到一个可靠,可行的答案。

那么,有人可以提出解决方案吗?具体来说,如何使Selenium知道需要新的页面并等待它可用?


问题答案:

您需要明确的等待;

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

您可以将其直接添加到测试中,也可以将其干燥,特别是在有常见的等待期望(例如旋转图标消失)的情况下。

您可以将click方法扩展为单击后始终等待,或者如果跟随页面对象,则在基页类中添加一个wait_until_loaded方法。还有许多其他有效方法,但取决于如何实现AUT



 类似资料:
  • 我正在努力自动化一个网站,该网站有许多链接,这些链接通过JS事件加载新页面。基本上,有些元素是可点击的,单击一个会导致一些JavaScript运行,这会导致提交表单并路由到新页面。 现在,如果这些只是标准的HTML链接,就不会有问题,因为Selenium足够聪明,可以告诉您有一个新页面即将到来,并等待处理。但尽管如此,Selenium无法判断在这个实例中的点击是否会导致新页面加载,因此它不会等待,

  • 我试图创建一个等待加载页面的方法,但我出现了一个错误。可能我没有正确使用这个方法。 错误是:

  • 本文向大家介绍jQuery EasyUI 页面加载等待及页面等待层,包括了jQuery EasyUI 页面加载等待及页面等待层的使用技巧和注意事项,需要的朋友参考一下 下面一个代码片段是 easyUI 页面加载等待,代码如下所示: 下面看个工具类 基于easyui的页面等待提示层,即mask 效果图: 以上所述是小编给大家介绍的jQuery EasyUI 页面加载等待及页面等待层,希望对大家有所帮

  • 问题内容: 我编写了一个脚本,该脚本从页面中获取数据,但是有时页面需要花费一些时间来加载,因此当将html拉到汤对象中时,有时它什么也不会拉,因为页面仍然需要完成。 我编写了以下代码以等待页面完成。 有用 但是调用函数时出现以下错误; 问题答案: 我认为您应该这样使用: 如手册所述。

  • 我正在使用selenium web驱动程序3.4.0查找网站的响应时间。在较早的版本中,我使用了WebDriver wait=new WebDriverWait(driver,10);Wait.Until(ExpectedConditions.VisibilityOfElementLocated(By.id(“myid”)));查找加载的页面。 但这两行代码不适用于版本3.4.0。有没有其他方法可

  • 我开发网络爬虫有一段时间了,对我来说最常见的问题是等待页面完全加载,包括请求,框架,脚本。我是说彻底结束了。 我使用了几种方法来修复它,但当我使用多个线程来抓取网站时,我总是遇到这种问题。驱动程序打开自己,通过URL,不等待并通过下一个URL。 我的尝试是: wait . until(expected conditions . visibilityofelementlocated(by . XPa