Хочешь узнать как можно получать удовольствие от автоматических тестов? Как писать сами тесты не тратя время на многочисленные Хелперы и заплатки? И при этом получить действительно качественные понятные тесты с детальными логами и возможностью быстрого рефакторинга? Ты хочешь иметь тесты написанные в едином стиле не только для Web, но и мобильных устройств и даже десктоп приложений? Приходи и мы расскажем как наша новая разработка JDI поможет тебе стать настоящим Джедаем в автоматизации!
7. Шаблон UI Objects
• UI Objects (Epam)
• Пользовательские типизированные элементы для UI (Web, Mobile, Desktop…)
• Реализованные Page Objects (Page, Form, Search, Pagination, Login и т.д..)
• HTML Elements (Yandex)
• Пользовательские типизированные элементы (Button, Label, Table…) для Web
• Page Objects (Selenium)
• Список WebElement-ов (тегов в Html)
• Действия с WebElement-ами
8. @Test
public void menuTest() {
menu.select("Man");
sizes.check("M", "L");
searchButton.click();
Assert.areEquals(results.rows().count(), 4);
Assert.isNotEmpty(results.row("Best Jacket", column("Title")));
}
Пример теста
9. @JPage(url = "http://www.epam.com")
public class BuyPage extends WebPage {
@FindBy(css = “.menu") public Menu menu;
@FindBy(xpath = “//[@class=‘sizes’]") public CheckList sizes;
@FindBy(id = “button") public Button searchButton;
@FindBy(css = “.table") public Table results;
}
Пример UI Object
WebPage
Menu
CheckList
Button
Table
10. @Test
public void menuTest() {
selectInMenu("Man");
checkSizes("M", "L");
clickOnSearchButton();
Assert.areEquals(getResultRowsCount(), 4);
Assert.isEmpty(!getRowFromResults("Best Jacket", "Title"));
}
А как это выглядит на Selenium?
11. @FindBy(css = "") private List<WebElement> menuElements;
@FindBy(css = "") private WebElement menuIsSelected;
@FindBy(css = "") private List<WebElement> sizesElements;
@FindBy(css = "") private WebElement sizesIsChecked;
@FindBy(css = "") private List<WebElement> sizesLabels;
@FindBy(css = "") private WebElement searchButton;
@FindBy(css = "") private List<WebElement> resultsColHeaders;
@FindBy(css = "") private List<WebElement> resultsRowsHeaders;
@FindBy(css = "") private List<WebElement> resultsCellsHeaders;
@FindBy(css = "") private List<WebElement> resultsColumn;
@FindBy(css = "") private List<WebElement> resultsRow;
…
}
А как это выглядит на Selenium?
…
public void selectInMenu(string name) { … }
public void checkSizes(string… sizes) { … }
public void clickOnSearchButton() { … }
public int getResultRowsCount () { … }
public Map<string, string>
getRowFromResults(string expectedValue, string colName) { … }
…
public int getResultsCount() { … }
public boolean isResultPresent(String name) { … }
public WebElement getSomeAttributeForResult(String name)
{ … }
…
public List<WebElement> findAllResultsMatch(String name) {
… }
}
protected WebDriver driver;
public JacketPage(WebDriver driver) {
this.driver = driver
}
public class JacketPage {
13. @JSite(domain = "https://www.epam.com")
public class EpamSite extends WebSite {
@JPage(url = "/")
public static HomePage homePage;
@JPage(url = "/careers", title = "Careers")
public static CareerPage careerPage;
@JPage(url = "/careers/job-listings", title = "Job Listings",
urlCheckType = CONTAIN, titleCheckType = CONTAIN)
public static JobPage jobPage;
...
}
Сайт и страницы
Epam site
Home page
• Navigation Menu : IMenu
• Search : ISearch
• Footer : Footer
• About : Ilink
• Contacts: IText
Career page
• JobFilter
• Keywords
• Category
• City
Job page
• …
WebSite.init(EpamSite.class);WebSite.init(EpamSite.class);
14. @JPage(url = "http://www.epam.com")
public class BuyPage extends WebPage {
@FindBy(css = “.menu") public Menu menu;
@FindBy(xpath = “//[@class=‘sizes’]") public CheckList sizes;
@FindBy(id = “button") public Button searchButton;
@FindBy(css = “.table") public Table results;
@Frame(css = “.store") public Store store;
}
Пример UI Object
16. @Test(dataProvider = “attendees”)
public void menuTest(Attendee attendee) {
searchFilter.fill(attendee);
checkSuggestionsContains(attendee);
searchFilter.search(attendee);
assertEquals(results.rows().count(), 1);
results.row(attendee.name, column(“Name”))
addCVForm.submit(attendee.cv);
checkCVInDB(attendee.cv);
previewForm.verify(attendee);
}
EDT (Entities driven testing)
loginForm.login(user);
purchase.cancel(wear);
experiment.publish(experiment);
creditForm.save(order.data);
…
public class User {
public String name;
public String password;
public User(String name, String password) {
this.name = name;
this.password = password;
}
}
17. • JDI – фреймворк реализующий подход UI Objects
• Большое количество элементов (более 30) включая сложные (с 10-ками
действий)
• Иерархическая инициализация UI Objects
• Умеет работать с Фреймами
• Поддерживает EDT
UI Objects
24. Уменьшить затрат (время/деньги) на написание тестов в целом и
создание модели сайта в частности в разы (если не на порядки)*
Уменьшение затрат на поддержку тестов
Читабельность тестов (UI Objects)
Уменьшение времени поиска багов
Читабельность тестов (UI Objects)
Логирование
Репортинг
PROFIT!!!
* Объектная модель экономия до 80% времени
Написание тестов около 50% времени
Затраты на поддержку тестов экономия до 70%
Поиск багов экономия 30-50%
* К вам приходит босс и говорит: Саша, у нас тут начинается новый проект, мы хотим чтобы в нем была автоматизация вперед
* Вы после долгих уговоров и объяснений зачем проекту нужна автоматизация получаете добро. С чего начать? (важно не подвести, сделать автоматизацию быстро и качественно)
Долгий проект, ручное тестирование , большая регрессия: заказчик понял, что так больше нельзя и попросил вас наладить регрессию (и так большая загрузка - важно быстро начать получать пользу – уменьшить время регрессии)
Epam – крупная компания в которой работает более 17 тысяч человек по всем миру. Только в Питере уже более чем 1200 и каждый год мы только растем
У нас множество разных проектов от Биоинформатики и Генной инженерии до разработки магазинов, трейдинговых систем и банковских сервисов
Задачи тоже разные от создания корпоративных сайтов до разработки высокопроизводительных кластеров и высоконагруенных систем
Все это обилие проектов заставляет нас оптимизировать затраты на старт новых проектов (поскольку новые проекты стартуют довольно часто)
Давайте работать вместе. Если вы начинающий тест инженер или у вас нет под рукой своего хорошего фреймворка для UI, то используя наш Фреймворк вы можете серьезно сократить затраты на начало тестирования. И сразу написать гораздо более качественные тесты
Если вы сделали свой классный фреймворк, и считаете что он лучше наше и конечно стремитесь им поделится, или вы просто считает, что какие-то важные области не охвачены фреймворком. Мы будем рады сотрудничеству. Посмотреть на ваши идеи и внедрить их к себе либо реализовать ваши пожелания
В компании Epam
Встроенная поддержка работы с фреймами
* К вам приходит босс и говорит: Саша, у нас тут начинается новый проект, мы хотим чтобы в нем была автоматизация вперед
* Вы после долгих уговоров и объяснений зачем проекту нужна автоматизация получаете добро. С чего начать? (важно не подвести, сделать автоматизацию быстро и качественно)
* Долгий проект, ручное тестирование , большая регрессия: заказчик понял, что так больше нельзя и попросил вас наладить регрессию (и так большая загрузка - важно быстро начать получать пользу – уменьшить время регрессии)