这几天将python的运行库都更新了一下,结果发现用appium进行安卓测试时driver.find_elements_by_*类型的方法均无法使用,提示driver没有这个方法。查了一下原因,大概是Selenium 4.0不再支持find_elements_by_*方法,基于这个库之上的Appium-Python-Client自然也不再支持此类方法。

现在,appium只支持find_element(by,value)和find_elements(by,value)这两种定位方法,关键就在于by的值有哪些,通过阅读源代码,发现大概有两类,在这里整理一下。

第一类是继承Selenium库中的by值,在selenium.webdriver.common.by文件中,可以看到by值有以下几种:

class By:
    """
    Set of supported locator strategies.
    """

    ID = "id"
    XPATH = "xpath"
    LINK_TEXT = "link text"
    PARTIAL_LINK_TEXT = "partial link text"
    NAME = "name"
    TAG_NAME = "tag name"
    CLASS_NAME = "class name"
    CSS_SELECTOR = "css selector"

所以此时我们可以将原来的find_elements_by_*替换如下:

# 1.driver.find_element_by_id
driver.find_element("id","android:id/button2").click()

# 2. driver.find_element_by_xpath
driver.find_element("xpath",r'//android.widget.FrameLayout[@content-desc="文本"]').click()
# 以此类推......

第二类是appium封装其他库的接口(比如uiautomator2),在appium.webdriver.common.appiumby文件中,可以看到by值有以下几种:


from selenium.webdriver.common.by import By


class AppiumBy(By):
    IOS_PREDICATE = '-ios predicate string'
    IOS_UIAUTOMATION = '-ios uiautomation'
    IOS_CLASS_CHAIN = '-ios class chain'
    ANDROID_UIAUTOMATOR = '-android uiautomator'
    ANDROID_VIEWTAG = '-android viewtag'
    ANDROID_DATA_MATCHER = '-android datamatcher'
    ANDROID_VIEW_MATCHER = '-android viewmatcher'
    # Deprecated
    WINDOWS_UI_AUTOMATION = '-windows uiautomation'
    ACCESSIBILITY_ID = 'accessibility id'
    IMAGE = '-image'
    CUSTOM = '-custom'


使用方法也是一样的,比如:

# find_element_by_android_uiautomator
driver.find_element('-android uiautomator','new UiSelector().text("全部")').click()


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