zoukankan      html  css  js  c++  java
  • appium中的元素定位方式

    前言

    虽然一直在做app自动化,但没能总结过appium中的元素定位方式,appium中一部分定位方式和selenium类似,一部分又不相同。因此本文将总结appium中常用的元素定位方式,同时与selenium做一个横向的比较

    通过resource-id定位

    resource-id也称为id,resource-id是唯一的

    代码实现

    # 元素定位
    agree_continue_id = "com.baidu.searchbox:id/positive_button"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.ID, agree_continue_id)))
    driver.find_element_by_id(agree_continue_id).click()
    

    通过className定位

    这里的className对应的元素有2个,看上面的index是2,不同意是1,同意并继续是2

    代码实现

    # 元素定位,注意我这里的写法,用的是find_elements_by_class_name,另外还要加索引
    agree_continue_class = "android.widget.Button"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_all_elements_located((MobileBy.CLASS_NAME, agree_continue_class)))
    driver.find_elements_by_class_name(agree_continue_class)[1].click()
    

    通过AccessibilityId定位

    AccessibilityId也称为content-desc

    代码实现

    # 元素定位
    tiku_AccessibilityId = "题库"
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_all_elements_located((MobileBy.ACCESSIBILITY_ID, tiku_AccessibilityId)))
    driver.find_element_by_accessibility_id(tiku_AccessibilityId).click()
    

    通过xpath定位

    常规定位

    比如我要用text属性的文本值定位,这时候只需要写成xpath表达式(注意appium中没有单独的text定位方式,必须要结合xpath)

    代码实现

    # 元素定位
    agree_continue_xpath = "//*[@text='同意并继续']"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()
    

    contains模糊定位

    这种经常用于获取toast的时候,toast文本内容较长,可以采用contains包含部分文本的匹配方式。当然,可以用来模糊匹配上面的文本属性“同意并继续”

    代码实现

    # 元素定位
    agree_continue_xpath = "//android.widget.Button[contains(@text, '并继续')]"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()
    

    组合定位

    比如xpath中同时包含class和text两个属性

    代码实现

    # 元素定位
    agree_continue_xpath = "//*[@class='android.widget.Button' and @text='同意并继续']"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()
    

    层级定位

    使用lazy uiautomatorviewer,可以看到底下有个fullIndexXpath,这种是全路径的形式,也是层级的形式

    代码实现

    # 元素定位
    agree_continue_xpath = "//android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.Button[2]"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.XPATH, agree_continue_xpath)))
    driver.find_element_by_xpath(agree_continue_xpath).click()
    

    通过AndroidUIAutomator定位

    使用lazy uiautomatorviewer,可以看到底下有个uiaSelector,将其拷贝到代码

    代码实现

    # 元素定位
    agree_continue_android_uiautomator = "new UiSelector().className("android.widget.Button").textContains("同意并继续").resourceId("com.baidu.searchbox:id/positive_button")"
    
    WebDriverWait(driver, 10, 1).until(EC.visibility_of_element_located((MobileBy.ANDROID_UIAUTOMATOR, agree_continue_android_uiautomator)))
    driver.find_element_by_android_uiautomator(agree_continue_android_uiautomator).click()
    

    appium与selenium元素定位之比较

    框架 常用的元素定位方式 备注
    appium id, className, AccessibilityId, xpath, AndroidUIAutomator 对于h5页面,也支持selenium的name, link text, css等定位方式
    selenium id, className, name, tag name, link text, paratial link text, xpath ,css

    参考文章

    《Appium之xpath定位元素》
    《Appium-Android 元素定位方式》

  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/my_captain/p/12801426.html
Copyright © 2011-2022 走看看