jdi: Автоматизировать проще, чем кажется

38
JDI: Автоматизировать п роще, чем кажется SQA Days JDI: Автоматизир овать проще, чем кажется May 2016 1

Upload: sqalab

Post on 16-Apr-2017

9.829 views

Category:

Education


3 download

TRANSCRIPT

Page 1: JDI: Автоматизировать проще, чем кажется

JDI: Автоматизировать проще, чем кажетсяSQA Days

JDI: Автоматизировать проще, чем кажется

May 2016

1

Page 2: JDI: Автоматизировать проще, чем кажется

Senior QA Automation

Гребенщикова Наталья

2

Page 3: JDI: Автоматизировать проще, чем кажется

Вопросы

https://jdi.epam.comhttps://vk.com/jdi_frameworkhttps://github.com/epam/JDI

JDI

3

Page 4: JDI: Автоматизировать проще, чем кажется

https://vk.com/jdi_framework4

Page 5: JDI: Автоматизировать проще, чем кажется

Проблема 1: Составные элементы

@FindBy(css=".colors-dropdown .caret")WebElement arrow;

@FindBy (css=".colors-dropdown . dd-menu")List<WebElement> list;

@FindBy (css=".colors-dropdown [type='text']")WebElement value;

public void selectColor (String color){ arrow.click(); for (WebElement el : list) if (el.getText.equals(color)) { el.click(); break; } arrow.click();}

public String getSelectedColor(){ return value.getAttribute(“value”);}

5

Page 6: JDI: Автоматизировать проще, чем кажется

Составные элементы - Selenium

@FindBy(css=".color-dropdown .caret")WebElement arrow;

@FindBy (css=".color-dropdown. dd-menu")List<WebElement> list;

@FindBy (css=".color-dropdown [type='text']")WebElement value;

@FindBy(css=".color-dropdown .caret")WebElement arrow;

@FindBy (css=".color-dropdown. dd-menu")List<WebElement> list;

@FindBy (css=".color-dropdown [type='text']")WebElement value;

@FindBy(css=".color-dropdown .caret")WebElement arrow;

@FindBy (css=".color-dropdown. dd-menu")List<WebElement> list;

@FindBy (css=".color-dropdown [type='text']")WebElement value;

public void selectColor (String color){ arrow.click(); for (WebElement el : list) if (el.getText.equals(color)) { el.click(); break; } arrow.click();}

public String getSelectedColor(){ return value.getAttribute(“value”);}public void selectColor (String color){ arrow.click(); for (WebElement el : list) if (el.getText.equals(color)) { el.click(); break; } arrow.click();}

public String getSelectedColor(){ return value.getAttribute(“value”);}

public void selectColor (String color){ arrow.click(); for (WebElement el : list) if (el.getText.equals(color)) { el.click(); break; } arrow.click();}

public String getSelectedColor(){ return value.getAttribute(“value”);} 6

Page 7: JDI: Автоматизировать проще, чем кажется

Составные элементы - JDI

class MyPage extends WebPage {

@FindBy(class = "colors-dropdown") public IDropDown<Colors> colors = new Dropdown<>( By.className("сarret"), By.cssSelector("li span"), By.cssSelector("[type=‘text’]"));

@FindBy(class = " sizes-dropdown") public MyDropdown<Sizes> sizes;

}

7

Page 8: JDI: Автоматизировать проще, чем кажется

Составные элементы - JDI

myPage.colors.select("Blue");

myPage.colors.setValue(Colors.BLUE);

*А еще можно работать с Enum

String value = myPage.colors.getValue();

8

Page 9: JDI: Автоматизировать проще, чем кажется

Проблема 2: Таблицы

<div class="table"><ul class="rows">

<li class=“row"><div>cell1</div><div>cell2</div>

</li><li class="row">

<div>cell3</div><div>cell4</div>

</li></ul>

</div>9

Page 10: JDI: Автоматизировать проще, чем кажется

Таблицы - Selenium

@FindBy(css=".root .table")WebElement table;

@FindBy (css=".root .li .row")List<WebElement> row;

