From 7b4355f55ad30307e0bc92245895ba7d2f6263a2 Mon Sep 17 00:00:00 2001 From: Prokop Dmitry <18467259+JasperJhons@users.noreply.github.com> Date: Mon, 28 Aug 2017 12:43:58 +0300 Subject: [PATCH] Add ns predicate strategy (#11) * optimize clear field step * add iOSNSPredicate strategy * fix tests * fix tests --- .../ru/colibri/ui/core/builders/ElementBuilder.java | 8 +++++++- .../java/ru/colibri/ui/core/fields/Element.java | 6 ++++++ .../java/ru/colibri/ui/core/fields/IElement.java | 2 ++ .../ru/colibri/ui/settings/general/PagesLoader.java | 7 +++++-- .../ru/colibri/ui/settings/ios/IOSByFactory.java | 4 ++++ .../ui/settings/general/PagesLoaderTest.java | 6 ++++++ .../colibri/ui/settings/ios/TestIOSByFactory.java | 13 +++++++++++++ src/test/resources/loadFiles/badPage3.csv | 3 +++ 8 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/loadFiles/badPage3.csv diff --git a/src/main/java/ru/colibri/ui/core/builders/ElementBuilder.java b/src/main/java/ru/colibri/ui/core/builders/ElementBuilder.java index 272e12e..64511b9 100644 --- a/src/main/java/ru/colibri/ui/core/builders/ElementBuilder.java +++ b/src/main/java/ru/colibri/ui/core/builders/ElementBuilder.java @@ -9,6 +9,7 @@ public class ElementBuilder { private String contentDesc; private String text; private String xpath; + private String nsPredicate; private boolean specific; public ElementBuilder withName(String name) { @@ -41,7 +42,12 @@ public ElementBuilder withXPath(String xpath) { return this; } + public ElementBuilder withNSPredicate(String nsPredicate) { + this.nsPredicate = nsPredicate; + return this; + } + public IElement please() { - return new Element(name, contentDesc, id, text, xpath, specific); + return new Element(name, contentDesc, id, text, xpath, nsPredicate, specific); } } diff --git a/src/main/java/ru/colibri/ui/core/fields/Element.java b/src/main/java/ru/colibri/ui/core/fields/Element.java index 173cbfc..7e764f4 100644 --- a/src/main/java/ru/colibri/ui/core/fields/Element.java +++ b/src/main/java/ru/colibri/ui/core/fields/Element.java @@ -13,6 +13,7 @@ public class Element implements IElement { private String id; private String text; private String xpath; + private String nsPredicate; private boolean specific; @Override @@ -44,5 +45,10 @@ public String getText() { public String getXpath() { return xpath; } + + @Override + public String getNSPredicate() { + return nsPredicate; + } } diff --git a/src/main/java/ru/colibri/ui/core/fields/IElement.java b/src/main/java/ru/colibri/ui/core/fields/IElement.java index 3a44002..cf62458 100644 --- a/src/main/java/ru/colibri/ui/core/fields/IElement.java +++ b/src/main/java/ru/colibri/ui/core/fields/IElement.java @@ -12,5 +12,7 @@ public interface IElement { String getXpath(); + String getNSPredicate(); + boolean isSpecific(); } diff --git a/src/main/java/ru/colibri/ui/settings/general/PagesLoader.java b/src/main/java/ru/colibri/ui/settings/general/PagesLoader.java index 2026345..7fa734a 100644 --- a/src/main/java/ru/colibri/ui/settings/general/PagesLoader.java +++ b/src/main/java/ru/colibri/ui/settings/general/PagesLoader.java @@ -49,7 +49,7 @@ public IPage loadPageFromFile(File file) { } private IElement getIElement(File file, String[] cells) { - if (cells.length == 1 || cells.length != 6) { + if (cells.length == 1 || cells.length < 6 || cells.length > 7) { throw new PageDescriptionException(file); } String name = cells[0]; @@ -57,7 +57,9 @@ private IElement getIElement(File file, String[] cells) { String id = propertyUtils.injectProperties(cells[2]); String text = propertyUtils.injectProperties(cells[3]); String xpath = propertyUtils.injectProperties(cells[4]); - Boolean specific = Boolean.valueOf(cells[5]); + Boolean specific = Boolean.valueOf(cells[cells.length - 1]); + String nsPredicate = ""; + if (cells.length == 7) nsPredicate = propertyUtils.injectProperties(cells[5]); return element() .withName(name) .withContentDesc(contentDesc) @@ -65,6 +67,7 @@ private IElement getIElement(File file, String[] cells) { .withText(text) .withXPath(xpath) .withSpecific(specific) + .withNSPredicate(nsPredicate) .please(); } } diff --git a/src/main/java/ru/colibri/ui/settings/ios/IOSByFactory.java b/src/main/java/ru/colibri/ui/settings/ios/IOSByFactory.java index 1bd83a2..7d16f6a 100644 --- a/src/main/java/ru/colibri/ui/settings/ios/IOSByFactory.java +++ b/src/main/java/ru/colibri/ui/settings/ios/IOSByFactory.java @@ -1,5 +1,6 @@ package ru.colibri.ui.settings.ios; +import io.appium.java_client.MobileBy; import org.apache.http.util.TextUtils; import org.openqa.selenium.By; import org.springframework.stereotype.Component; @@ -24,6 +25,9 @@ private String createXPathByNameOrValueOrLabel(String label) { @Override public By byElement(IElement element) { + if (!TextUtils.isEmpty(element.getNSPredicate())) { + return MobileBy.iOSNsPredicateString(element.getNSPredicate()); + } if (TextUtils.isEmpty(element.getXpath())) { if (TextUtils.isEmpty(element.getId())) { return byNameOrValueOrLabel(element.getText()); diff --git a/src/test/java/ru/colibri/ui/settings/general/PagesLoaderTest.java b/src/test/java/ru/colibri/ui/settings/general/PagesLoaderTest.java index 4d1ab86..62cad97 100644 --- a/src/test/java/ru/colibri/ui/settings/general/PagesLoaderTest.java +++ b/src/test/java/ru/colibri/ui/settings/general/PagesLoaderTest.java @@ -21,6 +21,7 @@ public class PagesLoaderTest { private final static String FILE_PATH = "src/test/resources/loadFiles/goodPage.csv"; private final static String BAD_FILE_PATH = "src/test/resources/loadFiles/badPage.csv"; private final static String BAD_FILE_PATH2 = "src/test/resources/loadFiles/badPage2.csv"; + private final static String BAD_FILE_PATH3 = "src/test/resources/loadFiles/badPage3.csv"; private final static String DIR_PATH = "src/test/resources/loadFiles/loadDir"; @Autowired private PagesLoader pagesLoader; @@ -42,6 +43,11 @@ public void loadPageFromFileWithOutCells() throws Exception { pagesLoader.loadPageFromFile(new File(BAD_FILE_PATH2)); } + @Test(expected = PageDescriptionException.class) + public void loadPageFromFileWithMoreCells() throws Exception { + pagesLoader.loadPageFromFile(new File(BAD_FILE_PATH3)); + } + @Test(expected = RuntimeException.class) public void loadPageFromNotExistFile() throws Exception { pagesLoader.loadPageFromFile(new File("not_exist.file")); diff --git a/src/test/java/ru/colibri/ui/settings/ios/TestIOSByFactory.java b/src/test/java/ru/colibri/ui/settings/ios/TestIOSByFactory.java index f881f51..0c879bd 100644 --- a/src/test/java/ru/colibri/ui/settings/ios/TestIOSByFactory.java +++ b/src/test/java/ru/colibri/ui/settings/ios/TestIOSByFactory.java @@ -1,5 +1,6 @@ package ru.colibri.ui.settings.ios; +import io.appium.java_client.MobileBy; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.By; @@ -81,4 +82,16 @@ public void testByNestedElement() { Assert.assertEquals("Результат работы IOSFactory по nestedElement некорректен", expected, byElementFromFactory); } + @Test + public void testByNSPredicate() { + IElement element = ElementBuilders.element() + .withName("elementByNSPredicate") + .withNSPredicate("name like 'test'") + .please(); + MobileBy expected = (MobileBy) MobileBy.iOSNsPredicateString("name like 'test'"); + + By byElementFromFactory = byFactory.byElement(element); + Assert.assertEquals("Результат работы IOSFactory по NSPredicate некорректен", expected, byElementFromFactory); + } + } diff --git a/src/test/resources/loadFiles/badPage3.csv b/src/test/resources/loadFiles/badPage3.csv new file mode 100644 index 0000000..74b6282 --- /dev/null +++ b/src/test/resources/loadFiles/badPage3.csv @@ -0,0 +1,3 @@ +"Сервис","","","","","" +"Name in story","Content-desc","ResourceId","Text","XPath","Flag is specific" +"Тарифный план","","","Тарифный план","","true","","" \ No newline at end of file