Часто бывает, что при увеличении покрываемого функционала, код становится неподдерживаемым. Такая ситуация является результатом большого количества дубликатов кода, например из-за повторного объявления локаторов. Поэтому, если проект часто обновляется, приходится обновлять локаторы по всему коду проекта, а не в одном месте.
Использование Page Object Model позволяет создавать поддерживаемые автоматизированные кейсы и уменьшать количество дублируемого кода. Внедрение этого паттерна позволяет разделить объекты и тестовые скрипты.
Целью автоматизации будет автоматизация входа в Facebook и постинг комментария на своей стене.
Проделайте следующие шаги:
1) Создайте “New Package” и назовите его “pageObjects”, путем нажатия правой кнопкой на проект или выбора New > Package. Далее мы создадим следующие пакеты: Page Objects, Utilities, Test Data, Test Cases and Modular actions. Создавать такие пакеты не обязательно, но это есть рекомендацией, потому что такую структуру легко понять и поддерживать.



2) Создайте новый класс в созданном пакете: New > Class. Назовите его “LoginPage”.


2) Теперь перейдите на страницу входа Facebook и с помощью панели разработки (я использую Chrome) определяем, с помощью каких локаторов удобно определить текст-боксы логина, пароля и кнопку входа.

3) Теперь с помощью статических методов (для их вызова не нужно создавать обьект, а просто вызывать через имя класса) определяем элементы страницы входа. Каждый элемент будет иметь аргумент (driver) и возвращать значение (element).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
package com.selenium.pageObject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import com.gargoylesoftware.htmlunit.ElementNotFoundException; public class LoginPage { /** * WebElement element */ private static WebElement element = null; /** * @param driver * @return let driver load the login page of facebook * @throws InterruptedException */ public static WebDriver loadPage(WebDriver driver) { driver.get("https://facebook.com"); return driver; } /** * @param driver * * @return the textbox username of login form facebook */ public static WebElement txtbx_UserName(WebDriver driver) throws ElementNotFoundException{ element = driver.findElement(By.id("email")); return element; } /** * @param driver * @return the textbox passwork of login form facebook */ public static WebElement txtbx_Password(WebDriver driver) throws ElementNotFoundException{ element = driver.findElement(By.id("pass")); return element; } /** * @param driver * @return the button login of login form facebook */ public static WebElement btn_LogIn(WebDriver driver) throws ElementNotFoundException{ element = driver.findElement(By.id("loginbutton")); return element; } } |
4) Таким же образом, в этом же пакете, создаем новый класс: New > Class. Класс для – Home страницы Facebook.


5) Войдите в Facebook и используя xpath для определения поля для публикации на стене.

6) Создайте статический метод для необходимых элементов для Home страницы.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package com.selenium.pageObject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class HomePage { /** * WebElement */ private static WebElement element; /** * @param driver * @return textbox update status element */ public static WebElement txt_status(WebDriver driver) { element = driver.findElement(By.xpath("//div[@id='pagelet_composer']/div/div/div/form[1]/div[1]/div[2]/div/div/div[2]/div/div/textarea")); return element; } /** * @param driver * @return button to post status */ public static WebElement butt_post(WebDriver driver){ element = driver.findElement(By.xpath("//button[contains(.,'Send')]")); return element; } } |
В данный момент мы закончили создание страниц входа и главной. В следующей статье мы создадим классы и метода для действий по входу и постинга комментария на стене.