@FindBy (css=".root .li .column")List<WebElement> column;

public int getColumnsCount(){//TODO};public int getRowdCount(){//TODO};public String getRowValue (int index){//TODO};public String getCellvalue (int index){//TODO};public int searchRowContain(){//TODO};public int searchRowMatch(){//TODO};public String myGetRowValue (int index){//TODO};public String myGetCellvalue (int index){//TODO};public int myGetColumnCount(){//TODO};public int myGetRowCount(){//TODO};public String myGetRowValue (int index){//TODO};public String myGetCellvalue (int index){//TODO};public int myGetColumnCount(){//TODO};public int myGetRowCount(){//TODO};…public String myGetCellvalue (int index){//TODO};public void cellClick (int x, int y) {

driver.findElement(By.xpath(format("/tr[%s]/td[%s]"),x, y)).click();}

10

Page 11: JDI: Автоматизировать проще, чем кажется

Таблицы - JDI

<div class="table"><ul class="rows">

<li class=“row"><div>cell1</div><div>cell2</div>

</li><li class="row">

<div>cell3</div><div>cell4</div>

</li></ul>

</div>

class MyPage extends WebPage {

@FindBy(css = ".root") ITable table = new Table( By.xpath(".//li[%s]"), By.xpath(".//li//div[%s]"));}

@FindBy(css = “table”)ITable table;

11

Page 12: JDI: Автоматизировать проще, чем кажется

Таблицы - JDI

myPage.table.getText();

myPage.table.row(1);

myPage.table.cell(1, 2).getText();

myPage.table.cellsMatch(".*JDI.*", column("Name"));

12

Page 13: JDI: Автоматизировать проще, чем кажется

Проблема 3: сложные ячейки

myPage.table.cell(1, 2).get(MyCell.class).seeMore.click(); 13

Page 14: JDI: Автоматизировать проще, чем кажется

Итоги

• Существенное уменьшение количество кода• Экономия времени тест инженера• Тесты пишутся быстро• Меньше вероятность ошибки• Проще поддержка тестов

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

14

Page 15: JDI: Автоматизировать проще, чем кажется

Проблема 4 - Формы

15

Page 16: JDI: Автоматизировать проще, чем кажется

Формы - Selenium

public class MyPage{

@FindBy(css = ".root [jdi-name=Name]") public WebElement name; @FindBy(css = ".root [jdi-name=LastName]") public WebElement lastName;

……… @FindBy(css = ".root [jdi-name=description]") public WebElement description; ……… @FindBy(css = ".root [jdi-name=submit]") public WebElement submit;}

16

Page 17: JDI: Автоматизировать проще, чем кажется

Формы - Selenium

void submitContactForm (Contact contacts) {

name.sendKeys(contacts.name);lastName.sendKeys(contacts.lastName);

………description.sendKeys(contacts.description);

………submit.click();

}

17

Page 18: JDI: Автоматизировать проще, чем кажется

myPage.submitContactForm(new Contact(“John”, “Dow”, “desk”));

Формы - Selenium

18

Page 19: JDI: Автоматизировать проще, чем кажется

Формы - Selenium

- А таких методов будет много: fill, check, verify…

- И форм таких тоже может быть много…

19

Page 20: JDI: Автоматизировать проще, чем кажется

Формы - JDI

class ContactForm extends Form<Contact> {

@FindBy(css = "[jdi-name=Name]") public ITextField name;

@FindBy(css = "[jdi-name=LastName]") public ITextField lastName;

@FindBy(css = "[jdi-name=description]") public ITextArea description;

@FindBy(css = "[jdi-name=submit]") public IButton submit;};

class Contact{

String name;

String lastName;

String description;

};

20

Page 21: JDI: Автоматизировать проще, чем кажется

Формы - JDI

@FindBy(css = "main form")public ContactForm contactForm;

21

Page 22: JDI: Автоматизировать проще, чем кажется

myPage.contactForm.fill(Contact.DEFAULT_CONTACT);

myPage.contactForm.submit(new Contact());

myPage.contactForm.check

