Запускайте тесты в разных сеансах браузера, но всегда получайте 'NoSuchSessionException: идентификатор сеанса равен нулю. Использование WebDriver после вызова quit ()? ' - PullRequest
0 голосов
/ 05 июля 2019

Мой тестовый проект имеет @BeforeClass и @AfterClass в BaseTest.class:

public class BaseTest {

  @BeforeClass(groups = {"first"})
  public void beforeTest() {
    getDriver().get("URL");
  }

  @AfterClass(alwaysRun = true)
  public void afterTest() {
    getDriver().close();
    removeDriver();
  }
}

и его FirstTest.Class:

public class SmokeTest extends BaseTest {

  private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);
  @Test(testName = "test1", groups = { "first" })
  public void firstTest() {
    pageOne.goSomething();
  }

  @Test(testName = "test2", groups = { "first" })
  public void secondTest() {
    pageOne.goSomethingElse();
  }
}

Синглтон WebDriver:

public class WebDriverSingleton {

  private static WebDriver driver;

  public static WebDriver getDriver() {
    if (driver == null) {
      driver = new ChromeDriver();
    }
    return driver;
  }

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

И это работает просто отлично.Пока я не добавил новые случаи, которые я хотел бы запустить в новых экземплярах браузера.

Что я добавил:

public class BaseModuleTest {
  @BeforeClass(groups = {"second"})
  public void beforeClass() {
    getDriver().get("another URL");
  }
}
public class ModuleTest extends BaseModuleTest {

  private PageTwo pageTwo = PageFactory.initElements(getDriver(), PageTwo.class);
  private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);

  @Test(testName = "test1", groups = {"second"})
    public void testUp() {
      pageTwo.goToPageOne();
      pageOne.doSomething(); // getting fail here
  }
}

Когда я запускаю тестирование с использованием testgnconfiguration.xml

  1. пропущена первая группа
  2. окно браузера закрывается
  3. новый экземпляр WebDriver открывает новое окно браузера
  4. переходит на URL
  5. когда начинается взаимодействие с первым веб-элементом на странице, которая была создана во время «первого» запуска группы, выдает ошибку:

    org.openqa.selenium.NoSuchSessionException: идентификатор сеанса равен нулю,Использование WebDriver после вызова quit ()?

Поскольку я использую объектную модель страницы и использую во "втором"сгруппировать те же страницы, которые были инициализированы в «первой» группе, я думаю, они как-то «запомнили» первый идентификатор сессии, который стал «нулевым».Хотя я реинициализирую их в ModuleTest.test1 () ...

В любом случае, если мои предложения верны, как передать новый sessionId экземплярам объектов страницы?Или как правильно их реинициализировать?

1 Ответ

0 голосов
/ 05 июля 2019

Похоже, ваша проблема:

@BeforeClass(groups = {"first"})

и

@AfterClass(alwaysRun = true)

Вы всегда уничтожаете объект драйвера после окончания класса, но вы создаете объект драйвера только длякласс в определенной группе.Я бы предложил настроить ваш @BeforeClass на:

@BeforeClass(alwaysRun = true)

или

@BeforeClass(groups = {"first, "second"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...