『App自动化测试之Appium应用篇』| 继承于selenium常用的元素定位方法有哪些?如何使用?

简介: 『App自动化测试之Appium应用篇』| 继承于selenium常用的元素定位方法有哪些?如何使用?

1 关于APP

  • 在了解元素等位前,我们先了解下app的一些类型,只有了解这些app的类型才能针对性的选择元素定位方法;
  • 因为不同类型的app的定位方式可能存在差异性;
  • 我们了解到APP可以分为原生APPWeb APP、混合APP

    1.1 原生APP

  • 而原生APP是基于AndroidiOS平台官方的语言、类库、工具进行开发的APP
  • 这类APP的定位方式一般就只有三种,为id、class_name、Xpath

1.2 Web APP

  • Web APP一般是Web开发语言,通过浏览器运行;
  • 那么就支持selenium的常见8中元素等位方式了:
# id
# class_name
# Xpath
# name
# tag_name
# link_text
# partial_link_text
# CSS

1.3 混合APP

  • 这个其实就是用了原生APP的方法,还用到了HTML5的方法;
  • 那么这种APP就要根据实际情况来定,要么8种元素定位方法都可以用到,要么只能用到部分。

2 测试对象

2.1 获取包信息

  • 我们这里使用真机进行测试;
  • 安装包为taobao,自行下载即可;
  • 下载后查看对应的包名和活动窗口名:
aapt dump badging taobao.apk
F:\monkey_test>aapt dump badging taobao.apk
package: name='com.taobao.taobao' versionCode='609' versionName='10.31.1' compileSdkVersion='33' compileSdkVersionCodename='13'
install-location:'auto'
sdkVersion:'21'
targetSdkVersion:'33'
uses-permission: name='com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.GET_TASKS'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='android.permission.WRITE_EXTERNA
  • 得到重要的两个信息:
appPackage='com.taobao.taobao'
appActivity='com.taobao.tao.welcome.Welcome'

2.2 真机配置

  • 手机上打开USB调试;
  • 打开USB安装;
  • 打开USB调试(安全设置);
  • 注意本文使用的是xiaomi手机。

2.3 启动服务

  • 启动appium服务:
C:\Windows\System32>appium
[Appium] Welcome to Appium v2.2.3
[Appium] Attempting to load driver uiautomator2...
[Appium] Requiring driver at C:\Users\Administrator\.appium\node_modules\appium-uiautomator2-driver
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
[Appium]        http://172.16.1.33:4723/
[Appium]        http://127.0.0.1:4723/ (only accessible from the same host)
[Appium]        http://172.28.128.1:4723/
[Appium] Available drivers:
[Appium]   - uiautomator2@2.34.2 (automationName 'UiAutomator2')
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.

2.4 启动session

  • 脚本或打开appium-inspecotr,配置相关信息如下:
{
   
   
  "platformName": "Android",
  "appium:automationName": "uiautomator2",
  "appium:deviceName": "xxxx", # 这是设备名称,填写自己的即可
  "appium:appPackage": "com.taobao.taobao",
  "appium:appActivity": "com.taobao.tao.welcome.Welcome",
  "appium:noReset": true
}
  • 启动session后如下界面:
    在这里插入图片描述

3 元素定位

  • 关于WebAPP之前提及这个和selenium元素定位是一样的,这里可不过多介绍;
  • 这里主要了解下原生APP的常用的三种方式。

3.1 id定位

  • 这种对应方式无疑对测试人员来说是最喜欢的方式了;
  • 因为如果是不变的id属性,那么久代表了唯一性,后续不管元素的位置如何变化,属性不变,对代码的维护成本就小很多了;
  • 比如我们打开软件后,有一个同意的界面,通过appium-inspecotr可以看到元素的属性:
    在这里插入图片描述
  • 我们可以提炼出【同意】按钮的属性为:
id:com.taobao.taobao:id/provision_positive_button
  • 那我们可以使用的定位方式为id,代码如下:
driver.find_element(AppiumBy.ID, "com.taobao.taobao:id/provision_positive_button").click()

3.2 class_name定位

  • class_name就是根据元素类型进行定位;
  • 加入类型class_name比较多的话,可使用下标就行选择,比如:
driver.find_element(AppiumBy.CLASS_NAME, "content-desc")[1].click()

3.3 Xpath定位

3.3.1 id定位

  • 假如id是唯一的,比如之前我们定位的【同意】这个按钮:
    在这里插入图片描述
  • 定位方式直接写为:
driver.find_element(AppiumBy.XPATH, 
"//android.widget.TextView[@resource-
id='com.taobao.taobao:id/provision_positive_button']").click()

3.3.2 class标签定位

  • 如果class作为标签定位,那么:
driver.find_element(AppiumBy.XPATH, 
"classxxxx").click()

3.3.3 class属性定位

  • 如果class作为属性定位,那么:
    driver.find_element(AppiumBy.XPATH, 
    "//*[@class='xxxx']").click()
    

    3.3.4 text唯一性定位

  • 如果元素的text是唯一的,直接使用text文本进行定位;
  • 定位方法为:
driver.find_element(AppiumBy.XPATH, 
"//*[@text='xxxx']").click()

3.3.5 模糊匹配法

  • 可以使用contains
  • 语法为:
driver.find_element(AppiumBy.XPATH, 
"//*[contains(@resource-id, 'xxx')]").click()

driver.find_element(AppiumBy.XPATH, 
"//*[contains(@text, 'xxx')]").click()

driver.find_element(AppiumBy.XPATH, 
"//*[contains(@class, 'xxx')]").click()

3.3.6 组合定位

  • 就是把几种定位方式结合在一起,任意进行组合;
  • 比如:
el = '//*[@text="xxx" and @index="yyy"]'
driver.find_element(AppiumBy.XPATH, el).click()

3.3.7 层级定位

  • 层级定位就是除了以上这些方法都不容易定位的时候会用到;
  • 一般使用逻辑是找这个元素的父子层级进行定位。
目录
相关文章
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
2月前
|
数据采集 测试技术 Python
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
105 8
|
14天前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
116 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
22天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
75 19
Selenium IDE:Web自动化测试的得力助手
|
24天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
144 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
jenkins 测试技术 持续交付
探索自动化测试在持续集成中的应用与挑战
本文深入探讨了自动化测试在现代软件开发流程,特别是持续集成(CI)环境中的关键作用。通过分析自动化测试的优势、实施策略以及面临的主要挑战,旨在为开发团队提供实用的指导和建议。文章不仅概述了自动化测试的基本原理和最佳实践,还详细讨论了如何克服实施过程中遇到的技术难题和管理障碍,以实现更高效、更可靠的软件交付。
|
2月前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试框架在软件开发中的应用与挑战##
本文将深入探讨自动化测试框架在现代软件开发过程中的应用,分析其优势与面临的挑战。通过具体案例分析,揭示如何有效整合自动化测试以提升软件质量和开发效率。 ##
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
34 4
|
2月前
|
监控 JavaScript 前端开发
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
42 1