Selenium — тестовая последовательность в отдельном тесте против testsuite

#java #selenium #maven #annotations #testng

#java #селен #maven #примечания #testng

Вопрос:

Я разработал тестовую среду POM в maven в eclipse IDE. В настоящее время у меня есть 3 тестовых файла. Каждый тестовый файл имеет

1) конструктор — который вызывает методы базового класса для настройки и запускает браузер. 2) @Test — фактические тесты 3) @AfterClass — для выполнения очистки после тестирования. закройте драйвер, закройте файловые соединения.

Когда я запускаю их отдельно, они работают нормально. Однако, когда я прогоняю их через testng.xml как правило, это доставляет мне неприятности. Он 1) запускает все браузеры один за другим 2) затем запускает тест, в котором управление из одного теста переходит в другой тест. 3) закройте только один браузер.

Я хочу, чтобы моя последовательность выполнения в testsuite была следующей.

  1. Запустите браузер для тестового файла 1
  2. запустите тест 3) закройте браузер 4) Запустите браузер для тестового файла 2
  3. запустите тест 6) закройте браузер и так далее.

Я не знаю, где я ошибаюсь. Пожалуйста, предложите. Ниже приведен код в моем базовом классе.

 /**
 * 
 */
package seleniumeasy.qa.Base;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import seleniumeasy.qa.Util.commonUtil;

/**
 * @author sanee
 *
 */
public class Base {
    
    protected static WebDriver driver=null;
    private static FileInputStream fis;
    private static Properties prop;
    
    public Base()
    {
        System.out.println("I am in Base constructor");
        try {
            fis = new FileInputStream(commonUtil.sConfigPath);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        prop = new Properties();
        try {
            prop.load(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    public void Init()
    {
        System.out.println("I am inside Init.");
        
        //if(driver==null)
        //{
            System.out.println("I am inside If:");
            if(prop.getProperty("browser").equalsIgnoreCase("chrome"))
            {
                System.setProperty(prop.getProperty("chromekey"),prop.getProperty("chromepath"));
                driver = new ChromeDriver();            
            }
            if(prop.getProperty("browser").equalsIgnoreCase("edge"))
            {
                System.setProperty(prop.getProperty("edgekey"),prop.getProperty("edgepath"));
                driver = new EdgeDriver();          
            }
            if(prop.getProperty("browser").equalsIgnoreCase("ff"))
            {
                System.setProperty(prop.getProperty("ffkey"),prop.getProperty("ffpath"));
                driver = new FirefoxDriver();           
            }
            driver.manage().deleteAllCookies();
            driver.manage().timeouts().pageLoadTimeout(50, TimeUnit.SECONDS);
    
            driver.manage().timeouts().implicitlyWait(commonUtil.iImplicitWait, TimeUnit.SECONDS);
            driver.manage().window().maximize();        
            driver.get(prop.getProperty("url"));
            
            
            /*Alert alt = driver.switchTo().alert();
            alt.dismiss();*/
            
            
            driver.findElement(By.linkText("No, thanks!")).click();
            
        }       
        
        
    //}
    
    public void postCleanUp(String sTestName)
    {
        System.out.println("I am in postcleanup from:   "   sTestName);
        driver.close();
        driver.quit();
        driver=null;
        /*try {
            fis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
    }
}
 

ниже приведен код в одном из моих тестовых классов

 package seleniumeasy.test.Tests;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Reporter;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;

import seleniumeasy.qa.Base.Base;
import seleniumeasy.qa.Page.HomePage;
import seleniumeasy.qa.Page.tblPaginationPage;

public class HomePageTest extends Base 
{

    public HomePage obj;
    public tblPaginationPage tblObj;
    SoftAssert sAssert;
    
    
    
    public HomePageTest()
    {
        Init();
        obj = new HomePage();
        sAssert = new SoftAssert();
        
    }
    
    @Test
    public void verifyTablePaginationMenu()
    {
        Reporter.log("Test Name is: verifyTablePaginationMenu");
        tblObj = obj.clickTablePagination();
        WebElement sPageTitle = driver.findElement(By.tagName("h2"));
        
        sAssert.assertEquals("Table with Pagination Example", sPageTitle.getText());
        
    }
    @AfterMethod    
    public void sAssertAll()
    {
        System.out.println("I am in HomePage AfterClass");
        //System.out.println("I came here");
        postCleanUp("HomePageTest");
        sAssert.assertAll();
        
    }
    /*@AfterClass
    public void closeConnection()
    {
        //postCleanUp();
    }*/
}
 

ниже приведен код в testng.xml файл

 <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
  
<suite name="AutomationSuit" verbose="1" >
  
  
    <listeners>
        <listener class-name="seleniumeasy.qa.Util.TestListener"/>
    </listeners>
  <test name="Regression">
    <classes>
      <class name="seleniumeasy.test.Tests.HomePageTest"/>
      <class name="seleniumeasy.test.Tests.TablePaginationTest"/>
      <class name="seleniumeasy.test.Tests.tblDataSearchTest"/>
    </classes>
  </test>
</suite>
 

пожалуйста, найдите прикрепленное изображение иерархии папок моей платформы POM для лучшего понимания.

введите описание изображения здесь

Ответ №1:

Я решил свою проблему, добавив Init() в аннотацию BeforeMethod и postcleanup() в аннотацию AfterMethod.

Ответ №2:

Для каждого класса, который вы вызываете Init() , вот почему у вас есть три новые возможности браузера. Когда вы вызываете :

 public void postCleanUp(String sTestName)
 

попробуйте передать webdriver

 public void postCleanUp(String sTestName, WebDriver driver1)
 

и выполните driver1.quit()

Комментарии:

1. Привет, нет, это не сработало. Результат такой же, как и раньше. Один браузер закрывается, но два других остаются, и тогда он не знает, с каким браузером работать.

2. Я решил свою проблему, добавив Init() в аннотацию BeforeMethod и postcleanup() в аннотацию AfterMethod.