使用带有Page-Object的IE 11 x64时出现“Watir :: Exception :: NoMatchingWindowFoundException:浏览器窗口已关闭”错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用带有Page-Object的IE 11 x64时出现“Watir :: Exception :: NoMatchingWindowFoundException:浏览器窗口已关闭”错误相关的知识,希望对你有一定的参考价值。
我正在使用Page-Object + Rspec在Ruby Mine 2.7.1中运行测试。
环境:Windows 7 x64,Ruby 1.9.3 p551,IE 11。
宝石:watir
,rspec
,bundler
,page-object
当我在Chrome或Firefox中运行测试时,一切正常。
但是当我尝试在IE中运行它们时,具有正确页面的IE窗口被打开,之后我在主题中指定了错误:"Watir::Exception::NoMatchingWindowFoundException: browser window was closed"
关键是浏览器实际上是在那一刻打开并显示正确的页面。 (参见截屏显示会发生什么:http://screencast.com/t/06prRy3OMLM)
测试结束时出现错误,并且config.after do
部分未执行,因为浏览器窗口仍然打开。
执行以下代码时会发生该错误:
before(:each) do
visit <ClassName>
end
好像IEDriverServer在页面打开后立即失去与IE的连接。
最令人困惑的是,在非常罕见的情况下,一切都运行良好,在更罕见的情况下,一切都在使用最终的超时错误显着减速。
sleep <n>
延迟没有帮助。
我尝试了不同版本的selenium-webdriver
gem(它是watir
gem需要的),不同版本的IEDriverServer
用于x86和x64平台 - 结果是相同的。
lib/watir-classic/exceptions.rb
中的例外描述如下:
# This exception is raised if the window cannot be found
class NoMatchingWindowFoundException < WatirException; end
如何设置IEDriverServer不要丢失IE浏览器?
UPD:我找到了解决方案。它包括两个步骤。
步骤1。
首先,这里明确地描述了上述问题的答案,“必需的配置”部分,第5段“仅适用于IE11,......”:( qazxsw poi)
`仅对于IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序可以维护与其创建的Internet Explorer实例的连接。
对于32位Windows安装,您必须在注册表编辑器中检查的密钥是HKEY_LOCAL_MACHINE SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BFCACHE。
对于64位Windows安装,密钥是HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Microsoft Internet Explorer Main FeatureControl FEATURE_BFCACHE。
请注意,FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在,则应创建该子项。要点:在此项中,创建名为iexplore.exe的DWORD值,其值为0.`
如果此值包含除0之外的某些内容,则IEDriverServer将失去与IE浏览器的连接,如我的情况所述。
那么,RTFM! (c)见下一评论中的第2步。
如果您需要'watir'并指定IE,则实现默认为watir-classic行为。
尝试:
https://code.google.com/p/selenium/wiki/InternetExplorerDriver
以上是关于使用带有Page-Object的IE 11 x64时出现“Watir :: Exception :: NoMatchingWindowFoundException:浏览器窗口已关闭”错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 IE11 的 Selenium 3.0.1 在 Windows 10 上找不到元素(在带有 IE11 的 Windows 7 上运行良好)