使用带有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。
Gems: watir
, rspec
, bundler
, page-object
当我在Chrome或Firefox中运行测试时,一切正常。
但是当我尝试在IE中运行它们时,带有正确页面的IE窗口会被打开,之后我会在主题中指定错误: "Watir::Exception::NoMatchingWindowFoundException: browser window was closed"
关键是浏览器实际上是在那一刻打开并显示正确的页面。 (参见截屏video,了解会发生什么: http : //screencast.com/t/06prRy3OMLM )
测试结束时出现错误,并且config.after do
部分未执行,因为浏览器窗口仍然打开。
执行以下代码时会发生该错误:
before(:each) do
visit
end
好像IEDriverServer在页面打开后立即失去与IE的连接。
最令人困惑的是,在极少数情况下,一切都运行良好,在更罕见的情况下,一切都在使用最终的超时错误显着减速。
sleep
延迟没有帮助。
我尝试了不同版本的selenium-webdriver
gem(它是watir
gem需要的),不同版本的IEDriverServer
用于x86和x64平台 – 结果是一样的。
lib/watir-classic/exceptions.rb
exception描述如下:
# This exception is raised if the window cannot be found class NoMatchingWindowFoundException < WatirException; end
如何设置IEDriverServer不要丢失IE浏览器?
UPD:我找到了解决方案。 它包括两个步骤。
步骤1。
最重要的是,这里明确描述了对上述问题的回答,“必需配置”部分,第5段“仅适用于IE 11,……”:( https://code.google.com/p/selenium/wiki / InternetExplorerDriver )
`仅对于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行为。
尝试:
require "watir" Watir.driver = :webdriver browser = Watir::Browser.new :ie