Java + Идентификатор сеанса Selenium равен нулю. Использование WebDriver после вызова quit () - PullRequest
0 голосов
/ 27 марта 2020

У меня возникают проблемы при попытке запустить Selenium Web-драйвер определенным образом c, у меня в моей инфраструктуре настроен TestNG + Selenium Web driver, и я хотел бы выполнить sh - запустить два Комплекты, которые я настроил в файлах TestNG. xml ниже:

TestNG. xml

<suite>
    <suite-files>
        <suite-file path="src/testNG/suites/UserSignsOn.xml" />
        <suite-file path="src/testNG/suites/PreSetup.xml" />
    </suite-files>
</suite>

PreSetup. xml

<suite name="Pre Setup">
    <test name="pre setup suite">
        <classes>
            <class name="Tests.PreSetup" />
        </classes>
    </test>
</suite>

UserSignsOn. xml

<suite name="User Signs On">
    <test name="Get the Web Application">
        <classes>
            <class name="Tests.LoginPageTest" />
        </classes>
    </test>
</suite>

Мои тестовые файлы выглядят так:

LoginPageTest.class

public class LoginPageTest extends BaseTest {

    @Test
    @Description("Login to the web application")
    public void signInTheWebApplicationLocalHost(){ // some steps here }
}

PreSetup.class

public class PreSetup extends BaseTest {

    @Test
    @Description("Pre setup")
    public void preSetupSteps(){ // some steps here }
}

Как вы видите, мои тестовые файлы расширяют класс, а именно:

BaseTest.class

public class BaseTest {

    protected EnvironmentManager environmentManager;

    @BeforeTest
    public void testSetup() {
        environmentManager = EnvironmentManager.getInstance();

        if(environmentManager.getDriver() == null){
            // Here I am set up the driver!!!
            environmentManager.initWebdriver();
            environmentManager.startWebApplication();
        }
    }

    @BeforeMethod
    public void testName(ITestResult result){ // perform some actions }

    @AfterMethod
    public void status(ITestResult result){ // perform some actions }

    @AfterTest // Here I am shutting down the driver
    public void tearDown() { environmentManager.shutdownDriver(); }
}

BaseTest.class вызывает EnvironmentManager.class , который является одноэлементным классом

Имеет следующий код:


public class EnvironmentManager {

    private static EnvironmentManager instance = null;
    private WebDriver driver = null;
    private String url = "www.google.com";

    private EnvironmentManager(){}


    // Public Methods
    public void initWebdriver() {
        if(driver == null){ driver = new ChromeDriver(); }
    }

    public void startWebApplication(){ driver.get(url); }

    // Singleton method
    public static EnvironmentManager getInstance() {
        if (instance == null) instance = new EnvironmentManager();
        return instance;
    }

    public void shutdownDriver(){
        driver.quit();
        driver = null;
    }


    public WebDriver getDriver(){ return driver; }
}

Проблема возникает после запуска второго теста «PreSetup», в консоли я получил ошибку:

Session ID is null. Using WebDriver after calling quit()?

Я заметил, что в первом тесте Сессия драйвера:

ChromeDriver: chrome on MAC (0ff799fbfd14fc275b3b45c414765b15)

И во втором тесте другой:

ChromeDriver: chrome on MAC (09c6c47344756fe2979ee8a84094b1e3)

Любая помощь приветствуется:)

1 Ответ

0 голосов
/ 28 марта 2020

для всех заинтересованных сторон решение состоит в том, чтобы переименовать следующие аннотации testNG:

@ BeforeTest @ AfterTest

в

@ BeforeSuite @ AfterSuite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...