简体   繁体   English

为什么浏览器实例在 Selenium 和 TestNG 中执行后没有关闭/退出?

[英]Why browser instances not getting close/quit after execution in Selenium and TestNG?

I am trying to automate few test cases from different test cases in sequential manner.我正在尝试以顺序方式自动化来自不同测试用例的几个测试用例。 ie one after another test class execution.即依次测试class执行。

In some of cases, web application is not getting closed/quit.在某些情况下,web 应用程序不会关闭/退出。 ie driver instance not closing/quitting.即驱动程序实例未关闭/退出。 I am trying to quit/close driver in @AfterClass method as well as test class level as well but its not working in both cases.我正在尝试在@AfterClass 方法中退出/关闭驱动程序以及测试 class 级别,但它在这两种情况下都不起作用。

In TestNG Suite results, its showing as its tried to executed but webdriver instances are NOT closed and new webpage instance is open.在 TestNG Suite 结果中,它显示为尝试执行但 webdriver 实例未关闭并且新网页实例已打开。

在此处输入图像描述

For reference I have shared code for 1st two test classes.作为参考,我已经共享了第一个两个测试类的代码。

Please check below snippet for code:请检查下面的代码片段:

package managers;

import java.io.IOException;
import java.net.InetAddress;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;

import enums.EnvironmentType;

public class VMSBaseDriver {
    public WebDriver driver;
//  private static DriverType driverType;
    private static EnvironmentType environmentType;
    private static final String CHROME_DRIVER_PROPERTY = "webdriver.chrome.driver";
    private static final String IE_DRIVER_PROPERTY = "webdriver.ie.driver";

    public WebDriver getDriver() {
        return driver;
    }

    @SuppressWarnings("deprecation")
    @Parameters("browserName")

    @BeforeClass

    public void initialize(String browser) throws IOException, InterruptedException {

        environmentType = FileReaderManager.getInstance().getConfigReader().getEnvironment();
//      driverType = FileReaderManager.getInstance().getConfigReader().getBrowser();

        switch (environmentType) {
        case LOCAL:
            System.out.println("(In Local) Selected environment from config :: " + environmentType);
            if (browser.equalsIgnoreCase("firefox")) {

                driver = new FirefoxDriver();
            } else if (browser.equalsIgnoreCase("chrome")) {
                System.setProperty(CHROME_DRIVER_PROPERTY,
                        FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/chromedriver.exe");
                driver = new ChromeDriver();
            } else if (browser.equalsIgnoreCase("internetexplorer")) {

                System.setProperty(IE_DRIVER_PROPERTY,
                        FileReaderManager.getInstance().getConfigReader().getDriverPath() + "/IEDriverServer.exe");
                DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
                capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
                        true);
                capabilities.setCapability(InternetExplorerDriver.IE_USE_PRE_PROCESS_PROXY, true);
                capabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);
                capabilities.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, false);
                driver = new InternetExplorerDriver(capabilities);

            }

            if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
                driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(
                    FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
            // driver.get(FileReaderManager.getInstance().getConfigReader().getApplicationUrl());
            driver.get("http://" + getIPAddress());
            Thread.sleep(3000);

            break;

        case REMOTE:
            System.out.println("(In Remote) Selected environment from config :: " + environmentType);
            if (browser.equalsIgnoreCase("firefox")) {

                FirefoxOptions firefoxOptions = new FirefoxOptions();
                FirefoxProfile profile = new FirefoxProfile();

                profile.setAcceptUntrustedCertificates(true);
                profile.setAssumeUntrustedCertificateIssuer(false);
                profile.setPreference("network.proxy.type", 0);
                firefoxOptions.setCapability(FirefoxDriver.PROFILE, profile);
                driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), firefoxOptions);
            } else if (browser.equalsIgnoreCase("chrome")) {

                ChromeOptions options = new ChromeOptions();
                options.addArguments("--start-maximized");
                options.addArguments("--ignore-certificate-errors");
                options.addArguments("--disable-popup-blocking");
                DesiredCapabilities capabilities = DesiredCapabilities.chrome();
                capabilities.setCapability(ChromeOptions.CAPABILITY, options);
                capabilities.setCapability("browserName", "chrome");

                driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), capabilities);
            } else if (browser.equalsIgnoreCase("internetexplorer")) {

                DesiredCapabilities iecapabilities = DesiredCapabilities.internetExplorer();
                iecapabilities.setBrowserName("internet explorer");
                iecapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
                        true);
                iecapabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
                iecapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
                iecapabilities.setCapability("ignoreProtectedModeSettings", true);
                iecapabilities.setCapability("nativeEvents", false);
                iecapabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, "");
                iecapabilities.setCapability(InternetExplorerDriver.LOG_LEVEL, "DEBUG");

                iecapabilities.setPlatform(Platform.WINDOWS);

                driver = new RemoteWebDriver(new URL("http://172.20.1.24:4444/wd/hub"), iecapabilities);

            }

            if (FileReaderManager.getInstance().getConfigReader().getBrowserWindowSize())
                driver.manage().window().maximize();
            driver.manage().timeouts().implicitlyWait(
                    FileReaderManager.getInstance().getConfigReader().getImplicitlyWait(), TimeUnit.SECONDS);
            driver.get("http://" + getIPAddress());
            Thread.sleep(3000);

            break;
        }

    }

    @AfterClass
    public void TeardownTest() {

        driver.quit();

    }

    public String getIPAddress() {

        InetAddress IP = null;
        try {
            IP = InetAddress.getLocalHost();
            // System.out.println("IP of my system is := " + IP.getHostAddress());
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return IP.getHostAddress();
    }

    public By extendedLocator(String locString, String value)

    {

        return By.xpath(String.format(locString, value));

    }

}

