APP自动化测试高级定位技巧,我敢打赌你一定不知道

news2024/9/22 5:31:50

目录

高阶定位-Xpath

包含-contains()

XPath 轴

XPath 运算符

AND

OR

高阶定位-CSS

css selector 定位介绍

css selector 用法

示例

iOS css selector 定位

Toast 识别

Toast 是什么

Toast 定位

Toast 定位

显示等待

使用lambda表达式

总结三种等待方法


高阶定位-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 运算符

 总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

 

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 用法

  • 官方示例
# 通过 id
elementById("someResourceID")`
    -> `elementsByCss("#someResourceID")
# 通过 class
elementsByClassName("android.widget.TextView")`
    -> `elementsByCss("android.widget.TextView")
# 通过 accessibility id
elementsByAccessibilityId("Some Content Description")`
    -> `elementsByCss('*[description="Some Content Description"]')
# 通过 xpath
elementsByXpath("//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 定位

  • Appium Server 版本>=1.21.0
  • 官网:Release v1.21.0 · appium/appium · GitHub

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\"]"));

显示等待

  • 显示等待是客户端的等待
  • WebDriverWait(self.driver, 10).until(expected_conditions.visibility_of_element_located(Locator))
  • 用到的两个类:WebDriverWait和expected_conditions
  • 显示等待可以等待动态加载的ajax元素,显示等待需要使用ExpectedConditions来检查条件

  • 一般页面上元素的呈现title出现 首先出现titledom树出现 presense,还不完整css出现 (可见visibility)js出现, js特效执行(可点击clickable)
  • HTML文件是至上而下加载的
  • js 文件加载会阻塞html内容的加载,有些js异步加载的方式来完成js加载
  • 样式表下载完成之后会跟之前的样式表一起进行解析,会对之前的元素重新渲染

使用lambda表达式

  • WebDriverWait(driver,time).until(lambda x: x.find_element_by_id(someid)) 返回一个元素

总结三种等待方法

  • 隐式等待,尽量默认都加上,时间限定在3-6秒,不要太长,为了所有的find_element方法都有一个很好的缓存
  • 显示等待,用来处理隐式等待无法解决的一些问题,比如:文件上传(可以设置长一点),文件上传需要设置20s以上,但是如果设置隐式等待,它会在每个find方法都等这么长时间,一旦发现没有找到元素,就会等20s以后才抛出异常,影响case的执行效率,这时候就需要用显示等待,显示等待可以设置的长一点
  • 强制等待: 一般不推荐,前两种基本等解决绝大部分问题,如果某个空间没有任何特征,只能强制等待,这种情况比较少

 总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansible自动化运维工具之playbook剧本编写含lnmp

1.playbook的相关知识 1.1 playbook 的简介 playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部…

【黑马头条】解决P11@EnableDiscoveryClient注解无法导入爆红、bootstrap.yml配置文件图标无法显示成带云朵的小绿叶图标

本期目录 1. 问题描述2. 问题原因3. 解决方法 1. 问题描述 如果按黑马老师给的 heima-leadnews-service 模块的 pom 文件所写的依赖,会发现有 2 个 Bug : 首先,启动类 UserApplication 上的服务发现开关注解 EnableDiscoveryClient 不存在。 …

知识复盘(Session、Mysql、Servlet、Jsp、SSM)

一、会话跟踪技术(Session Tracking) 1.为什么会出现会话机制? 目前主流的通讯方式就是客户端和服务端之间进行通信,而这种通信是通过Http协议实现的,但Http协议本身是无状态的,所以客户端每发送一次请求到服务器都会被当做一个…

windows上的Linux系统WSL2

目录 简介 安装 简介 适用于 Linux 的 Windows 子系统 (WSL) 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销,用于快速的多平台验…

Unity UGUI2——Canvas与EventSystem

一、Canvas ​ Canvas 的意思是画布,它是 UGUI 中所有 UI 元素能够被显示的根本,它主要负责渲染自己的所有 UI 子对象 ​ 如果 UI 控件对象不是 Canvas 的子对象,那么控件将不能被渲染 ​ 我们可以通过修改 Canvas 组件上的参数修改渲染方…

[架构之路-214]- UML-类图图解、详解、结构化、本质化讲解

目录 一、什么是类 1.1 概述 1.2 UML中类的表示 1.3 接口 1.4 抽象类 1.5 模板类 二、什么类图 2.1 概述 2.2 类关系 三、UML类图 3.1 结构关系 3.1.1 完全一体:继承关系 (类与类耦合度最高,类与类之间最强的关系) …

空天|谈一谈飞机引擎的应急断离

