如何在Selenium

时间:2017-03-18 23:16:19

标签: javascript selenium

这是一个奇怪的应用程序,我在使用Selenium WebDriver自动化此应用程序时遇到了很多挑战。

问题

问题是,即使页面加载完成后,页面的document.readyState状态也始终显示为Interactive,并且在执行给定操作后Selenium不会将控件发送到下一行并保持在等待页面document.readyState要改变以完成从未发生过。

有什么方法可以强迫Selenium不要等待页面document.readyState改为完成?我知道这是Selenium的默认行为,但有什么可以做的吗?

解决方法,但面临其他挑战: -

对于像点击这样的常见操作...我知道我们可以使用Javascript点击代替Selenium点击,JS点击不等待页面状态。我正在使用JS点击工作非常好但现在有一个场景,点击链接我需要切换到新窗口。我不认为JS中有任何功能允许我们切换到新窗口,现在我被迫使用Selenium切换到新窗口功能,由于上述问题而卡住了。无论如何我在哪里可以更改页面document.readyState以强制完成?

忘记提及此问题仅在IE中,它在Chrome中运行良好。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

This issue可能相关。它涉及readyState如果有信息栏(在IE中),则不会转换为complete

  

现在解决问题的正确方法是将pageLoadStrategy功能设置为“eager”的值。至少在.NET绑定中,可以通过将InternetExplorerOptions.PageLoadStrategy的值设置为InternetExplorerPageLoadStrategy.Eager来完成此操作。其他语言绑定应参考其文档,了解如何为IE驱动程序设置所需的功能。此外,请注意这可能会导致在导航后等待页面加载时产生副作用,因此请务必确保您正在等待结果页面上的元素。

即使您的问题不是由信息栏引起的,将页面加载策略更改为“急切”仍可能对您有用。在Java中,它应该像这样工作:

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(CapabilityType.PAGE_LOAD_STRATEGY, "eager");
WebDriver driver = new InternetExplorerDriver(capabilities);