SlideShare ist ein Scribd-Unternehmen logo
1 von 94
Downloaden Sie, um offline zu lesen
Чего не хватает
в PageObject?

Кошелев Артём
Руководитель группы тестирования

Я.Субботник в Санкт-Петербурге, 1 декабря 2012
2
h"ps://github.com/yandex-­‐qatools/htmlelements	
  
3
4
5
6
7
8
public class HomePageTest {!
        !@Test!
        !public void testSearchResults() {!
        !    !WebDriver driver = new FirefoxDriver();!
    !
        !    !driver.get(“http://market.yandex.ru/”);!
        !    !driver.findElement(By.css(“input#search-input”))!
        !    !    !.sendKeys(“чикипибарум”);!
        !    !driver.findElement(By.css(“td.b-search__button”))!
        !    !    !.click();!
    !
        !    !assertThat(“Не найдено что ничего не найдено”,!
        !   !driver.findElement(By.css(“p.no-found”)).getText(),!
        !    !is(“Заданным условиям не соответствует ни один товар”));!
        !}!




9
public class HomePageTest {!
         !@Test!
         !public void testSearchResults() {!
         !    !WebDriver driver = new FirefoxDriver();!
     !
         !    !driver.get(“http://market.yandex.ru/”);!
         !    !driver.findElement(By.css(“input#search-input”))!
         !    !    !.sendKeys(“чикипибарум”);!
         !    !driver.findElement(By.css(“td.b-search__button”))!
         !    !    !.click();!
     !
         !    !assertThat(“Не найдено что ничего не найдено”,!
         !   !driver.findElement(By.css(“p.no-found”)).getText(),!
         !    !is(“Заданным условиям не соответствует ни один товар”));!
         !}!




10
public class HomePageTest {!
         !@Test!
         !public void testSearchResults() {!
         !    !WebDriver driver = new FirefoxDriver();!
     !
         !    !driver.get(“http://market.yandex.ru/”);!
         !    !driver.findElement(By.css(“input#search-input”))!
         !    !    !.sendKeys(“чикипибарум”);!
         !    !driver.findElement(By.css(“td.b-search__button”))!
         !    !    !.click();!
     !
         !    !assertThat(“Не найдено что ничего не найдено”,!
         !   !driver.findElement(By.css(“p.no-found”)).getText(),!
         !    !is(“Заданным условиям не соответствует ни один товар”));!
         !}!




11
public class HomePageTest {!
         !@Test!
         !public void testSearchResults() {!
         !    !WebDriver driver = new FirefoxDriver();!
     !
         !    !driver.get(“http://market.yandex.ru/”);!
         !    !driver.findElement(By.css(“input#search-input”))!
         !    !    !.sendKeys(“чикипибарум”);!
         !    !driver.findElement(By.css(“td.b-search__button”))!
         !    !    !.click();!
     !
         !    !assertThat(“Не найдено что ничего не найдено”,!
         !   !driver.findElement(By.css(“p.no-found”)).getText(),!
         !    !is(“Заданным условиям не соответствует ни один товар”));!
         !}!




12
public class HomePageTest {!
         !@Test!
         !public void testSearchResults() {!
         !    !WebDriver driver = new FirefoxDriver();!
     !
         !    !driver.get(“http://market.yandex.ru/”);!
         !    !driver.findElement(By.css(“input#search-input”))!
         !    !    !.sendKeys(“чикипибарум”);!
         !    !driver.findElement(By.css(“td.b-search__button”))!
         !    !    !.click();!
     !
         !    !assertThat(“Не найдено что ничего не найдено”,!
         !   !driver.findElement(By.css(“p.no-found”)).getText(),!
         !    !is(“Заданным условиям не соответствует ни один товар”));!
         !}!




13
public class HomePageTest {!
         !@Test!
         !public void testSearchResults() {!
         !    !WebDriver driver = new FirefoxDriver();!
     !
         !    !driver.get(“http://market.yandex.ru/”);!
         !    !driver.findElement(By.css(“input#search-input”))!
         !    !    !.sendKeys(“чикипибарум”);!
         !    !driver.findElement(By.css(“td.b-search__button”))!
         !    !    !.click();!
     !
         !    !assertThat(“Не найдено что ничего не найдено”,!
         !   !driver.findElement(By.css(“p.no-found”)).getText(),!
         !    !is(“Заданным условиям не соответствует ни один товар”));!
         !}!




14
15
16
17
18
19
20
public class HomePage extends PageObject {!
        !private WebDriver driver;!
     !
        !@FindBy(css = “input#search-input”)!
        !private WebElement searchInput;!
     !
        !@FindBy(css = “td.b-search__button”)!
        !private WebElement searchButton;!
     !
        !public HomePage(WebDriver driver) {!
        !   !return PageFactory.initElements(driver,
     this.class);!
        !}!
     ……!
21
public class HomePage extends PageObject {!
        !private WebDriver driver;!
     !
        !@FindBy(css = “input#search-input”)!
        !private WebElement searchInput;!
     !
        !@FindBy(css = “td.b-search__button”)!
        !private WebElement searchButton;!
     !
        !public HomePage(WebDriver driver) {!
        !   !return PageFactory.initElements(driver,
     this.class);!
        !}!
     ……!
22
public class HomePage extends PageObject {!
        !private WebDriver driver;!
     !
        !@FindBy(css = “input#search-input”)!
        !private WebElement searchInput;!
     !
        !@FindBy(css = “td.b-search__button”)!
        !private WebElement searchButton;!
     !
        !public HomePage(WebDriver driver) {!
        !   !return PageFactory.initElements(driver,
     this.class);!
        !}!
     ……!
23
public class HomePage extends PageObject {!
        !private WebDriver driver;!
     !
        !@FindBy(css = “input#search-input”)!
        !private WebElement searchInput;!
     !
        !@FindBy(css = “td.b-search__button”)!
        !private WebElement searchButton;!
     !
        !public HomePage(WebDriver driver) {!
        !   !return PageFactory.initElements(driver,
     this.class);!
        !}!
     ……!
24
public class HomePage extends PageObject {!
        !……!
     !
        !public SearchResultsPage lookFor(String item) {!
        !   !searchInput.type(item);!
        !   !searchButton.click();!
        !   !return new SearchResultsPage(driver);!
        !}!
     !
        !public CatalogModelsPage clickOnElectronicLink() {!
        !   !electronikLink.click();!
        !   !return new CatalogModelsPage(driver);!
        !}!
     !
     ……   !!

25
public class HomePage extends PageObject {!
        !……!
     !
        !public SearchResultsPage lookFor(String item) {!
        !   !searchInput.type(item);!
        !   !searchButton.click();!
        !   !return new SearchResultsPage(driver);!
        !}!
     !
        !public CatalogModelsPage clickOnElectronicLink() {!
        !   !electronikLink.click();!
        !   !return new CatalogModelsPage(driver);!
        !}!
     !
     …… !!
26
public class HomePage extends PageObject {!
        !……!
     !
        !public SearchResultsPage lookFor(String item) {!
        !   !searchInput.type(item);!
        !   !searchButton.click();!
        !   !return new SearchResultsPage(driver);!
        !}!
     !
        !public CatalogModelsPage clickOnElectronicLink() {!
        !   !electronikLink.click();!
        !   !return new CatalogModelsPage(driver);!
        !}!
     !
     …… !!
27
HomePage onHomePage;!
     SearchResultsPage onResultsPage;!
     !
     @Test!
     public void canSearch() {!
        !onHomePage = new HomePage(driver)!
        !   !   !   !    !.open();!
        !onResultsPage = onHomePage!
        !   !   !   !    !   !.lookFor(“чикипибарум”);!
     !
        !assertThat(onResultsPage.errorMessage(),
        !   !   !is(“Заданным условиям не соответствует
                                        ни один товар.”));!
     }!

28
HomePage onHomePage;!
     SearchResultsPage onResultsPage;!
     !
     @Test!
     public void canSearch() {!
        !onHomePage = new HomePage(driver)!
        !   !   !   !    !.open();!
        !onResultsPage = onHomePage!
        !   !   !   !    !   !.lookFor(“чикипибарум”);!
     !
        !assertThat(onResultsPage.errorMessage(),
        !   !   !is(“Заданным условиям не соответствует
                                        ни один товар.”));!
     }!

29
HomePage onHomePage;!
     SearchResultsPage onResultsPage;!
     !
     @Test!
     public void canSearch() {!
        !onHomePage = new HomePage(driver)!
        !   !   !   !    !.open();!
        !onResultsPage = onHomePage!
        !   !   !   !    !   !.lookFor(“чикипибарум”);!
     !
        !assertThat(onResultsPage.errorMessage(),
        !   !   !is(“Заданным условиям не соответствует
                                        ни один товар.”));!
     }!

30
31
32
33
public class HomePage extends PageObject {!
     !
        !@FindBy(css = “input#search-input”)!
        !private WebElement searchInput;!
     !
        !@FindBy(css = “td.b-search__button”)!
        !private WebElement searchButton;!
     !




34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement
     {!
      ! !@FindBy(…)!
      ! !private WebElement searchInput;!
     !
      ! !@FindBy(…)!
      ! !private WebElement searchButton;!
     }!


51
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement
     {!
      ! !@FindBy(…)!
      ! !private WebElement searchInput;!
     !
      ! !@FindBy(…)!
      ! !private WebElement searchButton;!
     }!


52
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement
     {!
      ! !@FindBy(…)!
      ! !private WebElement searchInput;!
     !
      ! !@FindBy(…)!
      ! !private WebElement searchButton;!
     }!


53
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement
     {!
      ! !@FindBy(…)!
      ! !private WebElement searchInput;!
     !
      ! !@FindBy(…)!
      ! !private WebElement searchButton;!
     }!


54
55
@Block(@FindBy(…))!
     public class SearchBlock extends HtmlElement {!
     !
      ! !private SearchArrow arrow;!
      ! !private SearchTabs tabs;!
     !
     }!




56
public class HomePage extends PageObject {!
     !
     !
      !public SearchArrow searchArrow;!
     !
     }!




57
public class HomePage extends PageObject {!
     !
      !@FindBy(xpath = “//different_locator”)!
      !public SearchArrow searchArrow;!
     !
     }!




58
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement {!
      ! !@FindBy(…)!
      ! !private WebElement searchInput;!
     !
      ! !@FindBy(…)!
      ! !private WebElement searchButton;!
     }!



59
60
@Block(@FindBy(…))!
     public class SearchArrow extends HtmlElement {!
      ! !@FindBy(…)!
      ! !private TextInput searchInput;!
     !
      ! !@FindBy(…)!
      ! !private Button searchButton;!
     }!



61
62
public class Link extends TypifiedElement {!
     !
      !public Link(WebElement wrappedElement) {!
      ! !super(wrappedElement)!
      !}!
     !
     }!




63
public class Link extends TypifiedElement {!
     !
      !……!
     !
      !public void click() {…}!
     !
      !public String getReferecnce() {…}!
     !
      !public String getText(){…}!
     !
     !
     }!
64
65
66
public class Range extends TypifiedElement {!
     !
      !public Range(WebElement wrappedElement) {!
      ! !super(wrappedElement)!
      !}!
     !
     }!




67
public class Range extends TypifiedElement {!
      !@FindBy(…)!
      !WebElement min;!
      !@FindBy(…)!
      !WebElement max;!
      !!
      !public setRange(int min, int max) {…}!
     !
      !public setMin(int min) {…}!
     !
        public setMax(int max) {…}!
     }!
68
69
70
71
72
73
public class HomePage extends PageObject {!
     …!
     !
        !@FindBy(css = “div.suggest”)!
        !private WebElement suggest;!
     !
     …!
     }!


74
75
@Block(@FindBy(xpath = “div[@class*=‘search__arr’]”))!
     @Name(“Поисковая стрела”)!
     public class SearchArrow extends HtmlElement {!
        !   !@FindBy(xpath = “.//input”)!
        !   !@Name(“Поисковый запрос”)!
        !   !private TextInput searchInput;!
     !
        !   !@FindBy(xpath = “.//input[@type=‘submit’]”)!
        !   !private Button searchButton;!
     }!

76
@Block(@FindBy(xpath = “div[@class*=‘search__arr’]”))!
     @Name(“Поисковая стрела”)!
     public class SearchArrow extends HtmlElement {!
        !   !@FindBy(xpath = “.//input”)!
        !   !@Name(“Поисковый запрос”)!
        !   !private TextInput searchInput;!
     !
        !   !@FindBy(xpath = “.//input[@type=‘submit’]”)!
        !   !private Button searchButton;!
     }!

77
78
assertThat(actual, Matcher);!




79
assertThat(str, is(“Everybody dance now!”));!
     !
     assertThat(year, lessThan(1999));!
     !
     assertThat(year, both(lessThan(1999)).!
        !  !   !   !   !and(greaterThan(1990)));!




80
81
@FindBy(…)!
     private WebElement firstSuggest;!
     !
     assertThat(firstSuggest, hasText(“canon”));!




82
@FindBy(…)!
     private WebElement firstSuggest;!
     !
     assertThat(firstSuggest, hasText(“canon”));!




83
@FindBy(…)!
     private List<WebElement> suggest;!
     !
     assertThat(suggest, hasItem(hasText(“canon”)));!




84
85
<dependency>!

     <groupId>ru.yandex.qatools.htmlelements</groupId>!
     <artifactId>htmlelements-java</artifactId>!
     <version>1.8</version>!
     !
     </dependency>!




86
87
88
89
90
91
92
h"ps://github.com/yandex-­‐qatools/htmlelements	
  
93
Кошелев Артём

Руководитель группы
тестирования



artkoshelev@yandex-team.ru
art_koshelev@

Weitere ähnliche Inhalte

Mehr von Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

Mehr von Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Артём Кошелев "Чего не хватает в PageObject?"

  • 1. Чего не хватает в PageObject? Кошелев Артём Руководитель группы тестирования Я.Субботник в Санкт-Петербурге, 1 декабря 2012
  • 2. 2
  • 4. 4
  • 5. 5
  • 6. 6
  • 7. 7
  • 8. 8
  • 9. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 9
  • 10. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 10
  • 11. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 11
  • 12. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 12
  • 13. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 13
  • 14. public class HomePageTest {! !@Test! !public void testSearchResults() {! ! !WebDriver driver = new FirefoxDriver();! ! ! !driver.get(“http://market.yandex.ru/”);! ! !driver.findElement(By.css(“input#search-input”))! ! ! !.sendKeys(“чикипибарум”);! ! !driver.findElement(By.css(“td.b-search__button”))! ! ! !.click();! ! ! !assertThat(“Не найдено что ничего не найдено”,! ! !driver.findElement(By.css(“p.no-found”)).getText(),! ! !is(“Заданным условиям не соответствует ни один товар”));! !}! 14
  • 15. 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 19. 19
  • 20. 20
  • 21. public class HomePage extends PageObject {! !private WebDriver driver;! ! !@FindBy(css = “input#search-input”)! !private WebElement searchInput;! ! !@FindBy(css = “td.b-search__button”)! !private WebElement searchButton;! ! !public HomePage(WebDriver driver) {! ! !return PageFactory.initElements(driver, this.class);! !}! ……! 21
  • 22. public class HomePage extends PageObject {! !private WebDriver driver;! ! !@FindBy(css = “input#search-input”)! !private WebElement searchInput;! ! !@FindBy(css = “td.b-search__button”)! !private WebElement searchButton;! ! !public HomePage(WebDriver driver) {! ! !return PageFactory.initElements(driver, this.class);! !}! ……! 22
  • 23. public class HomePage extends PageObject {! !private WebDriver driver;! ! !@FindBy(css = “input#search-input”)! !private WebElement searchInput;! ! !@FindBy(css = “td.b-search__button”)! !private WebElement searchButton;! ! !public HomePage(WebDriver driver) {! ! !return PageFactory.initElements(driver, this.class);! !}! ……! 23
  • 24. public class HomePage extends PageObject {! !private WebDriver driver;! ! !@FindBy(css = “input#search-input”)! !private WebElement searchInput;! ! !@FindBy(css = “td.b-search__button”)! !private WebElement searchButton;! ! !public HomePage(WebDriver driver) {! ! !return PageFactory.initElements(driver, this.class);! !}! ……! 24
  • 25. public class HomePage extends PageObject {! !……! ! !public SearchResultsPage lookFor(String item) {! ! !searchInput.type(item);! ! !searchButton.click();! ! !return new SearchResultsPage(driver);! !}! ! !public CatalogModelsPage clickOnElectronicLink() {! ! !electronikLink.click();! ! !return new CatalogModelsPage(driver);! !}! ! …… !! 25
  • 26. public class HomePage extends PageObject {! !……! ! !public SearchResultsPage lookFor(String item) {! ! !searchInput.type(item);! ! !searchButton.click();! ! !return new SearchResultsPage(driver);! !}! ! !public CatalogModelsPage clickOnElectronicLink() {! ! !electronikLink.click();! ! !return new CatalogModelsPage(driver);! !}! ! …… !! 26
  • 27. public class HomePage extends PageObject {! !……! ! !public SearchResultsPage lookFor(String item) {! ! !searchInput.type(item);! ! !searchButton.click();! ! !return new SearchResultsPage(driver);! !}! ! !public CatalogModelsPage clickOnElectronicLink() {! ! !electronikLink.click();! ! !return new CatalogModelsPage(driver);! !}! ! …… !! 27
  • 28. HomePage onHomePage;! SearchResultsPage onResultsPage;! ! @Test! public void canSearch() {! !onHomePage = new HomePage(driver)! ! ! ! ! !.open();! !onResultsPage = onHomePage! ! ! ! ! ! !.lookFor(“чикипибарум”);! ! !assertThat(onResultsPage.errorMessage(), ! ! !is(“Заданным условиям не соответствует ни один товар.”));! }! 28
  • 29. HomePage onHomePage;! SearchResultsPage onResultsPage;! ! @Test! public void canSearch() {! !onHomePage = new HomePage(driver)! ! ! ! ! !.open();! !onResultsPage = onHomePage! ! ! ! ! ! !.lookFor(“чикипибарум”);! ! !assertThat(onResultsPage.errorMessage(), ! ! !is(“Заданным условиям не соответствует ни один товар.”));! }! 29
  • 30. HomePage onHomePage;! SearchResultsPage onResultsPage;! ! @Test! public void canSearch() {! !onHomePage = new HomePage(driver)! ! ! ! ! !.open();! !onResultsPage = onHomePage! ! ! ! ! ! !.lookFor(“чикипибарум”);! ! !assertThat(onResultsPage.errorMessage(), ! ! !is(“Заданным условиям не соответствует ни один товар.”));! }! 30
  • 31. 31
  • 32. 32
  • 33. 33
  • 34. public class HomePage extends PageObject {! ! !@FindBy(css = “input#search-input”)! !private WebElement searchInput;! ! !@FindBy(css = “td.b-search__button”)! !private WebElement searchButton;! ! 34
  • 35. 35
  • 36. 36
  • 37. 37
  • 38. 38
  • 39. 39
  • 40. 40
  • 41. 41
  • 42. 42
  • 43. 43
  • 44. 44
  • 45. 45
  • 46. 46
  • 47. 47
  • 48. 48
  • 49. 49
  • 50. 50
  • 51. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private WebElement searchInput;! ! ! !@FindBy(…)! ! !private WebElement searchButton;! }! 51
  • 52. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private WebElement searchInput;! ! ! !@FindBy(…)! ! !private WebElement searchButton;! }! 52
  • 53. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private WebElement searchInput;! ! ! !@FindBy(…)! ! !private WebElement searchButton;! }! 53
  • 54. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private WebElement searchInput;! ! ! !@FindBy(…)! ! !private WebElement searchButton;! }! 54
  • 55. 55
  • 56. @Block(@FindBy(…))! public class SearchBlock extends HtmlElement {! ! ! !private SearchArrow arrow;! ! !private SearchTabs tabs;! ! }! 56
  • 57. public class HomePage extends PageObject {! ! ! !public SearchArrow searchArrow;! ! }! 57
  • 58. public class HomePage extends PageObject {! ! !@FindBy(xpath = “//different_locator”)! !public SearchArrow searchArrow;! ! }! 58
  • 59. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private WebElement searchInput;! ! ! !@FindBy(…)! ! !private WebElement searchButton;! }! 59
  • 60. 60
  • 61. @Block(@FindBy(…))! public class SearchArrow extends HtmlElement {! ! !@FindBy(…)! ! !private TextInput searchInput;! ! ! !@FindBy(…)! ! !private Button searchButton;! }! 61
  • 62. 62
  • 63. public class Link extends TypifiedElement {! ! !public Link(WebElement wrappedElement) {! ! !super(wrappedElement)! !}! ! }! 63
  • 64. public class Link extends TypifiedElement {! ! !……! ! !public void click() {…}! ! !public String getReferecnce() {…}! ! !public String getText(){…}! ! ! }! 64
  • 65. 65
  • 66. 66
  • 67. public class Range extends TypifiedElement {! ! !public Range(WebElement wrappedElement) {! ! !super(wrappedElement)! !}! ! }! 67
  • 68. public class Range extends TypifiedElement {! !@FindBy(…)! !WebElement min;! !@FindBy(…)! !WebElement max;! !! !public setRange(int min, int max) {…}! ! !public setMin(int min) {…}! ! public setMax(int max) {…}! }! 68
  • 69. 69
  • 70. 70
  • 71. 71
  • 72. 72
  • 73. 73
  • 74. public class HomePage extends PageObject {! …! ! !@FindBy(css = “div.suggest”)! !private WebElement suggest;! ! …! }! 74
  • 75. 75
  • 76. @Block(@FindBy(xpath = “div[@class*=‘search__arr’]”))! @Name(“Поисковая стрела”)! public class SearchArrow extends HtmlElement {! ! !@FindBy(xpath = “.//input”)! ! !@Name(“Поисковый запрос”)! ! !private TextInput searchInput;! ! ! !@FindBy(xpath = “.//input[@type=‘submit’]”)! ! !private Button searchButton;! }! 76
  • 77. @Block(@FindBy(xpath = “div[@class*=‘search__arr’]”))! @Name(“Поисковая стрела”)! public class SearchArrow extends HtmlElement {! ! !@FindBy(xpath = “.//input”)! ! !@Name(“Поисковый запрос”)! ! !private TextInput searchInput;! ! ! !@FindBy(xpath = “.//input[@type=‘submit’]”)! ! !private Button searchButton;! }! 77
  • 78. 78
  • 80. assertThat(str, is(“Everybody dance now!”));! ! assertThat(year, lessThan(1999));! ! assertThat(year, both(lessThan(1999)).! ! ! ! ! !and(greaterThan(1990)));! 80
  • 81. 81
  • 82. @FindBy(…)! private WebElement firstSuggest;! ! assertThat(firstSuggest, hasText(“canon”));! 82
  • 83. @FindBy(…)! private WebElement firstSuggest;! ! assertThat(firstSuggest, hasText(“canon”));! 83
  • 84. @FindBy(…)! private List<WebElement> suggest;! ! assertThat(suggest, hasItem(hasText(“canon”)));! 84
  • 85. 85
  • 86. <dependency>! <groupId>ru.yandex.qatools.htmlelements</groupId>! <artifactId>htmlelements-java</artifactId>! <version>1.8</version>! ! </dependency>! 86
  • 87. 87
  • 88. 88
  • 89. 89
  • 90. 90
  • 91. 91
  • 92. 92