ViewTest Class查看测试 Class

package testCases;

import java.io.IOException;
import java.lang.reflect.Method;

import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.aventstack.extentreports.Status;

import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.CamerasAndEncodersPage;
import pageObjects.MonitoringPage;
import pageObjects.ViewsPage;

public class ViewsTest extends VMSBaseDriver {

    public MonitoringPage monitoringPage;
    public ViewsPage viewsPage;
    CamerasAndEncodersPage camerasAndEncodersPage;
    public String[] Servers;

    @BeforeClass
    public void init() throws InterruptedException, IOException {

        monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
        viewsPage = PageFactory.initElements(driver, ViewsPage.class);
        Servers = viewsPage.getServersList();

        driver.navigate().to("http://" + Servers[0]);
        Thread.sleep(2000);
        viewsPage.SignIn();
        Thread.sleep(1000);
        viewsPage.WaitUntilLoadingBlockAppears();
        Thread.sleep(1000);
        viewsPage.WaitUntilLoadingBlockDisappears();
        Thread.sleep(1000);
        viewsPage.GoToViewsPageFromLanding();
        Thread.sleep(1000);
        viewsPage.GoToViewsPage();
        Thread.sleep(1000);
    }
    
    /*
     * @AfterMethod public void browserCategory(Method method) {
     * ExtentReportTestManager.startTest(method.getName()).assignCategory(((
     * RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());
     * 
     * }
     */

    @Test
    public void AddNewViewTest(Method method) throws Exception {
        //logger = report.startTest("AddNewViewTest");
        ExtentReportTestManager.startTest(method.getName()).assignCategory(((RemoteWebDriver) driver).getCapabilities().getBrowserName().toUpperCase());

        int viewsCount = viewsPage.GetViewsSize();
        ExtentReportTestManager.getTest().log(Status.INFO, "Click on New button");
        viewsPage.ClickOnNewButton();

        String viewName = "ViewName" + viewsPage.GetRandomDigit(0, 10000);
        ExtentReportTestManager.getTest().log(Status.INFO, "Input name " + viewName + " in name field");
        viewsPage.InputIntoNameField(viewName);

        String remarks = "Remarks for " + viewName;
        ExtentReportTestManager.getTest().log(Status.INFO, "Input remarks " + remarks + " in remarks field");
        viewsPage.InputIntoRemarksField(remarks);

        int layoutSize = viewsPage.GetLayoutSize();
        int random = viewsPage.GetRandomDigit(0, layoutSize);
        ExtentReportTestManager.getTest().log(Status.INFO, "Select layout ");
        viewsPage.ClickOnLayoutByIndex(random);

        int viewSize = viewsPage.GetLayoutViewSize();
        int resourcesSize = viewsPage.GetResourcesSize();
        int rand = viewsPage.GetRandomDigit(1, viewSize);

        ExtentReportTestManager.getTest().log(Status.INFO, "Drag " + rand + " resources ");
        for (int i = 0; i < rand; i++) {
            int viewIndex = viewsPage.GetRandomDigit(0, viewSize);
            int resIndex = viewsPage.GetRandomDigit(0, resourcesSize);
            String viewId = viewsPage.GetViewIDByIndex(viewIndex);
            String resourceId = viewsPage.GetResourcesIDByIndex(resIndex);
            viewsPage.DragAndDropCameraToView(resourceId, viewId);
        }

        int fullViewSize = viewsPage.GetFullViewsSize();
        int audioViewsSize = viewsPage.GetAudioViewsSize();
        ExtentReportTestManager.getTest().log(Status.INFO, "Press Save button");
        viewsPage.PressSaveButton();

        String viewNameSaved = viewsPage.GetViewName();
        String viewRemarksSaved = viewsPage.GetRemarksText();
        int fullViewSizeSaved = viewsPage.GetFullViewsSize();
        int audioViewsSizeSaved = viewsPage.GetAudioViewsSize();

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed");
        AssertJUnit.assertEquals(viewNameSaved, viewName);

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed");
        AssertJUnit.assertEquals(viewRemarksSaved, remarks);

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources");
        AssertJUnit.assertEquals(fullViewSizeSaved, fullViewSize);
//        Assert.assertEquals(audioViewsSizeSaved,audioViewsSize);

        ExtentReportTestManager.getTest().log(Status.INFO, "Refresh page ");
        viewsPage.Refresh();
        // int viewsCount = viewsPage.GetViewsSize();
        int viewsCountAfterRefresh = viewsPage.GetViewsSize();
        ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is added ");
        AssertJUnit.assertEquals(viewsCountAfterRefresh, viewsCount + 1);

        ExtentReportTestManager.getTest().log(Status.INFO, "Click on " + viewName + " view");
        viewsPage.ClickOnViewByName(viewName);
        Thread.sleep(1000);

        String viewNameRefreshed = viewsPage.GetViewName();
        String viewRemarksRefreshed = viewsPage.GetRemarksText();
        int fullViewSizeRefreshed = viewsPage.GetFullViewsSize();
        int audioViewsSizeRefreshed = viewsPage.GetAudioViewsSize();

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that view name is equals to inputed after refresh");
        AssertJUnit.assertEquals(viewNameRefreshed, viewName);

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that view remarks is equals to inputed after refresh");
        AssertJUnit.assertEquals(viewRemarksRefreshed, remarks);

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that layout has " + fullViewSize + "resources after refresh");
        AssertJUnit.assertEquals(fullViewSizeRefreshed, fullViewSize);
//        Assert.assertEquals(audioViewsSizeRefreshed,audioViewsSize);

        ExtentReportTestManager.getTest().log(Status.INFO, "Go to Monitoring page");
        viewsPage.GoToMonitoringPage();

        ExtentReportTestManager.getTest().log(Status.INFO, "Input into filter field");
        monitoringPage.FilterField(viewName);

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that new view is present in Monitoring Resources list");
        boolean viewIsExist = monitoringPage.VerifyThatResourceIsExist(viewName);
        AssertJUnit.assertTrue(viewIsExist);
    }

    

}

