Проверка текста на каждой странице (Selenium)

Используя Java, я пытаюсь написать общую проверку для определенного текста на каждой странице в веб-приложении, которое посещают существующие тесты. Вместо того, чтобы писать это на каждой странице отдельно, возможно ли это сделать в одном месте на высоком уровне (может быть, в базовом классе)?

public class BaseClassForUiTest {
                public BaseClassForUiTest() {
                       ...
                }

                public void test() throws Exception {
                       boolean isNewPage = checkIfNewPage();
                       if (isNewPage)
                             // perform a text check on the page
                }
}

Каждый тест начинается с BaseClassForUiTest и переопределяет test() метод.

2 ответа

Решение

Вместо того, чтобы писать это на каждой странице отдельно, возможно ли это сделать в одном месте на высоком уровне (может быть, в базовом классе)?

Да, это возможно путем реализации WebDriverEventListener в BaseClassForUiTest и переопределить методы обработчика событий для обработки соответствующих WebDriver события по необходимости в одном месте.

Здесь каждый метод соответствует событию. По вашему требованию вы должны справиться afterNavigateTo() метод. Этот вызывается каждый раз, когда навигация по странице завершена.

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

public class BaseClassForUiTest implements WebDriverEventListener
{

      ---------
      ---------

      public void afterNavigateTo(String arg0, WebDriver arg1) {
    // perform desire text checker stuff on the page here
  }
}

Теперь создайте Event Throwing WebDriver для выполнения вашего теста:-

  • Создайте обычный WebDriver.

    FirefoxDriver driver = new FirefoxDriver();
    
  • Теперь создайте EventThrowingWebDriver используя наш регулярный WebDriver создано выше.

    EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
    
  • Создайте экземпляр своего eventHandler класс и зарегистрировать его для событий, используя метод регистра EventFiringWebDriver объект, созданный выше как:-

    BaseClassForUiTest handler = new BaseClassForUiTest();
     eventDriver.register(handler);
    

Полный код:-

import org.openqa.selenium.support.events.EventFiringWebDriver;

public class BaseClassForUiTest {

 public void test() throws Exception {              

      FirefoxDriver driver = new FirefoxDriver();
      EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);

      BaseClassForUiTest handler = new BaseClassForUiTest();
  eventDriver.register(handler);

      eventDriver.get("your url");

      //Now do your further stuff
}
}

Что касается меня, вам лучше создать отдельный тестовый класс для этой проверки с помощью Parameterized или JUnitParams и дать ему URL для запуска в качестве параметров, но это зависит от того, каков ваш общий подход к выполнению тестов (мы запускаем весь пакет тестов в в то же время, так что это решение для нас в этой ситуации). Также это похоже на хорошо логически разделенное решение

Если вы собираетесь использовать эту проверку в качестве подтверждения, вы можете переписать свой текущий код для этого случая и вызвать его в блоке @Before (но, на мой взгляд, это все еще не очень хорошее решение)

Другие вопросы по тегам