【问题标题】:Firefox windows don't close after Selenium test has runSelenium 测试运行后 Firefox 窗口不关闭
【发布时间】:2011-03-28 20:01:01
【问题描述】:

我已经使用 selenium rc 运行我的 selenium 测试大约 6 个月,突然,当测试完成时,firefox windows selenium 打开并没有关闭。

我正在使用特定的 firefox 配置文件,并且没有更新我的 selenium rc jar。我认为可能是最新版本的 firefox 可能是问题所在,但我恢复到 firefox 2 并且窗口仍然保持打开状态。

我在 Windows 机器上运行测试。

我注意到其他人似乎遇到了这个问题 - 只是想知道是否有人有解决方案?

谢谢, 齿轮。

【问题讨论】:

  • 澄清一下,您是在 Windows 机器上运行 RC(因此浏览器在 Windows 中运行)还是在 Windows 机器上运行测试(因此您的客户端代码在 Windows 中运行并连接到 RC),还是两者都连接?

标签: unit-testing firefox selenium selenium-rc


【解决方案1】:

当 Firefox 浏览器在测试运行后无法完全/关闭时,我遇到了类似的问题。 最后,我发现这是由于其中一个测试模块中的driver = webdriver.Firefox() 行过多引起的。 我的环境。在 Mac OS 上使用 Python 和 Firefox 的 Selenium。

【讨论】:

    【解决方案2】:

    我的解决方案是使用 driver.quit()(这将自动关闭 Firefox 浏览器)而不是 driver.close() - 即使只打开一个 Firefox 窗口,AFAIK。

    【讨论】:

      【解决方案3】:

      距离问题的 3 岁生日仅几天,我提交了另一个晦涩的解​​决方案:

      我的 Firefox 位于自定义位置。因为我不想每次在本地运行 Selenium 测试时都照看自定义 JVM 参数,所以我在 /usr/local/bin 中放置了一个直通脚本。大概 Selenium 正在杀死它启动的进程(我的脚本),而不是浏览器。

      所以我重新使用 JVM 参数来自定义浏览器位置:

      -Dwebdriver.firefox.bin="/path/to/firefox"

      【讨论】:

        【解决方案4】:

        我有同样的问题。我正在运行 Selenium 作为我的 Visual Studio 单元测试的一部分,并且在测试结束时没有关闭 Firefox 浏览器时遇到了同样的问题。

        两件事为我解决了这个问题:

        1) 我用最新版本更新了网站下的 /core 文件夹。

        2) 我发现 selenium 在基类中调用了我的 Set Up 方法两次。与直觉相反(至少对我而言),selenium 似乎自动调用了父类中的设置方法。如果您尝试在子类的设置中调用它(即使用类似 base.setup() 的东西),它将运行两次,并打开无法关闭的 Firefox 窗口。我删除了对 base.setup() 的调用,所有额外的窗口问题都得到了解决。

        【讨论】:

          【解决方案5】:

          使用 MSTest,我在 TestCleanup 中调用了 driver.Quit(),但最终在测试结束时打开了大量 Firefox 窗口。

          我发现 NoSuchElementException 似乎会阻止驱动程序成功调用退出,因此用 try/finally 结束了 TestCleanup:

          [TestCleanup]
                  public void TestCleanUp()
                  {
                      try
                      {
                          driver.FindElement(By.Id("ctl00_btnClearSession")).Click();
                          WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
                          wait.Until((d) => { return d.FindElement(By.Id("ctl00_btnClearSession")).Displayed; });
                       }
                      finally {
                          driver.Quit();
                      }
                  }
          

          这解决了我一直遇到的问题,但可能是我必须用 try/finally 包装我的所有 TestMethods。这远非理想,但当我这样做时,我似乎不再打开窗户。

          【讨论】:

            【解决方案6】:

            如果您在拆解结束时使用 python,请使用 super(unittest2.TestCase,self).tearDown()

            【讨论】:

              【解决方案7】:

              我们遇到了这个问题,经过一番调查后我们修复了它。

              在 Selenium RC 中,您拥有文件“grid_configuration.yml”,其中包含浏览器列表及其各自的标识符,例如“*firefox”。 根据您执行“firefox”时的环境,您可能会调用 firefox 可执行文件的包装器、别名或符号链接。 当 Selenium 启动时,它会为浏览器创建一些 fork 进程,并且取决于您是直接调用 firefox 可执行文件还是包装器,这些进程的创建是不同的,当它试图在 tearDown() 中杀死进程时它实际上杀死子进程并保持父进程存活,因此 tearDown() 不会关闭浏览器。

              解决方法是编辑“grid_configuration.yml”文件,将浏览器可执行文件的绝对路径改为“*firefox”(总是以*开头)

              【讨论】:

                【解决方案8】:

                使用 TestNG,您可以在 teardown() 函数之前加上 @AfterMethod@AfterTest 注释,而不是 @AfterClass

                【讨论】:

                  【解决方案9】:

                  Gearóid:我看不出这将如何解决问题。 super.tearDown() 无论如何都会在每个测试用例之后自动调用,因此进行额外调用只会使其运行两次。

                  我注意到浏览器窗口在 Selenium 服务器停止之前不会关闭。因此,就我而言,如果有 100 个 selenium 测试,我将打开 200 个 Firefox 窗口,然后在 Selenium 服务器退出时最终关闭它们。

                  (我正在运行 Fedora 13 和 Firefox 3.6.7)

                  【讨论】:

                    【解决方案10】:

                    最后非常简单的解决方案 - 只需调用 SeleniumTestCase 的 tearDown() 方法(即,我们从基础测试类调用 super.tearDown();)

                    这样就成功关闭了所有浏览器窗口。

                    【讨论】:

                    • 这是 RC..setup、test、teardown 的基础。 :)
                    【解决方案11】:

                    我们使用微软免费提供的sysinternalspskill工具来杀死浏览器(包括firefox)进程。

                    通过执行pskill "firefox.exe" 将杀死一个 FireFox 窗口。

                    如果你需要在远程机器上执行,你可以使用[psexec][3]。此外,两者都有自动接受 EULA (-accepteula) 的命令开关,因此您不必这样做。

                    【讨论】:

                      猜你喜欢
                      • 2011-03-27
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2016-10-24
                      • 1970-01-01
                      • 2015-10-08
                      相关资源
                      最近更新 更多