使用带有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: watirrspecbundlerpage-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.rbexception描述如下:

# 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