(new Contact(“John”, “Dow”, “desk”));

myPage.contactForm.verify(Contact.DEFAULT_CONTACT);

class Contact{ String name;

String lastName; String description;

};

EDT - Entities Driven Testing

22

Page 23: JDI: Автоматизировать проще, чем кажется

Проблема 5: Списки составных элементов

23

Page 24: JDI: Автоматизировать проще, чем кажется

Списки составных элементов - JDI

class MyPage{

@FindBy (css = ".petSection")

List<CatSection> catSections;

@FindBy (css = ".searchResults")

Elements<SearchBlock> searchResults;}

myPage.catSections.get(2).price.getText();

myPage.searchResults.get(“шоколадный красавчик”).price.getText();

24

Page 25: JDI: Автоматизировать проще, чем кажется

Но и это еще не все!

25

Page 26: JDI: Автоматизировать проще, чем кажется

Проблема 6: IFrame

<iframe id=‘frame’><div class=‘button submitButton’>

<span>Submit</span></div>

</iframe>myPage.submit.click();

26

Page 27: JDI: Автоматизировать проще, чем кажется

IFrame - Selenuim

driver.switchTo.frame(myFrame);

myPage.submit.click();

driver.switchTo.defaultContent();

27

Page 28: JDI: Автоматизировать проще, чем кажется

IFrame - JDI

myPage.frame.submit.click();

class MyFrame extends Sections {

@FindBy(css=".submitButton")

public IButton submit;

}

@Frame(css="#frame")

public MyFrame frame;

28

Page 29: JDI: Автоматизировать проще, чем кажется

Проблема 7: Стабильность

Где моя кнопка??

29

Page 30: JDI: Автоматизировать проще, чем кажется

Стабильность - Selenium

WebElement myDynamicElement = (new WebDriverWait(driver, 10))

.until(ExpectedConditions

.presenceOfElementLocated(By.id("myDynamicElement")));

try { Thread.sleep(1000);} catch (InterruptedException e) { e.printStackTrace();}

30

Page 31: JDI: Автоматизировать проще, чем кажется

Стабильность - JDI

В JDI не нужно про это думать

31

Page 32: JDI: Автоматизировать проще, чем кажется

Проблема 8: Не только Web

Mobileили

Desktop

32

Page 33: JDI: Автоматизировать проще, чем кажется

Не только Web – Интерфейсы - JDI

Интерфейсы – взгляд на элементы с точки зрения пользователя

myButton.click();myButton.getText();

public interface IButton { void click(); String getText();}

33

Page 34: JDI: Автоматизировать проще, чем кажется

Не только Web

@Testpublic void addContactTest() { ContactDetails contacts =

new ContactDetails("Irina", "222-22-22");

startPage.addContact.click(); addContactForm.save(contacts);}

34

Page 35: JDI: Автоматизировать проще, чем кажется

public void login(){ homePage.contactLogo.click(); homePage.userName.input("epam"); homePage.password.input("1234"); homePage.submit.click();}

Не только Web – Desktop - Sikuli

public class HomePage extends Page {

@JLocation(filePath = "HomePage/password.png") public TextField password;

@JLocation(filePath = "HomePage/submit.png") public Button submit; @JLocation(filePath = "HomePage/contactLogo.png") public Button contactLogo;

@JLocation(filePath = "HomePage/userName.png") public TextField userName;}

35

Page 36: JDI: Автоматизировать проще, чем кажется

UI Objects

+ Типизированные элементы+ Типизированные Объекты (Секции)+ Элементы-интерфейсы

UI Objects = PageObject

36

Page 37: JDI: Автоматизировать проще, чем кажется

Выводы

• Меньше кода• Экономия времени• Увеличение производительности• Меньше вероятность ошибки• Проще поддержка тестов• Легко адаптировать под свой проект• Мультиплатформенность• Логирование

37

Page 38: JDI: Автоматизировать проще, чем кажется

Вопросы

https://jdi.epam.com

https://github.com/epam/JDI

https://vk.com/jdi_framework

Stepanovanv_87

[email protected]