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

Post on 16-Apr-2017

9.829 Views

Category:

Education

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

May 2016

1

Senior QA Automation

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

2

Вопросы

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

JDI

3

https://vk.com/jdi_framework4

Проблема 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

Составные элементы - 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

Составные элементы - 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

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

myPage.colors.select("Blue");

myPage.colors.setValue(Colors.BLUE);

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

String value = myPage.colors.getValue();

8

Проблема 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

Таблицы - 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

Таблицы - 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

Таблицы - JDI

myPage.table.getText();

myPage.table.row(1);

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

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

12

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

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

Итоги

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

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

14

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

15

Формы - 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

Формы - Selenium

void submitContactForm (Contact contacts) {

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

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

………submit.click();

}

17

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

Формы - Selenium

18

Формы - Selenium

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

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

19

Формы - 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

Формы - JDI

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

21

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

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

23

Списки составных элементов - 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

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

25

Проблема 6: IFrame

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

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

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

26

IFrame - Selenuim

driver.switchTo.frame(myFrame);

myPage.submit.click();

driver.switchTo.defaultContent();

27

IFrame - JDI

myPage.frame.submit.click();

class MyFrame extends Sections {

@FindBy(css=".submitButton")

public IButton submit;

}

@Frame(css="#frame")

public MyFrame frame;

28

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

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

29

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

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

.until(ExpectedConditions

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

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

30

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

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

31

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

Mobileили

Desktop

32

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

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

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

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

33

Не только Web

@Testpublic void addContactTest() { ContactDetails contacts =

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

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

34

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

UI Objects

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

UI Objects = PageObject

36

Выводы

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

37

Вопросы

https://jdi.epam.com

https://github.com/epam/JDI

https://vk.com/jdi_framework

Stepanovanv_87

Natalia_Grebenshchikova@epam.com38

top related