我正在进行从一个页面导航到另一个页面的Selenium(Ruby API)测试。最近,当我在指向第二页的第一页上添加link rel="prerender"
资源提示时,它开始在IE11 / Win10(通过SauceLabs)上失败,以加快导航速度。失败就是这个(see full backtrace)并且在导航发生后一直发生在第一个Selenium命令上。
Unable to find element on closed window (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 4 milliseconds
Build info: version: '2.53.1', revision: 'a36b8b1', time: '2016-06-30 17:37:03'
System info: host: 'WIN-SB3ER6JQ6ME', ip: '172.20.114.237', os.name: 'Windows 10', os.arch: 'x86', os.version: '10.0', java.version: '1.8.0_91'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=false, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, version=11, platform=WINDOWS, nativeEvents=false, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=about:blank, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
Session ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXX79d496ee
*** Element info: {Using=class name, value=dialog-title} (org.openqa.selenium.NoSuchWindowException) (Selenium::WebDriver::Error::NoSuchWindowError)
对于它的价值,预渲染在手动测试IE11时工作正常,而Selenium + Chrome(也尊重prerender指令)对此没有任何问题。
我的怀疑是IE通过在隐藏的窗口/上下文中加载页面来实现预渲染,然后在导航时销毁当前窗口并交换新窗口 - 导致Selenium的句柄在窗口上变得无效。我已经尝试通过强制Selenium重新连接到窗口来解决这个问题:
# Wait a few seconds, then
@driver.switch_to.window(@driver.window_handles.last)
但是我发现导航后@driver.window_handles
为空,即使SauceLabs截屏显示导航正常工作。
在使用预渲染资源提示导航后,有没有办法将Selenium重新连接到IE11?