最近,我一直在尝试将设计用于 Linux 上的 Firefox 的 Selenium 1 测试用例适应 Windows Vista 上的 Internet Explorer。为了测试它,我在 Windows Vista 机器上安装了非网格版本的 Selenium,发现“*iexplore”和“*iehta”启动器无法工作。"*iehta" 和 "*iexplore" 在运行它们的 .start() 命令时似乎都进入了无限循环,而 .start() 函数永远不会返回。两者还打开一个 Internet Explorer 窗口,通向 localhost 计算机上 C:/Users/($the current user's account)/AppData/Local/Temp 中的一个位置,该位置似乎是与某种 IE 配置文件相对应的空白页面.
“*iexploreproxy”在独立的 selenium 服务器上工作得很好,远程控制都在同一台机器上运行。但是,当尝试连接到 Selenium Grid 上的持续集成 Linux 集线器时,“*iexploreproxy”不再起作用。在 Selenium Grid 上运行时,“*iexplore”会打开(然后立即关闭)一个 IE 窗口,大概是 Selenium 遥控器。"*iehta" 打开 Selenium 远程控制,但从不将会话 ID 返回到集线器,从而允许集线器开始传输 Selenese 命令,从而导致在独立 Selenium 服务器上遇到的相同行为。
但是,如果“*iehta”被手动停止(例如在与集线器相同的机器上打开一个 python 终端,从集线器请求一个运行“*iehta”的 Selenium 实例,称为“sel”,运行 sel.start(),然后在生成的无限循环期间按 control-C,如果网格的另一个遥控器有“* iexploreproxy”可用,则集线器可以在“* iexploreproxy”上运行可用于测试目的的 Selenium 实例。一些奇怪的差异我'我们注意到,在“*iexploreproxy”上,多个连续的 Selenium 实例似乎在它们之间共享 cookie 和基本 HTTP 身份验证登录数据(在 Firefox 上,我需要在每次运行 Selenium 时重新输入这些密码),并尝试访问外部域一个“*iehta”最初被分配失败(IE,如果我要求“*iehta”在http://development.place.com,尝试在http://stagingarea.place.com中启动另一个浏览器会导致 Selenium 失败。)同样,运行 selenium.stop() 时 Internet Explorer 窗口不会关闭,而在这种情况下,所有 Firefox 窗口都会关闭。据我所知,*iehta 正在创建 *iexploreproxy 然后使用的 Internet Explorer 配置文件。
是否有人比我更熟悉 IE 上的 Selenium,或者了解 *iehta 的内部工作原理,知道如何合并 *iehta 调用和 *iexploreproxy 调用,这样就不必使用这种脆弱的解决方法?我不完全理解这一事实意味着我的所有测试都必须手动运行,我宁愿避免这样做,这样我就可以重新开始研究新功能。