我有一个Selenium测试,当在vSphere中托管的节点上作为Jenkins作业的一部分运行并通过RDP管理时,该测试将失败。测试使用IE11运行。
经过一些故障排除后,如果远程桌面已连接并聚焦,则会成功,但如果远程桌面断开连接或甚至最小化,则会失败并出现异常:
OneTimeSetUp: OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:56095/session/817b36df-a1b5-484e-b205-d4a0bac8002a/element/0cfa6678-2104-4bc6-bb71-e6d8eac507fb/value timed out after 60 seconds.
----> System.Net.WebException : The operation has timed out
失败的路线:
textboxElement.SendKeys("foo").Perform();
作为一种解决方法,我通过vSphere Console而不是RDP进行了登录,然后即使在关闭vSphere之后,测试也不再失败。这是一种解决方法,但我必须要小心,永远不要通过RDP登录,并且始终只能通过vSphere控制台进行管理。
所以我的问题是:
SendKeys()
是否与RDP会话不相容,是否与to this winapi bug相关?SendKeys()
的替代方案?当您执行selenium脚本而没有任何UI环境绑定到进程时,Chrome窗口的大小可能与您使用RemoteDesktop登录时执行时不同。
尝试在失败命令之前在selenium脚本中显式设置窗口大小。 1)尝试一些小宽度/高度并在脚本通常成功的地方执行它,看看会发生什么2)设置为一些大值并在Jenkins上执行它,它通常会失败。
找到了罪魁祸首 - 在RequireWindowFocus = true
有一面旗帜InternetExplorerOptions
引起了这个问题。删除后我不再收到错误。这可能与https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/5431有关。