在Selenium测试运行后,Firefox窗口不会关闭

时间:2010-08-12 09:27:23

标签: unit-testing firefox selenium selenium-rc

我一直使用硒rc运行我的硒测试约6个月,并且当测试结束时,firefox windows selenium突然打开时不会关闭。

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

我正在 Windows 框中运行测试。

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

谢谢,   Gearoid。

11 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

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

成功关闭所有浏览器窗口。

答案 2 :(得分:3)

我们遇到了这个问题,经过一些调查我们修好了。

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

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

答案 3 :(得分:0)

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

执行会杀死FireFox窗口的pskill "firefox.exe"

如果需要在远程计算机上执行该操作,可以使用[psexec][3]。同时对于两者都有命令开关自动接受EULA(-accepteula),所以你不必。

答案 4 :(得分:0)

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

我注意到在Selenium服务器停止之前浏览器窗口不会关闭。因此,在我的情况下,如果有100次硒测试,我会打开200个Firefox窗口,然后在Selenium服务器退出时最终关闭。

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

答案 5 :(得分:0)

使用TestNG,您可以在teardown()功能之前添加@AfterMethod@AfterTest注释,而不是@AfterClass

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

我发现NoSuchElementException似乎阻止了驱动程序成功调用quit,因此用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's包装所有的TestMethods。这远非理想,但是当我这样做时,我似乎不再打开窗户了。

答案 8 :(得分:0)

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

为我解决了两件事:

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

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

答案 9 :(得分:0)

从问题的第3个生日开始,我提交了另一个不起眼的解决方案:

我的Firefox位于自定义位置。因为每次我在本地运行Selenium测试时我都不想保持自定义JVM参数,所以我在/usr/local/bin中添加了一个直通脚本。据推测,Selenium正在杀死它开始的进程(我的脚本),而不是浏览器。

所以我又回到了将JVM参数用于自定义浏览器位置:

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

答案 10 :(得分:0)

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