Проверка текста на каждой странице (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 (но, на мой взгляд, это все еще не очень хорошее решение)