Где писать проверку в паттерне PageObject?

163
10 мая 2017, 07:10

Доброго времени суток. Вопрос первый: Подскажите пожалуйста где правильно писать проверку на нахождение на нужной странице и нужно ли вообще писать:

В методе класса:

public class mainPage {
private final WebDriver driver;
By mainPageLocator = By.id("topLoginLink");
public mainPage(WebDriver driver) {
    this.driver = driver;
}
public loginPage verificationMainPage() {
    driver.findElement(mainPageLocator).click();
    return new loginPage(driver);
}}

В конструкторе класса:

public class mainPage {
    private final WebDriver driver;
    By mainPageLocator = By.id("topLoginLink");
public mainPage(WebDriver driver) {
    this.driver = driver;
}
public mainPage(WebDriver driver) {
    this.driver = driver;
    if (!"mainPage".equals(driver.getTitle())) {
        throw new IllegalStateException("This is not the mainPage");
    }
}

Или писать проверку непосредственно в тесте:

@Test
public void createNewAd() {
   // driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    mainPage mainPageOjb = new mainPage(driver);
    mainPageOjb.submitLogin();
    Assert.assertTrue(driver.findElement(By.id("typewaiting")).getText().contains("Главная страница"));
}

Вопрос второй: Какая должны быть структура теста:

@Test
public void createNewAd() {
    //некий код полного тест кейса
}

или

@Test
public void mainPage() {
   //некий заходим на главную страницу, проверяем что зашли
}
@Test(dependsOnMethods = "mainPage")
public void login() {
    //некий код с вводом логина и пароля, проверка перехода
}
@Test(dependsOnMethods = "login")
public void myAccount() {
    //некий код с вводом создание чего то и проверка создания
}

Вопрос третий: Как часто нужно вызывать проверки в тесте, только в конце сценария тест кейса или и на промежуточных этапах?

Answer 1

Добрый день!

  1. Проверку не нужно делать. В предварительных настройках теста Вы должны свой WebDriver отправить на начальную страницу теста, а потом уже ваши классы сами будут обеспечивать возврат необходимой страницы. Так что мне кажется, что это лишнее.

    Также, кроме паттерна PageObject можете взглянуть на паттерн PajeFactory, который возвращает Вам проинициализированный PageObject. Это тоже является своего рода проверкой того, на какой странице мы находимся.

  2. Желательно (но необязательно) структура теста должна быть иерархической. Рекомендую для ответа себе на этот вопрос прочитать статью How To Structure Your Test Code.

    • Assert всегда нужно вызывать в самом тесте и только в конце (После assert метод возвращает управление (завершается));
    • Assert для одного теста всегда будет один, иначе если у вас встречается их несколько в тесте, то ваш тест нужно разделить на несколько тестов.
    • Assert нежелательно переносить внутрь классов, которые не помечены аннотацией @Test (в вышеназванной статье также можно найти, как и где применяется assert). Любой Assert не имеет смысла вне тестирующего метода. Но можно сделать так (это нежелательно. Я не проверял, сработает ли тест правильно но попробуйте):

      @Test
      public void createNewAd() {
         mainPage mainPageOjb = new mainPage(driver);
         mainPageOjb.submitLogin(); 
         assertMethod();
      }
      public void assertMethod() {
         Assert.assertTrue(driver.findElement(By.id("typewaiting")).getText().contains("Главная страница"));
      }
      
READ ALSO
Не работает removeView на android

Не работает removeView на android

При вызове removeViev() окно не закрывается на android 50 (возможно на других версиях тоже, не проверял)

304
Border у пустого span

Border у пустого span

Всем привет, подскажите пожалуйста нужно сделать вертикальный разделитель пунктирный без изображений с помощью border-left css, если есть содержимое...

202
Как привязать id к массиву?

Как привязать id к массиву?

ЗдравствуйтеУ меня на странице есть динамическое добавление полей input

272
Когда использовать form html

Когда использовать form html

Немного запуталсяПробую верстать по psd и иногда смотрю на пример(исходный код - как должно было бы быть)

421