Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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


(olegS) #1

Bсем привет
юзаю java + maven+ testng , есть два сюта в которых по одному тесту
testng.xml выглядит так

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Tests">
   <test verbose="2" name="Test1">
      <classes>
         <class name="com.selenium.tests.FirstSuit">
            <methods>
               <include name="Test1" />
            </methods>
         </class>
      </classes>
   </test>

   <test verbose="2" name="Test1">
      <classes>
         <class name="com.selenium.tests.SecondSuit">
            <methods>
               <include name="Test1" />
            </methods>
         </class>
      </classes>
   </test>
</sute>

Базовый класс для всех тестов вот такой

public class MyBaseTest {
   public static Tools tools = new Tools();  

   @BeforeMethod(alwaysRun = true)
   public static void beforeMethod() {
      Tools tools = new Tools();
      BasePage.driver = tools.getDriver(); // здесь создаю новый драйвер
      BasePage.tools = tools;
      BasePage.driver.get(tools.getBaseUrl());               
      BasePage.driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
      
   }

   @AfterMethod(alwaysRun = true)
   public static void afterMethod() {      
      BasePage.driver.quit();
      
   }
 }

В BasePage у меня

    public class BasePage {
        public static WebDriver driver;
        public static  Tools tools;
        public static  <T extends BasePage> T initPage(Class<T> pageClass)  {        
            return PageFactory.initElements(driver, pageClass);
        }
    }

Пытаюсь сделать так чтоб каждый тест запускался в отдельной сессии драйвера, в итоге сейчас первый тест у меня проходит, браузер закрывается , после чего стартует новый браузер и на этом все … получаю Session ID is null. Using WebDriver after calling quit()?

Буду благодарен за любые идеи)


(Борис Осипов) #2

Ну так вот ответ не? Ты прибил драйвер, которым сделал PageFactory.initElements(driver, pageClass);


(olegS) #3

тут я согласен, однако перед следующим тестов я снова выполняю @Beformehod () где снова создаю экземпляр, однако все равно креш происходит(


(Борис Осипов) #4

А для всех PageObject’s делаешь потом заного PageFactory.initElements(driver, pageClass); уже с новым истансом драйвера.?


(olegS) #5

по идее да


(Sergey Korol) #6

Мне вот интересно, в каких это учебниках вы нахватались этих public static? Судя по коду, вы их суете, куда не лень.

Начните с изучения основных концепций ООП (в частности - инкапсуляции), затем почитайте про назначение модификатора static со всеми вытекающими. Если проблема все еще будет актуальной, тогда и продолжим обсуждение. :wink:

П.С. Помимо этого, почитайте гайды именования тестовых классов. Удивлен, как у вас вообще maven запускает ваши тесты.


#7

в приведенном xml 1 сюит в котором 2 теста с одинаковыми именами, на что мавен должен был бы сказать
Two tests in the same suite cannot have the same name

У вас с этим проблем нет?


(Jane Tymoschuk) #8

Можно ли взглянуть на то, как выглядит Tools? Особенно интересно как хранится драйвер, а как выглядит getDriver()