为什么突然想到这个话题呢?归功于即将到来的材料力学考试。在复习科学出版社出版的苟文选、王安强等编写的《材料力学(1)》第三版第三章的连接键强度校核等内容时,一个例题吸引了我的注意力。 例3-4: 水平力Fg。 强而…

理论实战源码齐飞!架构师社区疯传的SpringSecurity进阶小册真香

安全管理是Java应用开发中无法避免的问题,随着Spring Boot和微服务的流行,Spring Security受到越来越多Java开发者的重视,究其原因,还是沾了微服务的光。作为Spring家族中的一员,其在和Spring家族中的其他产品如SpringBoot、Spring Cloud等进…

Unity UGUI3——三大基础控件

一、Image ​ Image 是图像组件,是 UGUI 中用于显示精灵图片的关键组件 ​ 除了背景图等大图,一般都使用 Image 来显示 UI 中的图片元素 (一)参数介绍 Source Image:图片来源 图片类型必须是“精灵 Sprite”类型 Col…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线,在IBM叫做Storage N series,就是N系列,在2014年IBM终止了和NetApp之间的OEM关系,目前在市场上的OEM的NetApp存储型号主要是 FAS3000,FAS31和FAS32的中端系…

HTB靶场:简单inject

HTB靶场:简单inject 1、进入靶场,连接vpn后开启靶机 inject 2、nmap扫描一下靶机 nmap -v -A 10.10.11.*扫描后显示服务和端口信息8080和22 3、打开web服务 1)有上传文件功能 简单上传了几个文件(txt,img等 上传过程根据参数简…

SpringBoot 实现 PDF 添加水印有哪些方案?

简介 PDF(Portable Document Format,便携式文档格式)是一种流行的文件格式,它可以在多个操作系统和应用程序中进行查看和打印。在某些情况下,我们需要对 PDF 文件添加水印,以使其更具有辨识度或者保护其版…

全国青少年软件编程(Scratch)等级考试二级考试真题2023年5月——持续更新.....

一、单选题(共25题,共50分) 1.运行下列哪段程序,可以让狗狗走到木屋门口?() A. B. C. D. 标准答案:C 2.下列哪个选项可以控制:按下左键扫帚向左旋转15度,按下右键扫帚向右旋转15度?() A. B. C.

LLM系列 | 09: 基于ChatGPT构建智能客服系统(query分类安全审核防注入)

简介 竹斋眠听雨,梦里长青苔。门寂山相对,身闲鸟不猜。小伙伴们好,我是卖热干面的小女孩。紧接前面几篇ChatGPT Prompt工程系列文章: 04:ChatGPT Prompt编写指南05:如何优化ChatGPT Prompt?06:ChatGPT Prompt实践&am…

如何安装MySQL数据库

目录 什么是MySQL数据库 第一步 安装依赖环境 第二步 创建MySQL相关进程用户 第三步 导入MySQL相关包 第四步 解包到指定目录下 第五步 切换到MySQL目录下编译安装 第六步 编译 第七步 更改指定文件的所有者和所属组 第八步 进入指定配置文件清空内容 第九步 配置指定…

软件测试复习题

一、填空题 软件从“出生”到“消亡”的过程称为___。早期的线性开发模型称为_______开发模型。引入风险分析的开发模型为_______开发模型。ISO 9126-1991标准提出的质量模型包括_______和________和________和______和_______和_______6大特性。按照缺陷的严重程度可以将缺陷…

如何做Web测试?测试者必知的常见测试点总结

目录 一、Web应用程序 二、功能测试 三、易用性测试(界面测试)整体界面测试 四、茶客性测试 五、安全性测试安全性测试要求: 六、性能测试 总结: 如何做Web测试?以下为大家比较全面地总结一下Web测试的票点 一、Web应用程序 应用程序有两种模式&#xff0c…

article-五轴机械臂正逆分析(标准法)VQ

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2CiIK0R-1687071926271)(data:image/svgxml;utf8, )] 五轴机械臂正逆解仿真 标准的D-H参数法 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbUOp13D-1687071926272)(da…

设计模式-策略工厂

在介绍策略工厂的实现前,我们要先了解spring中beanFactory: BeanFactory 作为IOC服务的提供者,通过XmlBeanFactory来得到实例 生产Bean的工厂,采用延迟初始化策略(只有在需要某个对象时,才进行初始化和依…

网络安全如何从零基础到精通?

在看这篇文章之前,有个问题想确认一下,你现在自学网络安全是出于兴趣原因,还是说之后准备走网络安全这个方向? 因为目的不同,学习的方式和深度也会不一样。 今天我就围绕职业发展这个方向来和你聊聊。 如果你真的想通过…