Webdriver.quit(),在@AfterSuite注释中调用时无法正常工作

时间:2016-12-20 04:44:10

标签: selenium selenium-webdriver testng

我在testng xml文件中有两个“test”,所有都是并行运行我的问题是我在Webdriver.quit()注释中调用@AfterSuite方法。但它只关闭最后创建的浏览器实例并非所有已打开的浏览器。

当我调用@AfterTest注释时,它会被关闭。

下面是我的Testng文件
enter image description here

我在基类中创建了驱动程序并在测试类中扩展。

用于创建驱动程序实例的代码。

@BeforeClass @参数({ “设备名称”, “platformName”, “platformVersion”, “UDID”, “browserName”, “browserVersion”, “nodeIP”, “nodePort”}) public void startBrowser(String deviceName,String platformName,String platformVersion,String udid,String browserName,String browserVersion,String nodeIP,String nodePort)

{
    DesiredCapabilities capabilities =DesiredCapabilities.chrome();
    System.setProperty("webdriver.chrome.driver", "chromeDriverPath");
    ChromeOptions options = new ChromeOptions();
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    driver = new ChromeDriver(capabilities);
}

任何人都可以帮助我..

2 个答案:

答案 0 :(得分:0)

每个套房都会调用一次AfterSuite。您在上面显示的是一个并行执行两个测试的套件。您需要确保您的驱动程序是线程安全的。

<test>标记结束后调用AfterTest - 因此,如果特定于某个线程,您的webdriver将被关闭。

如果你想在aftersuite中关闭所有webdriver,你需要建立一个webdrivers列表并单独关闭每个webdriver。

答案 1 :(得分:0)

因为你有2 <test>,所以TestNG正在创建2个实例(使用相同的套件后方法)。 但是testng认为套件方法在套件中是单一的,只会调用一次(它找到的第一个)。 这就是为什么它使用后测试方法,看起来是你应该使用的方法。

顺便说一句,因为你想在套件方法中关闭驱动程序,我想你是在一个前套件方法中创建的,它不应该出于同样的原因。你能详细说明你在哪里/如何创建驱动程序?