【发布时间】:2017-03-05 21:51:39
【问题描述】:
我正在致力于自动化一个站点,该站点具有许多通过 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 知道需要一个新页面并等待它可用?
【问题讨论】: