如何在使用TestNG进行Selenium测试期间关闭打开的驱动程序

时间:2014-01-08 13:45:29

标签: java selenium grid hudson testng

我有一个Selenium项目,它在我的本地机器上运行正常但在Hudson运行时有问题。问题是它不会在每次测试结束时关闭打开的驱动程序。

先决条件:此项目由Hudson在Selenium网格服务器上运行。 (我也在Selenium网格服务器上的本地机器上运行它,但问题不会发生)

所以,我有一个由每个测试类实现的BeforeAndAfter类。

在BeforeAnd之后我有一个@BeforeClass方法启动一个新的驱动程序:     driver = new RemoteWebDriver(new URL(url),capability); 以及执行driver.quit();

的@AfterClass方法

每次我在远程Selenium Grid服务器上运行testNG.xml文件时,它会为每个测试类打开一个驱动程序,但是当它关​​闭所有驱动程序(所有浏览器窗口)时它会一直打开直到最后一次测试结束

我的testNG文件如下所示:

<parameter name="browser" value="firefox"/>
<parameter name="url" value="http://10.32.999.99:999/wd/hub"/>


<test name="Regression on test grid">
    <classes>          
        <class name="tests.PageTests.ArticlesPageTest"/>
         <class name="tests.PageTests.CuratorsPageTest"/>
         <class name="tests.FlowTests.NavigateThroughFindings"/>
        <class name="tests.PageTests.DiffToolTest"/>
        <class name="tests.PageTests.ReportsAdminTest"/>           
    </classes>
</test>

对这个问题的任何想法?

PS:事实上,问题是@AfterClass方法在每个测试类释放内存后没有关闭驱动程序。

1 个答案:

答案 0 :(得分:0)

如果是testNG,你可以使用@AfterClass(alwaysRun = true)。

此外,在我们的项目中,我们创建了批处理文件,以便在任何测试类complition之后终止进程。就像任何IEdriver.exe或firefox.exe正在运行一样,你强制使用windows commads杀死它。确保你在下一个测试类开始之前通过在Setup fixture方法中调用batch来执行它。