From 01042ef5ad84ffcb83b6bc2ee16aa78f409882d1 Mon Sep 17 00:00:00 2001 From: Kazuaki MATSUO Date: Fri, 9 Jun 2017 00:11:43 +0900 Subject: [PATCH] add class chain --- appium/webdriver/common/mobileby.py | 1 + appium/webdriver/webdriver.py | 23 +++++++++++++++++++++++ appium/webdriver/webelement.py | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/appium/webdriver/common/mobileby.py b/appium/webdriver/common/mobileby.py index 1b5e31dd..be0b68eb 100644 --- a/appium/webdriver/common/mobileby.py +++ b/appium/webdriver/common/mobileby.py @@ -18,5 +18,6 @@ class MobileBy(By): IOS_PREDICATE = '-ios predicate string' IOS_UIAUTOMATION = '-ios uiautomation' + IOS_CLASS_CHAIN = '-ios class chain' ANDROID_UIAUTOMATOR = '-android uiautomator' ACCESSIBILITY_ID = 'accessibility id' diff --git a/appium/webdriver/webdriver.py b/appium/webdriver/webdriver.py index 94c3e13e..23256074 100644 --- a/appium/webdriver/webdriver.py +++ b/appium/webdriver/webdriver.py @@ -44,6 +44,7 @@ def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub', # add new method to the `find_by_*` pantheon By.IOS_UIAUTOMATION = MobileBy.IOS_UIAUTOMATION By.IOS_PREDICATE = MobileBy.IOS_PREDICATE + By.IOS_CLASS_CHAIN = MobileBy.IOS_CLASS_CHAIN By.ANDROID_UIAUTOMATOR = MobileBy.ANDROID_UIAUTOMATOR By.ACCESSIBILITY_ID = MobileBy.ACCESSIBILITY_ID @@ -121,6 +122,28 @@ def find_elements_by_ios_predicate(self, predicate_string): """ return self.find_elements(by=By.IOS_PREDICATE, value=predicate_string) + def find_element_by_ios_class_chain(self, class_chain_string): + """Find an element by ios class chain string. + + :Args: + - class_chain_string - The class chain string + + :Usage: + driver.find_element_by_class_chain('XCUIElementTypeWindow/XCUIElementTypeButton[3]') + """ + return self.find_element(by=By.IOS_CLASS_CHAIN, value=class_chain_string) + + def find_elements_by_class_chain(self, class_chain_string): + """Finds elements by ios class chain string. + + :Args: + - class_chain_string - The class chain string + + :Usage: + driver.find_elements_by_class_chain('XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]') + """ + return self.find_elements(by=By.IOS_CLASS_CHAIN, value=class_chain_string) + def find_element_by_android_uiautomator(self, uia_string): """Finds element by uiautomator in Android. diff --git a/appium/webdriver/webelement.py b/appium/webdriver/webelement.py index 71e8e041..94c9f7be 100644 --- a/appium/webdriver/webelement.py +++ b/appium/webdriver/webelement.py @@ -63,6 +63,28 @@ def find_elements_by_ios_predicate(self, predicate_string): """ return self.find_elements(by=By.IOS_PREDICATE, value=predicate_string) + def find_element_by_ios_class_chain(self, class_chain_string): + """Find an element by ios class chain string. + + :Args: + - class_chain_string - The class chain string + + :Usage: + driver.find_element_by_class_chain('XCUIElementTypeWindow/XCUIElementTypeButton[3]') + """ + return self.find_element(by=By.IOS_CLASS_CHAIN, value=class_chain_string) + + def find_elements_by_class_chain(self, class_chain_string): + """Finds elements by ios class chain string. + + :Args: + - class_chain_string - The class chain string + + :Usage: + driver.find_elements_by_class_chain('XCUIElementTypeWindow[2]/XCUIElementTypeAny[-2]') + """ + return self.find_elements(by=By.IOS_CLASS_CHAIN, value=class_chain_string) + def find_element_by_android_uiautomator(self, uia_string): """Finds element by uiautomator in Android.