Appium基础篇13-无法定位app内webview页面元素

本文探讨了App内WebView页面元素定位的挑战,特别是针对手机百度搜索结果页面无法使用UIautomatorviewer定位的问题。文中分析了使用debug版本包的重要性,并介绍了通过Chrome浏览器及chrome://inspect/#devices进行元素定位的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       本文来讨论一个无法绕过的问题,就是app内webview页面的元素定位。现在做过app测试的朋友就知道,app里面页面有原生和webview的,或者H5的。今天,就来讨论一个目前还没有解决的问题。

1.手机百度搜索结果页面

手机百度,点击搜索输入框,输入关键字点击搜索,出来的搜索结果页面,无法通过UI automator viewer来定位元素。

        移动框选区域,发现无法框选局部元素,右侧也不会显示元素的id class信息。看到右侧红圈那个webview没,说明这个页面元素不是native_app,不是原生的。网上很多人写了关于这个文章的解决方案,但是都没有写清楚。结论就是,如果你app应用市场下载的app,就无法定位元素,是的,没有办法定位元素。一定要用开发给的debug版本的包。但是这个我们无法来用网上的app来演示。很多文章,没有提到要用debug版本包,很无语。

       大部分方案都是这样写的,用google浏览器打开chrome://inspect/#devices,然后连接手机的app,这个地方又是坑,又不写清楚。由于,我这没有debug版本包,公司的也不能拿出来演示,涉及公司信息安全。所以,这个暂时无法演示app的,只能用H5网页来代替。

1) 手机需要安装chrome浏览器

2) 手机打开m.baidu.com,然后搜索

3) 手机连接电脑,然后PC端chrome打开chrome://inspect/#devices

4) 点击上面的inspect,电脑上打开手机里H5页面,开始元素定位

这里又一个坑,如果没有VPN,第一次打开是空白页,无法加载app中chrome打开的页面。正常打开是如下

      因为这里是H5演示,当然如何是H5,还不如直接PC端浏览器输入m.baidu.com就可以和web ui一样进行元素定位,如果不习惯chrone,可以拷贝地址到firefox上,利用firepath来元素定位。由于没有debug版本的app包,所以不知道app的页面会不会在上面图这样显示。网上还有一种方法,通过坐标来定位webview页面,这个实在不得已,采取考虑坐标定位,毕竟如果考虑兼容性,坐标就没啥用处了。好了,本篇文章还是没有解决,如何在app的webview页面进行元素定位。

### 使用 Appium Inspector 定位 Android/iOS 应用程序页面元素 #### 启动 Appium Inspector 并连接设备 为了使用 Appium Inspector 进行元素定位,需先下载并安装该工具[^2]。启动应用程序后,在界面上配置好目标平台(Android 或 iOS),以及相应的应用包名和活动名称。 对于 Android 设备而言,通常还需要提供 APK 文件路径;而对于 iOS,则可能涉及更复杂的设置过程,比如指定 WDA 的端口等参数[^1]。 如果遇到 `appActivity` 设置不当的问题,这可能是由于选择了错误的应用入口点所致。此时应确认所填入的 activity 是否对应于待测应用的实际启动页[^4]。 #### 查看与交互界面元素 一旦成功建立了与移动设备之间的会话,便可以在右侧窗口看到模拟器/真实机上运行着的目标应用截图及其层次结构视图。通过拖拽滚动条来浏览整个屏幕内容,并利用鼠标悬停选取特定控件——被选中的组件将以高亮形式呈现出来,与此同时其属性信息也会同步展示在下方区域中。 值得注意的是,在处理横向布局时可能会碰到一些挑战。当面对此类情况时,可以尝试调整缩放级别以便更好地观察细节部分;另外一种解决方案就是切换回竖直方向再执行操作,因为某些情况下横置模式下的 DOM 结构确实难以完全解析[^3]。 ```python from appium import webdriver desired_caps = { 'platformName': 'Android', # or 'iOS' 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) element = driver.find_element_by_accessibility_id("example") # 替换成实际可访问ID或其他定位策略 print(element.text) ``` 此段 Python 代码展示了如何基于之前从 Appium Inspector 获取的信息编写脚本来控制移动端应用内的对象。这里采用 accessibility id 来作为示例的选择依据之一,当然还有其他多种方法可用于精确定位所需部件,例如 XPath、class name 等等。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值