Объектная модель страницы с Фабрикой страниц в Selenium
В этом руководстве мы узнаем о шаблоне проектирования Объектная модель страницы. Мы увидим полную информацию о шаблоне проектирования модели объекта страницы с фабрикой страниц в Selenium с практическими примерами.
- Что такое шаблон проектирования POM (модель объектов страницы)
- Что такое фабрика страниц
- В чем разница между POM и Page Factory
- Преимущества модели Page Objects Model Framework
- Создание POM с помощью Page Factory в Selenium WebDriver
Что такое шаблон проектирования объектной модели страницы (POM):
Объектная модель страницы — это шаблон проектирования, ставший популярным в Selenium Test Automation. Это широко используемый шаблон проектирования в Selenium для улучшения обслуживания тестов и уменьшения дублирования кода. Объектная модель страницы (POM) может использоваться в любой структуре, такой как модульная, управляемая данными, управляемая ключевыми словами, гибридная платформа и т. д. Объект страницы – это объектно-ориентированный класс, который служит интерфейсом для страницы вашего приложения. Тест (АВТ). Затем тесты используют методы этого класса объекта страницы всякий раз, когда им необходимо взаимодействовать с пользовательским интерфейсом (UI) этой страницы. Преимущество заключается в том, что при изменении пользовательского интерфейса для страницы не нужно менять сами тесты, нужно изменить только код внутри объекта страницы. Впоследствии все изменения для поддержки этого нового пользовательского интерфейса находятся в одном месте.
Что такое Фабрика страниц.
Мы видели, что «Объектная модель страницы» — это способ представления приложения в тестовой среде. Для каждой «страницы» в приложении мы создаем объект страницы для ссылки на «страницу», тогда как «фабрика страниц» — это один из способов реализации «объектной модели страницы».
В чем разница между объектной моделью страницы (POM) и фабрикой страниц:
Объект страницы — это класс, который представляет веб-страницу и содержит функции и элементы.
Фабрика страниц — это способ инициализации веб-элементов, с которыми вы хотите взаимодействовать в объекте страницы, при создании его экземпляра.
Преимущества платформы объектной модели страницы:
- Повторное использование кода. Мы могли бы добиться повторного использования кода, написав код один раз и используя его в разных тестах.
- Удобство сопровождения кода. Существует четкое разделение между тестовым кодом и кодом, специфичным для страницы, таким как локаторы и макет, что упрощает поддержку кода. Код изменяется только в классах объектов страницы, когда происходит изменение пользовательского интерфейса. Это улучшает обслуживание тестов и уменьшает дублирование кода.
- Репозиторий объектов . Каждая страница будет определена как класс Java. Все поля на странице будут определены в интерфейсе как члены. Затем класс реализует интерфейс.
- Удобочитаемость – удобочитаемость благодаря четкому разделению тестового кода и кода страницы
Создание объектной модели страницы с помощью Page Factory в Selenium WebDriver:
Здесь я возьму приложение Gmail, чтобы продемонстрировать реализацию шаблона проектирования объектной модели страницы с помощью Page Factory с использованием Selenium и Java.
Сценарий: введите действительные учетные данные в Facebook “Вход” и перенаправляет на “Главную страницу Facebook“.
Обязательно к прочтению: полное руководство по Selenium WebDriver
Структура моего проекта (Maven Project) выглядит следующим образом:
Выполните следующие шаги, чтобы реализовать шаблон проектирования объектной модели страницы.
Шаг 1:Создание класса TestBase. Здесь мы создаем объект WebDriver, разворачиваем браузер, реализуем ожидания, запускаем URL-адрес и т. д.
В приведенном ниже примере программы я взял браузер Chrome и установил системное свойство для запуска браузера Chrome.
TestBase.java (БАЗОВЫЙ КЛАСС)
1234567891011121314151617181920212223242526272829303132333343536 | пакетные тесты; импортировать java.io.IOException; импортировать java.util.concurrent.TimeUnit; импортировать org.openqa.selenium.WebDriver; импортировать org.openqa.selenium.chrome.ChromeDriver; импортировать org.testng.annotations.AfterSuite; импортировать org.testng.annotations.BeforeSuite; открытый класс TestBase {общедоступный статический драйвер WebDriver = null; @BeforeSuitepublic void initialize() выдает IOException {System.setProperty (“webdriver.chrome.driver”, System.getProperty (“user.dir”) + “\ src\ test \java\drivers\chromedriver.exe”);driver = new ChromeDriver();//Чтобы развернуть браузер driver.manage().window().maximize(); //Неявное ожидание driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);//Чтобы открыть facebook driver.get(“https://www.facebook.com”);}@AfterSuite//Test cleanuppublic void TeardownTest() { TestBase.driver.quit(); } } |
Шаг 2. Создание классов для каждой страницы (например, страницы Вход в Facebook, Входящие FacebookPage) для хранения локаторов элементов и их методов. Обычно мы создаем объекты страницы для всех доступных страниц в AUT. Для каждой страницы мы создаем отдельный класс с конструктором. Определите все локаторы и сохраните их в одном классе. Это позволяет нам повторно использовать локаторы несколькими методами. Это позволяет нам легко обслуживать: если есть какие-либо изменения в пользовательском интерфейсе, мы можем просто изменить их на одной странице.
Здесь я создаю файлы Java (FacebookLoginPage.java и FacebookInboxPage.java) для соответствующих страниц (Страница входа в Facebook и Входящие Facebook).Page) для хранения локаторов элементов и их методов.
FBHomePage.java (веб-страница 1)
1234567891011121314151617181920212223242526272829303132333435363738 | страницы пакета; импортировать org.openqa.selenium.WebDriver;импортировать org.openqa.selenium.WebElement;импортировать org.openqa.selenium.support.FindBy;импортировать org.openqa.selenium.support.How; открытый класс FbHomePage {драйвер WebDriver; public FbHomePage(драйвер WebDriver){ this.driver=driver; } //Использование FindBy для поиска элементов @FindBy(how=How.XPATH, using=”//div[text()='Настройки учетной записи']”) Профиль WebElementDropdown;@FindBy(how=How.XPATH, using=” //text()[.='Выйти']/ancestor::span[1]”) WebElement logoutLink;@FindBy(how=How.XPATH, using=”///div[text()='Добрый день , Тестирование ПО!']”) WebElement loggedInUserNameText; //Определение всех действий пользователя (методов), которые могут быть выполнены на главной странице Facebook //Этот метод для нажатия на раскрывающийся список профиляpublic void clickOnProfileDropdown(){profileDropdown.click();}//Этот метод для нажатия на ссылку выхода из системыpublic void clickOnLogoutLink(){logoutLink.click();}//Этот метод для проверки имени пользователя вошедшего в систему Textpublic String verifyLoggedInUserNameText(){String userName = loggedInUserNameText.getText();return userName;} } |
FBLoginPage.java (веб-страница 2)