public abstract class AbstractTest {
public static WebDriver DRIVER;
private String getFileName() throws IOException {
DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy_hh.mm.ss");
Date date = new Date();
return dateFormat.format(date);
}
@BeforeMethod
public static void before(){
DRIVER = new InternetExplorerDriver();
DRIVER.manage().deleteAllCookies();
}
/*@AfterMethod(alwaysRun=true)
public void setScreenshot(ITestResult result) {
if (!result.isSuccess()) {
try {
WebDriver returned = new Augmenter().augment(DRIVER);
if (returned != null) {
File f = ((TakesScreenshot) returned)
.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(f, new File("E:\\Test_results\\"
+ result.getName() + " " + getFileName() + ".jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (ScreenshotException se) {
se.printStackTrace();
}
}
}*/
@AfterMethod(alwaysRun=true)
public static void after() {
DRIVER.close();
DRIVER.quit();
}
}
Пример тестового класса:
public class TestServicePayments extends AbstractTest {
@Features("Платежы")
@Stories("МТС Украина")
@Test
public void createMTCProvider() throws Exception{
LoginPage loginPage = new LoginPage(DRIVER);
loginPage.navigateTo();
MainPage mainPage = loginPage.loginToMainPage();
класс page-а LoginPage:
public class LoginPage extends AbstractPage {
public static final String LOGIN = "...";
public static final String PASSWORD = "....";
public static final int TIMEOUT_SECONDS = 20;
private final String URL = BASE_URL;
@FindBy(id = "Login_tbUserName")
WebElement inputLogin;
@FindBy(id = "Login_tbPassword")
WebElement inputPassword;
@FindBy(id = "Login_btnEnter")
WebElement enterBtn;
public LoginPage(WebDriver driver) {
super(driver);
PageFactory.initElements(driver, this);
}
@Override
public String getUrl() {
return null;
}
@Override
public void navigateTo() {
driver.get(URL);
waitForPage();
}
@Override
public void waitForPage() {
waitForElement(driver, inputLogin, TIMEOUT_SECONDS);
}
@Step
public MainPage loginToMainPage(){
waitForPage();
driver.manage().deleteAllCookies();
inputLogin.clear();
inputLogin.sendKeys(LOGIN);
inputPassword.clear();
inputPassword.sendKeys(PASSWORD);
enterBtn.click();
MainPage mainPage = new MainPage(driver);
mainPage.waitForPage();
mainPage.isElement();
return mainPage;
}}
Класс от которого наследуются все Pages:
abstract public class AbstractPage extends WebDriverHelper implements Page {
protected WebDriver driver;
public static final String BASE_URL="http://....";
public static final String BASE_URL_MC="http://....";
public AbstractPage(WebDriver driver) {
this.driver = driver;
}
public abstract void waitForPage();}
Але був хороший коментар про файл з утілітою, де цей скріншот атач є. Теж з практики ще використовуємо атач звичайного тексту, це можуть бути помилки з консолі для прикладу, чи JSON, чи HTML сторінки при падінні тесту.
Вся магія в заданні проавильного MIME типу в анотації @Attachment(type=<your_needed_type>) і тому що має витягнути метод чи що йому треба перадати і потім повернути як byte[].
Ребята, не подскажите в чем может быть проблема? Прикрутил скрины к отчетам, появляются и в папочках Target и в отчет попадают, но в отчет они попадает куда попало, есть если из 20-ти тестов один зафелин скриншот фейла попадет не в тест с фейлом, а в тест - “Past”, причем скрин фейла и как мне показалось всегда попадает в разный тест… Не приложу ума почему так…
Сорри, а у вас случаем в трех методах не одно и то же onTestFailure, onTestSuccess, onTestSkipped ?
Вы передаете ITestResult result, но не проверяете его - скриншоты будут при любом результате
Ми використовуємо Selenide. WebDriver - це один із його класів, при визові getWebDriver() він повертає інстанс актуального драйвера для потоку в якому він працює, можете подивитись в “нутрях” що там і до чого, aле можна написати і свій aka WebDriverManager який все те саме робить привязує драйвери до threads ну і прочі штуки робить, щоб уникнути використання Selenide.
Виглядає приблизно так: