Фреймворк html elements
DESCRIPTION
Доклад Александра Толмачева на конференции SQA Days-12, 30 ноября-1 декабря, МинскTRANSCRIPT
![Page 1: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/1.jpg)
Фреймворк Html Elements или как удобно
взаимодействовать с веб-интерфейсами в тестах
Александр Толмачев
![Page 2: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/2.jpg)
Yandex QA Tools
2
![Page 3: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/3.jpg)
Yandex QA Tools
2
![Page 4: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/4.jpg)
3
![Page 5: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/5.jpg)
3
WebDriver
![Page 6: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/6.jpg)
3
WebDriver
JavaБонус
![Page 7: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/7.jpg)
4
Эволюция
![Page 8: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/8.jpg)
5
Пример теста
![Page 9: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/9.jpg)
5
Пример теста
SQA Days
![Page 10: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/10.jpg)
5
Пример теста
SQA Days
![Page 11: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/11.jpg)
6
Пример теста
![Page 12: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/12.jpg)
6
Пример теста
![Page 13: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/13.jpg)
7
Первый тест
![Page 14: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/14.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 15: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/15.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 16: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/16.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 17: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/17.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 18: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/18.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 19: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/19.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 20: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/20.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 21: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/21.jpg)
8
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { driver.findElement(By.id("text")).sendKeys("SQA Days"); driver.findElement(By.className("b-form-button__input")).click(); assertTrue(driver.findElement(By.className("b-serp-list")). isDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 22: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/22.jpg)
9
Недостатки
![Page 23: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/23.jpg)
9
Читаемость
Переиспользование
Поддержка
Недостатки
![Page 24: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/24.jpg)
10
Page Object
![Page 25: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/25.jpg)
11
Страница
![Page 26: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/26.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 27: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/27.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 28: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/28.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 29: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/29.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 30: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/30.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 31: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/31.jpg)
12
public class SearchPage { @FindBy(id = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; public SearchPage(WebDriver driver) { PageFactory.initElements(driver, this); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Page Object
![Page 32: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/32.jpg)
13
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); private SearchPage searchPage = new SearchPage(driver); private SearchResultsPage searchResultsPage = new SearchResultsPage(driver); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertTrue(searchResultsPage.isSearchResultsBlockDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 33: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/33.jpg)
13
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); private SearchPage searchPage = new SearchPage(driver); private SearchResultsPage searchResultsPage = new SearchResultsPage(driver); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertTrue(searchResultsPage.isSearchResultsBlockDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 34: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/34.jpg)
13
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); private SearchPage searchPage = new SearchPage(driver); private SearchResultsPage searchResultsPage = new SearchResultsPage(driver); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertTrue(searchResultsPage.isSearchResultsBlockDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 35: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/35.jpg)
13
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); private SearchPage searchPage = new SearchPage(driver); private SearchResultsPage searchResultsPage = new SearchResultsPage(driver); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertTrue(searchResultsPage.isSearchResultsBlockDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 36: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/36.jpg)
13
public class SearchResultsTest { private WebDriver driver = new FirefoxDriver(); private SearchPage searchPage = new SearchPage(driver); private SearchResultsPage searchResultsPage = new SearchResultsPage(driver); @Before public void loadPage() { driver.get("http://www.yandex.ru"); } @Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertTrue(searchResultsPage.isSearchResultsBlockDisplayed()); } @After public void closeDriver() { driver.quit(); } }
Код теста
![Page 37: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/37.jpg)
14
Дублирование
![Page 38: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/38.jpg)
14
Дублирование
![Page 39: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/39.jpg)
14
Дублирование
![Page 40: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/40.jpg)
14
Дублирование
![Page 41: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/41.jpg)
14
Дублирование
![Page 42: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/42.jpg)
14
Дублирование
![Page 43: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/43.jpg)
14
Дублирование
![Page 44: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/44.jpg)
14
Дублирование
![Page 45: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/45.jpg)
15
Загромождение
![Page 46: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/46.jpg)
Загромождениеpublic class AutoHomePage { @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "twoweeks") private WebElement rememberMeCheckBox; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
}
16
![Page 47: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/47.jpg)
Загромождениеpublic class AutoHomePage { @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "twoweeks") private WebElement rememberMeCheckBox; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
}
16
![Page 48: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/48.jpg)
Загромождениеpublic class AutoHomePage { @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "twoweeks") private WebElement rememberMeCheckBox; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; @FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton;
@FindBy(name = "text") private WebElement requestInput; @FindBy(xpath = "//input[@type='submit']") private WebElement searchButton; @FindBy(name = "login") private WebElement loginInput; @FindBy(name = "passwd") private WebElement passwordInput; @FindBy(xpath = "//div[@class='b-domik__button']//input") private WebElement loginButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); } public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } public void login(String login, String password) { loginInput.sendKeys(login); passwordInput.sendKeys(password); loginButton.click(); }
}
16
![Page 49: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/49.jpg)
17
Отсутствие типизации
![Page 50: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/50.jpg)
17
Отсутствие типизации
![Page 51: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/51.jpg)
17
Select selectByIndex()
selectByValue()
...
Отсутствие типизации
![Page 52: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/52.jpg)
public class PageWithSelect { @FindBy(xpath = "select-xpath") private WebElement select; public PageWithSelect(WebDriver driver) { PageFactory.initElements(driver, this); } private Select getSelect() { return new Select(select); } // Other methods using getSelect() method}
18
Отсутствие типизации
![Page 53: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/53.jpg)
public class PageWithSelect { @FindBy(xpath = "select-xpath") private WebElement select; public PageWithSelect(WebDriver driver) { PageFactory.initElements(driver, this); } private Select getSelect() { return new Select(select); } // Other methods using getSelect() method}
18
Отсутствие типизации
![Page 54: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/54.jpg)
public class PageWithSelect { @FindBy(xpath = "select-xpath") private WebElement select; public PageWithSelect(WebDriver driver) { PageFactory.initElements(driver, this); } private Select getSelect() { return new Select(select); } // Other methods using getSelect() method}
18
Отсутствие типизации
![Page 55: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/55.jpg)
18
Отсутствие типизации
public class PageWithSelect { @FindBy(xpath = "select-xpath") private Select select; public PageWithSelect(WebDriver driver) { PageFactory.initElements(driver, this); } // Other methods using select }
![Page 56: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/56.jpg)
18
Отсутствие типизации
public class PageWithSelect { @FindBy(xpath = "select-xpath") private Select select; public PageWithSelect(WebDriver driver) { PageFactory.initElements(driver, this); } // Other methods using select }
![Page 57: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/57.jpg)
19
Недостатки
![Page 58: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/58.jpg)
19
Дублирование кода
Недостатки
![Page 59: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/59.jpg)
19
Дублирование кода
Загромождение
Недостатки
![Page 60: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/60.jpg)
19
Дублирование кода
Отсутствие типизации
Загромождение
Недостатки
![Page 61: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/61.jpg)
20
![Page 62: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/62.jpg)
20
Html Elements
![Page 63: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/63.jpg)
21
Блоки элементов
Типизация элементов
Библиотека матчеров
![Page 64: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/64.jpg)
22
Блоки элементов
Типизация элементов
Библиотека матчеров
![Page 65: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/65.jpg)
23
Структура страницы
![Page 66: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/66.jpg)
23
Структура страницы
![Page 67: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/67.jpg)
24
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Поисковая форма
![Page 68: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/68.jpg)
24
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Поисковая форма
Блок
![Page 69: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/69.jpg)
24
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Поисковая форма
Блок
Селектор блока
![Page 70: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/70.jpg)
24
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Поисковая форма
Блок
Селектор блока
Элементы
![Page 71: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/71.jpg)
24
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Поисковая форма
Блок
Селектор блока
Элементы
Логика взаимодействия
![Page 72: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/72.jpg)
25
@Block(@FindBy(className = "b-domik")) public class AuthorizationForm extends HtmlElement { @FindBy(name = "login") WebElement loginFiled; @FindBy(name = "passwd") WebElement passwordFiled; @FindBy(className = "b-form-button__input") WebElement submitButton; public void login(String login, String password) { loginFiled.sendKeys(login); passwordFiled.sendKeys(password); submitButton.click(); }}
Форма авторизации
![Page 73: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/73.jpg)
26
public class SearchPage { private SearchArrow searchArrow; private AuthorizationForm authorizationForm; // ...
public SearchPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public void login(String login, String password) { authorizationForm.login(login, password); } // ... }
Главная страница
![Page 74: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/74.jpg)
26
public class SearchPage { private SearchArrow searchArrow; private AuthorizationForm authorizationForm; // ...
public SearchPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public void login(String login, String password) { authorizationForm.login(login, password); } // ... }
Главная страница
![Page 75: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/75.jpg)
26
public class SearchPage { private SearchArrow searchArrow; private AuthorizationForm authorizationForm; // ...
public SearchPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public void login(String login, String password) { authorizationForm.login(login, password); } // ... }
Главная страница
![Page 76: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/76.jpg)
26
public class SearchPage { private SearchArrow searchArrow; private AuthorizationForm authorizationForm; // ...
public SearchPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public void login(String login, String password) { authorizationForm.login(login, password); } // ... }
Главная страница
![Page 77: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/77.jpg)
26
public class SearchPage { private SearchArrow searchArrow; private AuthorizationForm authorizationForm; // ...
public SearchPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public void login(String login, String password) { authorizationForm.login(login, password); } // ... }
Главная страница
![Page 78: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/78.jpg)
27
Структура
![Page 79: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/79.jpg)
28
Контекст поиска
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
![Page 80: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/80.jpg)
28
Контекст поиска
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Селектор блока
Отностиельные селекторы
![Page 81: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/81.jpg)
29
public class SearchResultsPage { @FindBy(className = "b-search") private SearchArrow searchArrow; private SearchResultsBlock searchResultsBlock; public SearchResultsPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public boolean isSearchResultsBlockDisplayed() { return searchResultsBlock.isDisplayed(); } }
Контекст поиска
![Page 82: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/82.jpg)
29
public class SearchResultsPage { @FindBy(className = "b-search") private SearchArrow searchArrow; private SearchResultsBlock searchResultsBlock; public SearchResultsPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public boolean isSearchResultsBlockDisplayed() { return searchResultsBlock.isDisplayed(); } }
Контекст поискаПереопределение
селектора
![Page 83: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/83.jpg)
30
Блоки элементов
Типизация элементов
Библиотека матчеров
![Page 84: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/84.jpg)
31
Типизация
![Page 85: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/85.jpg)
31
SQA
Типизация
![Page 86: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/86.jpg)
32
SQA
Типизация
![Page 87: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/87.jpg)
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton;
@FindBy(xpath = "//div[@class='i-popup__content']//li") private List<WebElement> suggest; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); }
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.get(suggestItemNumber).click(); } } 33
Поисковая форма
![Page 88: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/88.jpg)
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton;
@FindBy(xpath = "//div[@class='i-popup__content']//li") private List<WebElement> suggest; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); }
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.get(suggestItemNumber).click(); } }
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private TextInput requestInput; @FindBy(className = "b-form-button__input") private Button searchButton; @FindBy(className = "i-popup__content") private Suggest suggest;
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); }
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.selectByIndex(suggestItemNumber); } } 33
Поисковая форма
![Page 89: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/89.jpg)
34
Ленивая инициализация
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private TextInput requestInput; @FindBy(className = "b-form-button__input") private Button searchButton; @FindBy(className = "i-popup__content") private Suggest suggest;
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.selectByIndex(suggestItemNumber); } }
![Page 90: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/90.jpg)
34
Ленивая инициализация
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private TextInput requestInput; @FindBy(className = "b-form-button__input") private Button searchButton; @FindBy(className = "i-popup__content") private Suggest suggest;
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.selectByIndex(suggestItemNumber); } }
Поиск при обращении
Элемент
![Page 91: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/91.jpg)
35
Text Input
Button
CheckBox
Radio
Select
Стандартные элементы
![Page 92: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/92.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 93: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/93.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 94: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/94.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 95: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/95.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 96: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/96.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 97: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/97.jpg)
36
Добавление элементовpublic class Suggest extends TypifiedElement { public Suggest(WebElement wrappedElement) { super(wrappedElement); } private List<WebElement> getItems() { return getWrappedElement().findElements(By.xpath("//li")); } public void selectByIndex(int itemIndex) { getItems().get(itemIndex).click(); } public void selectByValue(String itemValue) { for (WebElement item : getItems()) { if (itemValue.equals(item.getText())) { item.click(); return; } } throw new NoSuchElementException(); } }
![Page 98: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/98.jpg)
37
Конструктор
![Page 99: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/99.jpg)
37
Конструктор
Типизированные элементы
![Page 100: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/100.jpg)
37
Конструктор
Типизированные элементы
Page-объект
![Page 101: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/101.jpg)
38
Блоки элементов
Типизация элементов
Библиотека матчеров
![Page 102: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/102.jpg)
39
Матчеры
![Page 103: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/103.jpg)
39
Матчеры
assertThat(audience, isPayingAttention())
![Page 104: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/104.jpg)
39
Матчеры
assertThat(audience, isPayingAttention())
assertThat(audience, is(not(sleeping())))
![Page 105: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/105.jpg)
40
Наши матчеры
![Page 106: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/106.jpg)
40
assertThat(element, exists())
Наши матчеры
![Page 107: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/107.jpg)
40
assertThat(element, exists())
assertThat(element, hasText(“SQA Days”))
Наши матчеры
![Page 108: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/108.jpg)
40
assertThat(element, exists())
assertThat(element, hasText(“SQA Days”))
assertThat(checkBox, isSelected())
Наши матчеры
![Page 109: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/109.jpg)
40
assertThat(element, exists())
assertThat(element, hasText(“SQA Days”))
assertThat(checkBox, isSelected())
assertThat(radio, hasSelectedButton(3))
Наши матчеры
![Page 110: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/110.jpg)
41
@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertThat(searchResultsPage.getSearchResultsBlock(), exists()); }
Матчеры в тестах
![Page 111: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/111.jpg)
42
@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertThat(searchResultsPage.getSearchResultsBlock(), both(exists()).and(isDisplayed())); }
Матчеры в тестах
![Page 112: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/112.jpg)
43
Матчеры в тестах@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); String message = String.format( "Элемент '%s' должен присутсвовать на странице", searchResultsPage.getSearchResultsBlock() ); assertThat(message, searchResultsPage.getSearchResultsBlock(), exists()); }
![Page 113: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/113.jpg)
43
Матчеры в тестах@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); String message = String.format( "Элемент '%s' должен присутсвовать на странице", searchResultsPage.getSearchResultsBlock() ); assertThat(message, searchResultsPage.getSearchResultsBlock(), exists()); }
Assert: Элемент ‘[FirefoxDriver: firefox on MAC (e63b162c-853a-a243-999e-2266c9d52499)]’ должен присутсвовать на странице
![Page 114: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/114.jpg)
@Name("Форма поиска") @Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @Name("Поисковая строка") @FindBy(id = "text") private TextInput requestInput; @Name("Кнопка 'Haйти'") @FindBy(className = "b-form-button__input") private Button searchButton;
@FindBy(className = "i-popup__content") private Suggest suggest; // ...
44
Именование элементов
![Page 115: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/115.jpg)
@Name("Форма поиска") @Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @Name("Поисковая строка") @FindBy(id = "text") private TextInput requestInput; @Name("Кнопка 'Haйти'") @FindBy(className = "b-form-button__input") private Button searchButton;
@FindBy(className = "i-popup__content") private Suggest suggest; // ...
44
Именование элементов
Имя по аннотации
![Page 116: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/116.jpg)
@Name("Форма поиска") @Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @Name("Поисковая строка") @FindBy(id = "text") private TextInput requestInput; @Name("Кнопка 'Haйти'") @FindBy(className = "b-form-button__input") private Button searchButton;
@FindBy(className = "i-popup__content") private Suggest suggest; // ...
44
Именование элементов
Имя по аннотации
Имя поназванию поля
![Page 117: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/117.jpg)
45
public class SearchResultsPage { @FindBy(className = "b-search") private SearchArrow searchArrow; @Name("Блок результатов поиска") private SearchResultsBlock searchResultsBlock; public SearchResultsPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public SearchResultsBlock getSearchResultsBlock() { return searchResultsBlock; } }
Именование элементов
![Page 118: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/118.jpg)
45
public class SearchResultsPage { @FindBy(className = "b-search") private SearchArrow searchArrow; @Name("Блок результатов поиска") private SearchResultsBlock searchResultsBlock; public SearchResultsPage(WebDriver driver) { HtmlElementLoader.populatePageObject(this, driver); } public void searchFor(String request) { searchArrow.searchFor(request); } public SearchResultsBlock getSearchResultsBlock() { return searchResultsBlock; } }
Именование элементовПереопределение
имени
![Page 119: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/119.jpg)
46
Имена в тестах@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); String message = String.format( "Элемент '%s' должен присутсвовать на странице", searchResultsPage.getSearchResultsBlock() ); assertThat(message, searchResultsPage.getSearchResultsBlock(), exists()); }
Assert: Элемент “Блок результатов поиска” должен присутствовать на странице
![Page 120: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/120.jpg)
47
Блоки элементов
Типизация элементов
Библиотека матчеров
![Page 121: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/121.jpg)
Жизнь стала такой48
![Page 122: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/122.jpg)
49
Будущее
![Page 123: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/123.jpg)
50
Библиотека элементов
![Page 124: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/124.jpg)
50
Библиотека элементов
![Page 125: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/125.jpg)
51
Динамические селекторы@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private TextInput requestInput; @FindBy(className = "b-form-button__input") private Button searchButton; @FindBy(className = "i-popup__content") private Suggest suggest;
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); }
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.selectByIndex(suggestItemNumber); } }
![Page 126: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/126.jpg)
51
Динамические селекторы@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private TextInput requestInput; @FindBy(className = "b-form-button__input") private Button searchButton; @FindBy(className = "i-popup__content") private Suggest suggest;
public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); }
public void searchBySuggest(String request, int suggestItemNumber) { requestInput.sendKeys(request); suggest.selectByIndex(suggestItemNumber); } }
Статические селекторы
![Page 127: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/127.jpg)
52
Динамические селекторы
![Page 128: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/128.jpg)
53
Динамические селекторы
![Page 129: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/129.jpg)
54
Понятные логи
![Page 130: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/130.jpg)
54
1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...
Понятные логи
![Page 131: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/131.jpg)
54
1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...
2.Кликаю на элемент “Кнопка ‘Найти’”...
Понятные логи
![Page 132: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/132.jpg)
54
1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...
2.Кликаю на элемент “Кнопка ‘Найти’”...
3.Проверяю наличие элемента “Блок результатов поиска”...
Понятные логи
![Page 133: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/133.jpg)
54
1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...
2.Кликаю на элемент “Кнопка ‘Найти’”...
3.Проверяю наличие элемента “Блок результатов поиска”...
Assert: Элемент “Блок результатов поиска” должен присутствовать на странице
Понятные логи
![Page 134: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/134.jpg)
55
Генерация блоков
![Page 135: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/135.jpg)
55
Страница
Генерация блоков
![Page 136: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/136.jpg)
55
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
@Block(@FindBy(className = "b-head-search")) public class SearchArrow extends HtmlElement { @FindBy(id = "text") private WebElement requestInput; @FindBy(className = "b-form-button__input") private WebElement searchButton; public void searchFor(String request) { requestInput.sendKeys(request); searchButton.click(); } }
Страница Блоки
Генерация блоков
![Page 137: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/137.jpg)
56
И другое многое будет там
![Page 138: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/138.jpg)
57
![Page 139: Фреймворк Html Elements](https://reader033.vdocuments.pub/reader033/viewer/2022051013/5478ede7b37959822b8b45e5/html5/thumbnails/139.jpg)
57
https://github.com/yandex-qatools/htmlelements