app 元素定位失败了,怎么办?

粉丝们在日常的android app自动化测试工作当中,元素定位时会遇到以下类似的报错:

然后来问博主,这是啥情况?

我一般都会送上亲切的关怀:

1)adb能识别到设备吗?

AI写代码

AI生成项目

2)设备有被其它的程序在占用吗?

AI写代码

3)ADT的版本正确吗?

AI写代码

当粉丝对以上关怀都确认之后,反馈仍然会遇到这样的报错。

为了不影响学习的热情,会提供以下三种定位小手段,总有一款可以让你顺利的定位到元素哦!!

每一种工具定位的前提:

  1. 通过 adb devices命令能够识别到至少一个android设备;
  2. 设备当前没有被任何其它的应用程序所占用;

第一种:android ADT自带工具:uiAutormatorViewer

文章最开始的报错截图,就是来自于这个工具啦。

android 4.2以上的版本,自带的自动化测试框架是uiAutomator。

uiAutomatorViewer就是它的元素定位工具了。

如果要用UiAutomator来做自动化测试,就需要掌握java语言了。

安装:

uiAutomatorViewer是安卓调试工具(ADT)中的一部分。所以只需要安装ADT就可以了(不需要安装SDK哦)。

  1. 安装Android Studio
  1. 在Android Studio的启动页面当中,选择右下角的Configure -> SDK Manager

会弹出下图:选择Android SDK -> SDK Tools ,按图中勾选,点击OK进入安装,安装完成即可关闭Android Studio。 记住图中Android SDK Location对应的路径。

使用:

1、找到ADT安装目录,在其tools/bin目录下,找到uiAutomatorViewer程序,双击打开。

例如:ADT的目录为:/Users/liyuan/Library/Android/sdk

(Ps: 亲测目前不支持jdk1.8以上的版本。所以为了启动成功,要安装jdk1.8的版本。

mac下若安装了jdk11和jdk1.8,需要编辑uiautomatorviewer文件,找到javaCmd="java",

修改为 javaCmd="/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java"

/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java为jdk1.8版本对应的java.png)

2)定位元素。

第二种:appium的appium inspector

appium是目前最流行的开源的app功能测试框架。

同时支持IOS和Android的自动化测试,也支持多语言(python/java/C#......png)

安装:

只要安装appium,那么appium inspector也就有了。

appium desktop下载地址:http://appium.io/

(Ps:需要先安装nodejs,再安装appium程序哦。)

使用:

启动appium desktop之后,点击右上角的第一个按钮

在打开如下界面当中,按图中所示,填写信息:

会根据启动参数,去打开对应的app,然后会截取app当中的页面。

第三种:python版uiAutomator2中的weditor

python语言实现的一个app自动化测试框架。

安装:

安装uiAutomator2:pip install -U uiautomator2

安装定位工具weditor: pip install -U weditor

安装完成之后:命令行运行:weditor --help确认是否安装成功。

使用:

命令行输入:weditor 会自动打开在浏览器当中打开一个2) 所示的页面。

选择Android,输入设备序列号,点击connect。点击Dump Hierarchy,就可以看到元素的信息了。

总结:

以上3种定位告诉你: 任何一个app自动化测试的框架,都会给你提供一个对应的定位工具哦!

android自带的UiAutomator测试框架,提供 uiAutomatorViewer。

appium测试框架,提供appium inspector.

python实现的uiAutomator2测试框架,提供weditor

在app自动化测试的过程中,可以使用任意一种来帮你进行元素定位

 

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

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

### Appium 元素定位失败的原因分析与解决方案 在使用 Python 和 Appium 进行移动端自动化测试时,如果遇到无法成功定位到目标元素的情况,可能由多种原因引起。以下是常见的问题及其对应的解决策略: #### 1. **检查设备状态** 确保被测应用已正确安装并启动于模拟器或真实设备上。可以通过以下命令验证设备连接情况: ```bash adb devices ``` 如果没有返回有效的设备列表,则需重新确认 ADB 配置是否正常[^4]。 #### 2. **调整 Desired Capabilities 参数** 某些情况下,默认的 `DesiredCapabilities` 设置可能导致定位功能失效。例如,在 Chrome 浏览器环境下尝试通过 XPath 或其他方式查找元素时,可能会触发 `InvalidArgumentException` 错误消息。此时可以考虑加入额外参数来规避此问题: ```python from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['deviceName'] = 'emulator-5554' # 替换为实际设备名称 desired_caps['appPackage'] = 'com.example.app' # 应用包名 desired_caps['appActivity'] = '.MainActivity' # 启动 Activity 名称 desired_caps['automationName'] = 'UiAutomator2' # 添加特殊选项以支持更广泛的定位机制 desired_caps['chromeOptions'] = {'w3c': False} desired_caps['showChromedriverLog'] = True driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` 上述代码片段中的 `'w3c': False` 是针对部分版本兼容性的修复措施之一[^3]。 #### 3. **优化定位表达式** 当采用错误或者不精确的选择器路径时也会造成匹配不到预期控件的结果。推荐优先选用稳定性较高的 ID 属性作为首选依据;其次再依次考察 class name、resource-id 等属性值是否存在唯一性特征。对于复杂场景下的动态加载内容则可借助等待逻辑实现同步操作: ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from appium.webdriver.common.mobileby import MobileBy locator_strategy = (MobileBy.ID, "unique_element_id") # 使用具体资源ID代替泛化描述符 wait = WebDriverWait(driver, timeout=10) try: element = wait.until(EC.presence_of_element_located(locator_strategy)) except Exception as e: print(f"Element not found due to error:{e}") finally: driver.quit() ``` #### 4. **升级依赖库至最新版** 随着技术迭代更新速度加快,旧版本客户端可能存在诸多未修补漏洞以及功能性缺失现象。因此建议定期核查当前使用的工具链组件是否处于最佳实践范围内,并及时完成相应补丁程序部署工作。 执行如下指令获取最新发布的Python绑定模块副本: ```bash pip install --upgrade appium-python-client ``` --- ### 总结 综上所述,面对 Appium 中频繁发生的“找不到指定UI部件”的异常状况,可以从以下几个方面入手排查:一是核实物理硬件环境准备妥当与否;二是修正初始化阶段传递给服务器端的数据结构定义细节;三是改进查询语句编写技巧从而提升命中率;四是保持软件生态系统的持续进化态势以便适应不断变化的需求形势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值