WebPageTest class WebPageTest class

package testCases;

import java.io.IOException;
import java.lang.reflect.Method;

import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.AssertJUnit;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.aventstack.extentreports.Status;

import managers.ExtentReportTestManager;
import managers.VMSBaseDriver;
import pageObjects.MonitoringPage;
import pageObjects.WebPagesPage;

public class WebPagesTest extends VMSBaseDriver {


    public MonitoringPage monitoringPage;
    public WebPagesPage webPagesPage;
    public String[] Servers;

    /*
     * @AfterMethod public void browserCategory(Method method) {
     * ExtentReportTestManager.startTest(method.getName())
     * .assignCategory(((RemoteWebDriver)
     * driver).getCapabilities().getBrowserName().toUpperCase());
     * 
     * }
     */

    @BeforeClass
    public void init() throws IOException, InterruptedException {

        monitoringPage = PageFactory.initElements(driver, MonitoringPage.class);
        webPagesPage = PageFactory.initElements(driver, WebPagesPage.class);
        Servers = webPagesPage.getServersList();
        webPagesPage.SignIn();
        webPagesPage.WaitUntilLoadingBlockAppears();
        webPagesPage.WaitUntilLoadingBlockDisappears();
        webPagesPage.GoToWebPagesPageFromLanding();

        /*
         * driver.navigate().to("http://" + Servers[0]); try{
         * driver.switchTo().alert().accept(); }catch(Exception a){}
         * 
         * webPagesPage.WaitUntilLoadingBlockAppears();
         * webPagesPage.WaitUntilLoadingBlockDisappears();
         * webPagesPage.GoToWebPagesPage();
         */
    }

    @Test
    public void AddNewWebPageTest(Method method) throws InterruptedException {
        // logger = report.startTest("AddNewWebPageTest");
        
        
        ExtentReportTestManager.startTest(method.getName())
         .assignCategory(((RemoteWebDriver)
         driver).getCapabilities().getBrowserName().toUpperCase());

        ExtentReportTestManager.getTest().log(Status.INFO, "Click on new button");
        webPagesPage.ClickOnNewButton();

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that Save button is disabled");
        AssertJUnit.assertFalse(webPagesPage.SaveButtonIsEnabled());

        ExtentReportTestManager.getTest().log(Status.INFO, "Check that Cancel button is enabled");
        AssertJUnit.assertTrue(webPagesPage.CancelButtonIsEnabled());
    }

    

}

TestNG.xml file TestNG.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Test Suite">
    <listeners>
        <listener class-name="reporter.BaseListener" />
    </listeners>



    <test name="R121 Internet Explorere Execution"  thread-count="2" >
        <parameter name="browserName" value="internetexplorer" />
        <classes>
            <class name="testCases.ViewsTest" />
            <class name="testCases.WebPagesTest" />
            <class name="testCases.AddCameraManually" />
            <class name="testCases.AudioChannelsElementsTest" />
            <class name="testCases.AudioChannelsTest" />
            <class name="testCases.CamerasAndEncodersElementsTest" />
        </classes>
    </test>
</suite>

You can add alwaysRun = true in @AfterClass annotation.您可以在 @AfterClass 注释中添加 alwaysRun = true 。 like @AfterClass(alwaysRun=true).像@AfterClass(alwaysRun=true)。

If your test classes are independent of each other then it is good to use separate session for each test class.如果您的测试类彼此独立,那么最好为每个测试 class 使用单独的 session。 In this case you have to write @AfterClass method in each of test class to close individual session.在这种情况下,您必须在每个测试 class 中编写 @AfterClass 方法来关闭单个 session。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM