Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Selenium中与就绪状态为Interactive的页面交互_Javascript_Selenium - Fatal编程技术网

Javascript 如何在Selenium中与就绪状态为Interactive的页面交互

Javascript 如何在Selenium中与就绪状态为Interactive的页面交互,javascript,selenium,Javascript,Selenium,这是一个奇怪的应用程序,在使用SeleniumWebDriver自动化这个应用程序时,我面临着很多挑战 问题 问题是即使在页面加载完成之后,页面的document.readyState状态始终将该值显示为交互式,因此,Selenium在执行给定操作后不会将控件发送到下一行,并一直等待页面document.readyState更改为完成,而这从未发生过 是否有任何方法可以强制Selenium不要等待页面document.readyState更改完成?我知道这是Selenium的默认行为,但是有什么

这是一个奇怪的应用程序,在使用SeleniumWebDriver自动化这个应用程序时,我面临着很多挑战

问题

问题是即使在页面加载完成之后,页面的document.readyState状态始终将该值显示为交互式,因此,Selenium在执行给定操作后不会将控件发送到下一行,并一直等待页面document.readyState更改为完成,而这从未发生过

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

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

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

忘了提到这个问题只在IE中出现,它在Chrome中运行得很好。

谢谢你的帮助。谢谢。

可能相关。如果IE中有一个信息栏,则它涉及到
readyState
不转换为
complete

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

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

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

您能够编辑您正在测试的应用程序的代码吗?不,您没有访问代码的权限。这是一个客户端应用程序,但它并不适用于我的案例,我告诉大家:我在javascript错误和selenium测试方面遇到了一些问题。当我修复它们时,selenium测试运行。在页面加载时执行大量js时,我也遇到了您描述的问题。在加载所有内容并使selenium等待该元素开始运行多个测试之后,我最终在页面中添加了一些隐藏的html元素。我不认为您可以发布到页面的链接吗?您可以尝试使用
sendKeys()
并向页面发送
Esc
键。这将阻止页面加载,但可能会使页面处于错误状态,具体取决于加载的内容。@JeffC页面已加载,只是页面document.readyState属性仍显示为交互式(由于某些内部JS错误而猜测)。我试图发送ESC键,但该值仍然是页面document.readyState属性的交互式值;在Java中,但在Java中似乎没有任何相同的方法。很抱歉响应太晚,但我无法测试上述代码,因为我们无法访问给定的应用程序。我对你的答案投了赞成票,因为它看起来很有希望。谢谢你的帮助。