TestNG.xml - новый сеанс браузера не открывается после закрытия первого - PullRequest
0 голосов
/ 10 декабря 2018

Как работает мой фреймворк:

  • методы зависят от предыдущих методов, например, шаг 2 зависит от шага 1, шаг 3 на шаге 2 и т. Д. - что это делает, если один метод не работаетвсе остальные пропущены.
  • Я добавил метод разрыва с аннотацией @AfterMethod, надеясь, что после сбоя теста драйвер закроется и откроется другой драйвер для testcase2 (я так знаю плохо)
  • выполнение этого из testng.xml дает мне следующий поток: выполняется первый тестовый пример (допустим, что где-то посередине он не выполняется).драйвер закроется, но драйвер не запустится для второго теста.

Проблема с разрывом и @AfterMethod заключается в том, что программа пытается вызвать driver.quit для каждого метода, даже если драйверуже закрыт.

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

Есть ли способ сделать следующее? - если шаг теста не пройден, пропустите все остальные в тестовом примере (класс java), затем закройте браузер и снова откройте браузер для второго тестового случая. Я знаю, @AfterMethod - плохой способ приблизиться к этому.Я где-то читал, что использование статических атрибутов для WebDriver - плохой подход в этом случае.Если да, то как мне провести рефакторинг моего кода, чтобы иметь возможность использовать вышеуказанный поток?(полужирный).

Может ли это быть из-за слушателя?Дома я не могу получить доступ к инструменту, куда я отправляю результаты, поэтому он работает отлично.На работе, где к инструменту можно получить доступ локально, слушатель работает, и это не удается.

Я предполагаю, что проблема возникает из-за слушателя.

Спасибо!

testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="AutomationFramework">
    <test name="RegistrationPart1">             
        <classes>
            <class name="registration.testcase1" />                         
        </classes>      
    </test> 
    <test name="RegistrationPart2">             
        <classes>
            <class name="registration.testcase2" />                         
        </classes>      
    </test> 
</suite>

Testcase1

public class testcase1 {

    TNGDriver tngDriver = new TNGDriver();

    @BeforeClass
    public void initBrowser() {
        tngDriver.initBrowser("chrome");
    }

    @Test(priority = 1) 
    public void step1() throws InterruptedException {       
        //do something      
    }

    @Test(priority = 2, dependsOnMethods = {"step1"})
    public void step2() {
       //do something
    }

Testcase2

public class testcase2 {

    TNGDriver tngDriver = new TNGDriver();

    @BeforeClass
    public void initBrowser() {
        tngDriver.initBrowser("chrome");
    }

    @Test(priority = 1) 
    public void step1() throws InterruptedException {       
        //do something      
    }

    @Test(priority = 2, dependsOnMethods = {"step1"})
    public void step2() {
       //do something
    }

метод tearDown

   @AfterMethod
   public void tearDown(ITestResult result) throws IOException, InterruptedException {
        if(result.getStatus() == ITestResult.FAILURE) {
            takeScreenshot(result);
            quitAndKillTask();
        }
    }

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Решил это.По ошибке я объявил драйвер как нулевой в функции initBrowser.

0 голосов
/ 11 декабря 2018

если вы вызываете driver.close (), это закроет текущее окно.Если открытого окна нет, драйвер завершает работу.Поэтому, когда вы вызываете свой tearDown, driver.quit (), сессия уже закончилась, и вы получаете ошибку.

в разрыве, просто проверьте допустимый сеанс и затем вызовите driver.quit (), если таковой существует

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