#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
- запустите тест 3) закройте браузер 4) Запустите браузер для тестового файла 2
- запустите тест 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.