141
Фреймворк Html Elements или как удобно взаимодействовать с веб-интерфейсами в тестах А лександр Толмачев

Фреймворк Html Elements

  • Upload
    sqalab

  • View
    1.193

  • Download
    2

Embed Size (px)

DESCRIPTION

Доклад Александра Толмачева на конференции SQA Days-12, 30 ноября-1 декабря, Минск

Citation preview

Page 1: Фреймворк Html Elements

Фреймворк Html Elements или как удобно

взаимодействовать с веб-интерфейсами в тестах

Александр Толмачев

Page 2: Фреймворк Html Elements

Yandex QA Tools

2

Page 3: Фреймворк Html Elements

Yandex QA Tools

2

Page 4: Фреймворк Html Elements

3

Page 5: Фреймворк Html Elements

3

WebDriver

Page 6: Фреймворк Html Elements

3

WebDriver

JavaБонус

Page 7: Фреймворк Html Elements

4

Эволюция

Page 8: Фреймворк Html Elements

5

Пример теста

Page 9: Фреймворк Html Elements

5

Пример теста

SQA Days

Page 10: Фреймворк Html Elements

5

Пример теста

SQA Days

Page 11: Фреймворк Html Elements

6

Пример теста

Page 12: Фреймворк Html Elements

6

Пример теста

Page 13: Фреймворк Html Elements

7

Первый тест

Page 14: Фреймворк Html Elements

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

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

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

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

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

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

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

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

9

Недостатки

Page 23: Фреймворк Html Elements

9

Читаемость

Переиспользование

Поддержка

Недостатки

Page 24: Фреймворк Html Elements

10

Page Object

Page 25: Фреймворк Html Elements

11

Страница

Page 26: Фреймворк Html Elements

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

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

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

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

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

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

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

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

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

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

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

14

Дублирование

Page 38: Фреймворк Html Elements

14

Дублирование

Page 39: Фреймворк Html Elements

14

Дублирование

Page 40: Фреймворк Html Elements

14

Дублирование

Page 41: Фреймворк Html Elements

14

Дублирование

Page 42: Фреймворк Html Elements

14

Дублирование

Page 43: Фреймворк Html Elements

14

Дублирование

Page 44: Фреймворк Html Elements

14

Дублирование

Page 45: Фреймворк Html Elements

15

Загромождение

Page 46: Фреймворк Html Elements

Загромождение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

Загромождение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

Загромождение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

17

Отсутствие типизации

Page 50: Фреймворк Html Elements

17

Отсутствие типизации

Page 51: Фреймворк Html Elements

17

Select selectByIndex()

selectByValue()

...

Отсутствие типизации

Page 52: Фреймворк Html Elements

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

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

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

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

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

19

Недостатки

Page 58: Фреймворк Html Elements

19

Дублирование кода

Недостатки

Page 59: Фреймворк Html Elements

19

Дублирование кода

Загромождение

Недостатки

Page 60: Фреймворк Html Elements

19

Дублирование кода

Отсутствие типизации

Загромождение

Недостатки

Page 61: Фреймворк Html Elements

20

Page 62: Фреймворк Html Elements

20

Html Elements

Page 63: Фреймворк Html Elements

21

Блоки элементов

Типизация элементов

Библиотека матчеров

Page 64: Фреймворк Html Elements

22

Блоки элементов

Типизация элементов

Библиотека матчеров

Page 65: Фреймворк Html Elements

23

Структура страницы

Page 66: Фреймворк Html Elements

23

Структура страницы

Page 67: Фреймворк Html Elements

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

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

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

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

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

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

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

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

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

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

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

27

Структура

Page 79: Фреймворк Html Elements

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

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

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

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

30

Блоки элементов

Типизация элементов

Библиотека матчеров

Page 84: Фреймворк Html Elements

31

Типизация

Page 85: Фреймворк Html Elements

31

SQA

Типизация

Page 86: Фреймворк Html Elements

32

SQA

Типизация

Page 87: Фреймворк Html Elements

@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

