Add support for "-image" locator type by mykola-mokhnach · Pull Request #990 · appium/java-client

Expand Up @@ -120,6 +120,23 @@ public static By iOSNsPredicateString(final String iOSNsPredicateString) { public static By windowsAutomation(final String windowsAutomation) { return new ByWindowsAutomation(windowsAutomation); }
/** * This locator strategy is available only if OpenCV libraries and * NodeJS bindings are installed on the server machine. * * @see <a href="https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/image-comparison.md"> * The documentation on Image Comparison Features</a> * @see <a href="https://github.com/appium/appium-base-driver/blob/master/lib/basedriver/device-settings.js"> * The settings available for lookup fine-tuning</a> * @since Appium 1.8.2 * @param b64Template base64-encoded template image string. Supported image formats are the same * as for OpenCV library. * @return an instance of {@link ByImage} */ public static By image(final String b64Template) { return new ByImage(b64Template); }
public static class ByIosUIAutomation extends MobileBy implements Serializable {
Expand All @@ -146,7 +163,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementsByIosUIAutomation(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -171,7 +188,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementByIosUIAutomation(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
Expand Down Expand Up @@ -211,7 +228,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementsByAndroidUIAutomator(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -236,7 +253,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementByAndroidUIAutomator(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
Expand Down Expand Up @@ -275,7 +292,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementsByAccessibilityId(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -300,7 +317,7 @@ public List<WebElement> findElements(SearchContext context) throws WebDriverExce .findElementByAccessibilityId(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
Expand Down Expand Up @@ -336,7 +353,7 @@ protected ByIosClassChain(String locatorString) { .findElementsByIosClassChain(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -360,7 +377,7 @@ protected ByIosClassChain(String locatorString) { .findElementByIosClassChain(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
Expand Down Expand Up @@ -396,7 +413,7 @@ protected ByIosNsPredicate(String locatorString) { .findElementsByIosNsPredicate(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -420,7 +437,7 @@ protected ByIosNsPredicate(String locatorString) { .findElementByIosNsPredicate(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
Expand Down Expand Up @@ -456,7 +473,7 @@ protected ByWindowsAutomation(String locatorString) { .findElementsByWindowsUIAutomation(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
Expand All @@ -480,14 +497,70 @@ protected ByWindowsAutomation(String locatorString) { .findElementByWindowsUIAutomation(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(context.getClass())) { if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
throw formIllegalArgumentException(contextClass, FindsByIosNSPredicate.class, FindsByWindowsAutomation.class); } }
public static class ByImage extends MobileBy implements Serializable {
protected ByImage(String b64Template) { super(MobileSelector.IMAGE, b64Template); }
/** * {@inheritDoc} * * @throws WebDriverException when current session doesn't support the given selector or when * value of the selector is not consistent. * @throws IllegalArgumentException when it is impossible to find something on the given * {@link SearchContext} instance */ @SuppressWarnings("unchecked") @Override public List<WebElement> findElements(SearchContext context) { Class<?> contextClass = context.getClass();
if (FindsByImage.class.isAssignableFrom(contextClass)) { return FindsByImage.class.cast(context).findElementsByImage(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElements(context); }
throw formIllegalArgumentException(contextClass, FindsByImage.class, FindsByFluentSelector.class); }
/** * {@inheritDoc} * * @throws WebDriverException when current session doesn't support the given selector or when * value of the selector is not consistent. * @throws IllegalArgumentException when it is impossible to find something on the given * {@link SearchContext} instance */ @Override public WebElement findElement(SearchContext context) { Class<?> contextClass = context.getClass();
if (FindsByImage.class.isAssignableFrom(contextClass)) { return FindsByImage.class.cast(context).findElementByImage(getLocatorString()); }
if (FindsByFluentSelector.class.isAssignableFrom(contextClass)) { return super.findElement(context); }
throw formIllegalArgumentException(contextClass, FindsByImage.class, FindsByFluentSelector.class); }
@Override public String toString() { return "By.Image: " + getLocatorString(); } } }