secon'2016. Иовлев Роман, jdi is ui automation future
TRANSCRIPT
![Page 1: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/1.jpg)
EPAM JDI UI TEST AUTOMATION FRAMEWORK
QA Conference
March 2016
![Page 2: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/2.jpg)
Chief QA AutomationРаботал руководителем отдела
тестированияБолее 11 лет в тестировании из них 9 в
автоматизации
Роман Иовлев
![Page 3: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/3.jpg)
•Новый проект (сверху)
•Новый проект (снизу)
•Долгий проект без автоматизации
Автоматизация
![Page 4: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/4.jpg)
UI Автоматизация
Виды тестирования Виды UI тестирования
UI Web
![Page 5: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/5.jpg)
Just Develop It together
![Page 6: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/6.jpg)
UI OBJECTS
![Page 7: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/7.jpg)
Шаблон 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-ами
![Page 8: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/8.jpg)
@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"))); }
Пример теста
![Page 9: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/9.jpg)
@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
WebPageMenuCheckListButtonTable
![Page 10: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/10.jpg)
@Test public void menuTest() { selectInMenu("Man"); checkSizes("M", "L");
clickOnSearchButton(); Assert.areEquals(getResultRowsCount(), 4); Assert.isEmpty(!getRowFromResults("Best Jacket", "Title")); }
А как это выглядит на Selenium?
![Page 11: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/11.jpg)
@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 {
![Page 12: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/12.jpg)
Web, Mobile, Desktop…
C# .Net
Java
JDI.UITestFramework
Web-Selenium<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-web</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>
Desktop-Sikuli<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-gui</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>
Mobile-Appium<dependency> <groupId>com.epam.jdi</groupId> <artifactId>jdi-uitest-mobile</artifactId> <version>1.0.2-SNAPSHOT </version></dependency>
![Page 13: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/13.jpg)
@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 siteHome 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);
![Page 14: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/14.jpg)
@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
![Page 15: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/15.jpg)
public class AddCVForm extends Form<Attendee> { @FindBy(css = “.first-name“) private ITextField name;@FindBy(css = “.last-name“) private ITextField lastName;@FindBy(css = “.email“) private ITextField email;@FindBy(css = “.file-upload“) private RFileInput cv;@FindBy(css = “.comment-input“) private ITextArea comment;
@FindBy(xpath = “//*[.='Submit']“) private IButton submit;@FindBy(xpath = “//*[.='Cancel']“) private IButton cancel;
}
Формы
![Page 16: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/16.jpg)
@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; }}
![Page 17: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/17.jpg)
• JDI – фреймворк реализующий подход UI Objects
• Большое количество элементов (более 30) включая сложные (с 10-ками действий)
• Иерархическая инициализация UI Objects• Умеет работать с Фреймами• Поддерживает EDT
UI Objects
![Page 18: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/18.jpg)
ИНТЕГРАЦИЯКАСТОМИЗАЦИЯСТАБИЛИЗАЦИЯ
![Page 19: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/19.jpg)
“Easy things should be easy, and hard things should be possible” Larry Wall (c)
Концепция
![Page 20: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/20.jpg)
Модульная структура
![Page 21: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/21.jpg)
Наши друзья
![Page 22: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/22.jpg)
Кастомизация
Конкретное действие
Новый тип элемента
Все действия всех элементов
![Page 23: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/23.jpg)
Стабилизация
![Page 24: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/24.jpg)
Уменьшить затрат (время/деньги) на написание тестов в целом и создание модели сайта в частности в разы (если не на порядки)*
Уменьшение затрат на поддержку тестовЧитабельность тестов (UI Objects)
Уменьшение времени поиска баговЧитабельность тестов (UI Objects)ЛогированиеРепортинг
PROFIT!!!
* Объектная модель экономия до 80% времени Написание тестов около 50% времени Затраты на поддержку тестов экономия до 70% Поиск багов экономия 30-50%
![Page 25: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/25.jpg)
Уменьшение числа false-positive/negativeСтабилизацияЧитабельность тестов (UI Objects)
Любой UI (Web, Mobile, Desktop)
Поддержка Java и C#
Удовольствие от автоматизации
PROFIT!!!
![Page 26: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/26.jpg)
Планы
No effort performance testing
Tests execution statistic
UI view testing module
Web plugin for fast PageObjects recording
![Page 27: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/27.jpg)
Ожидания
![Page 28: SECON'2016. Иовлев Роман, JDI is UI Automation Future](https://reader033.vdocuments.mx/reader033/viewer/2022042611/58d135601a28abe3298b6335/html5/thumbnails/28.jpg)
Вопросы?
https://jdi.epam.com
https://github.com/epam/JDI
https://vk.com/jdi_framework
roman.Iovlev