写点什么

软件测试 / 测试开发丨 App 自动化测试高级定位技巧

作者:测试人
  • 2023-05-26
    北京
  • 本文字数:2014 字

    阅读完需:约 7 分钟

获取更多相关知识


本文为霍格沃兹测试开发学社学员学习笔记分享,文末附原文链接

高阶定位-Xpath

包含-contains()

  • Xpath 表达式中的一个函数

  • contains()函数匹配==属性值==中包含的==字符串==

//*[contains(@属性,"属性值")]
复制代码
  • contains() 函数定位的元素很容易为 list

  • contains() 函数内的属性名需要用 @开始

XPath 轴

  • 父子当前节点的父节点 //*[@text="HK"]/.. //*[@text="HK"]/parent::*当前节点的儿子节点 //*[@resource-id="com.xueqiu.android:id/stock_layout"]/child::*


  • 爷孙当前节点的父级的父级 //*[@text="HK"]/../.. //*[@text="HK"]/parent::*/parent::*当前节点的儿子的儿子 //*[@resource-id="com.xueqiu.android:id/stock_layout"]/child::*/child::*


  • 祖先返回当前节点的所有祖先 //*[@text="HK"]/ancestor::android.widget.RelativeLayout 显式指定要返回的祖先 //*[@text="HK"]/ancestor::android.widget.RelativeLayout[1] RelativeLayout[1] 1 是距离最近的一个,数值越大离得越远,1 是父节点,2 是爷爷节点。。。


  • 兄弟姐妹节点后的兄弟姐妹节点 following-sibling 选择当前节点之后的所有兄弟节点 节点后有一个兄弟节点 //*[@text="HK"]/following-sibling::* 节点后有多个兄弟节点 //*[@resource-id="com.xueqiu.android:id/stock_layout"]/following-sibling::*[@resource-id="com.xueqiu.android:id/price_layout"]节点前的兄弟姐妹节点 preceding-sibling 选择当前节点之前的所有兄弟节点 节点前有一个兄弟节点 //*[@text="09988"]/preceding-sibling::* 节点前有多个兄弟节点 //*[@resource-id="com.xueqiu.android:id/add_attention"]/preceding-sibling::*[@resource-id="com.xueqiu.android:id/price_layout"]

XPath 运算符

AND

  • 可以在 XPath 表达式中放置 2 个条件

  • 在 AND 两个条件都应该为真的情况下,才能找到元素

//*[@resource-id="com.xueqiu.android:id/current_price" and @text="107.8"]
复制代码

OR

  • 可以在 XPath 表达式中放置 2 个条件

  • 在 OR 的情况下,两个条件中的任何一个为真,就可找到元素。

  • OR 定位获取的是并集

//*[@resource-id="com.xueqiu.android:id/tv_stock_add_follow" or @text="加自选"]
复制代码

高阶定位-CSS

css selector 定位介绍

  • 官网说明

  • Android: Appium Server 版本 >= 1.19.0


    css selector will be converted to -android uiautomator selector in UIAutomator2.

  • iOS:Appium Server>= 1.21.0 css selector selector will be converted to -ios class chain selector

css selector 用法

  • 官方示例

# 通过 idelementById("someResourceID")`    -> `elementsByCss("#someResourceID")# 通过 classelementsByClassName("android.widget.TextView")`    -> `elementsByCss("android.widget.TextView")# 通过 accessibility idelementsByAccessibilityId("Some Content Description")`    -> `elementsByCss('*[description="Some Content Description"]')# 通过 xpathelementsByXpath("//android.widget.TextView[@description='Accessibility']")`    -> `elementsByCss("android.widget.TextView[description='Accessibility']")
复制代码

示例

  • 打开【雪球】应用首页

  • 点击搜索框

  • 向搜索框输入:alibaba

  • 判断【阿里巴巴】可见

def test_search1(self):    # 点击搜索框    element = self.driver.find_element(\        AppiumBy.CSS_SELECTOR,"#com\.xueqiu\.android\:id\/tv_search")    element.click()    # 向搜索框输入:alibaba    self.driver.find_element(AppiumBy.CSS_SELECTOR,        "#com\.xueqiu\.android\:id\/search_input_text"). \        send_keys("alibaba")    alibaba_element = self.driver.find_element(\        AppiumBy.CSS_SELECTOR, "*[text='阿里巴巴']")    displayed = alibaba_element.get_attribute("displayed")    print(displayed)    # 判断【阿里巴巴】可见    assert displayed == "true"    print(f"结束时间:{self.get_time()}")
复制代码

iOS css selector 定位

Toast 识别

Toast 是什么

  • 一种消息框类型

  • 永远不会获得焦点 无法被点击

  • Toast 显示的时间有限,Toast 会根据用户设置的显示时间后自动消失

  • 是系统级别的控件,属于系统 settings

  • Toast 类的思想: 就是尽可能不引人注意,同时还向用户显示信息,希望他们看到

Toast 定位

  • appium 用的是 uiautomator 底层来抓取 toast,

  • 再把 toast 放到控件树内,但是它本身不属于空间

  • 使用的是 uiautomator2

Toast 定位

  • xpath 可以找到 //[@class="android.widget.Toast"]//[contains(@text,"xxx")] xxx:toast 的文本内容

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(50));  driver.findElement(AppiumBy.xpath("//*[@class=\"android.widget.Toast\"]"));
复制代码


原文链接:Python 测开27期 - julia - 学习笔记 - APP自动化高级定位技巧 - 学习笔记 - 测试人社区

发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨App自动化测试高级定位技巧_程序员_测试人_InfoQ写作社区