@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

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

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

35

Text Input

Button

CheckBox

Radio

Select

Стандартные элементы

Page 92: Фреймворк Html Elements

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

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

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

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

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

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

37

Конструктор

Page 99: Фреймворк Html Elements

37

Конструктор

Типизированные элементы

Page 100: Фреймворк Html Elements

37

Конструктор

Типизированные элементы

Page-объект

Page 101: Фреймворк Html Elements

38

Блоки элементов

Типизация элементов

Библиотека матчеров

Page 102: Фреймворк Html Elements

39

Матчеры

Page 103: Фреймворк Html Elements

39

Матчеры

assertThat(audience, isPayingAttention())

Page 104: Фреймворк Html Elements

39

Матчеры

assertThat(audience, isPayingAttention())

assertThat(audience, is(not(sleeping())))

Page 105: Фреймворк Html Elements

40

Наши матчеры

Page 106: Фреймворк Html Elements

40

assertThat(element, exists())

Наши матчеры

Page 107: Фреймворк Html Elements

40

assertThat(element, exists())

assertThat(element, hasText(“SQA Days”))

Наши матчеры

Page 108: Фреймворк Html Elements

40

assertThat(element, exists())

assertThat(element, hasText(“SQA Days”))

assertThat(checkBox, isSelected())

Наши матчеры

Page 109: Фреймворк Html Elements

40

assertThat(element, exists())

assertThat(element, hasText(“SQA Days”))

assertThat(checkBox, isSelected())

assertThat(radio, hasSelectedButton(3))

Наши матчеры

Page 110: Фреймворк Html Elements

41

@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertThat(searchResultsPage.getSearchResultsBlock(), exists()); }

Матчеры в тестах

Page 111: Фреймворк Html Elements

42

@Test public void shouldSeeSearchResultsWhenLookingUp() { searchPage.searchFor("SQA Days"); assertThat(searchResultsPage.getSearchResultsBlock(), both(exists()).and(isDisplayed())); }

Матчеры в тестах

Page 112: Фреймворк Html Elements

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

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

@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

@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

@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

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

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

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

47

Блоки элементов

Типизация элементов

Библиотека матчеров

Page 121: Фреймворк Html Elements

Жизнь стала такой48

Page 122: Фреймворк Html Elements

49

Будущее

Page 123: Фреймворк Html Elements

50

Библиотека элементов

Page 124: Фреймворк Html Elements

50

Библиотека элементов

Page 125: Фреймворк Html Elements

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

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

52

Динамические селекторы

Page 128: Фреймворк Html Elements

53

Динамические селекторы

Page 129: Фреймворк Html Elements

54

Понятные логи

Page 130: Фреймворк Html Elements

54

1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...

Понятные логи

Page 131: Фреймворк Html Elements

54

1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...

2.Кликаю на элемент “Кнопка ‘Найти’”...

Понятные логи

Page 132: Фреймворк Html Elements

54

1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...

2.Кликаю на элемент “Кнопка ‘Найти’”...

3.Проверяю наличие элемента “Блок результатов поиска”...

Понятные логи

Page 133: Фреймворк Html Elements

54

1.Ввожу в элемент “Поисковая строка” текст “SQA Days”...

2.Кликаю на элемент “Кнопка ‘Найти’”...

3.Проверяю наличие элемента “Блок результатов поиска”...

Assert: Элемент “Блок результатов поиска” должен присутствовать на странице

Понятные логи

Page 134: Фреймворк Html Elements

55

Генерация блоков

Page 135: Фреймворк Html Elements

55

Страница

Генерация блоков

Page 136: Фреймворк Html Elements

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

56

И другое многое будет там

Page 138: Фреймворк Html Elements

57

Page 139: Фреймворк Html Elements

57

https://github.com/yandex-qatools/htmlelements

Page 140: Фреймворк Html Elements

57

https://github.com/yandex-qatools/htmlelements

[email protected]

Page 141: Фреймворк Html Elements

[email protected]

@alex_tolmachev

Cпасибо