Appium Appium 元素定位问题:无论通过 id 定位,还是 xpath/UIautomator 定位,均定位不到 “跳过” 元素,求指教

流年亦醉 · 2019年04月09日 · 最后由 troubl_2014 回复于 2021年08月04日 · 3473 次阅读
# 代码如下:
from appium import webdriver
from time import sleep

desired_caps={}
desired_caps['platformName'] = 'Android'

# 模拟器设备
desired_caps['platformVersion'] = '7.1.2'
desired_caps['deviceName'] = '127.0.0.1:62026'

desired_caps['app'] = r'C:\Users\Andysong\Desktop\kaoyan3.1.0.apk'
desired_caps['appPackage'] = 'com.tal.kaoyan'
desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'

driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
driver.implicitly_wait(5)
sleep(3)

driver.find_element_by_id('android:id/button2').click()
sleep(5)

driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
# driver.find_element_by_xpath('//android.widget.TextView[@text="跳过 > "]').click()
# driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
# driver.find_element_by_android_uiautomator\
#     ('new UiSelector().resourceId("com.tal.kaoyan:id/tv_skip")').click()

本人遇到的问题截图






共收到 21 条回复 时间 点赞

你把 uiautomatorviewer 的图也放出来下

雨夜狂奔 回复

该图已传哈

有没可能你找元素的时候这个元素还没加载出来,xpath 没仔细看,感觉用 id 找应该是没问题的,你加下延迟时间试试呢,还有你这个写的不对

driver.find_element_by_xpath('//android.widget.TextView[@test="跳过 > "]').click()
# 应该是@text
雨夜狂奔 回复

嗯 已改正。这次特意给了 sleep 的时间加载,还是不行。附了加上 sleep 的两张图

流年亦醉 回复

你加了 sleep 时间之后直接用 id 找吧,或者把页面的 page_source 打印出来看看是不是有,这种应该比较容易找到啊。。

雨夜狂奔 回复

是的,直接用 id 找,脚本执行到定位 “跳过” 元素时,就一直停留不走了,反正定位不到,每次都手动强制停止,很诡异😂
不过谢谢你的回答哈

匿名 #7 · 2019年04月09日

把页面 page_source 打印出来,然后看 clickable 是否是可点击的

好的,有时间看下。谢了哈

appium log 里 显示执行点击操作了吗,以及返回的状态是什么

小白 回复

脚本没有执行到点击操作,这个 “跳过” 元素一直定位不到(上一步的 “取消更新” 元素都是可以正常定位并正常点击操作的。)

流年亦醉 回复

我之前碰到一个是因为 id 前的包名不一致,但是你这个一致,也别卡着了,先预算下坐标,点坐标吧,有时间再好好排查下

腾讯课堂 appium 实操课程即将开课,https://ke.qq.com/course/394620 从这链接进去,点击邀请助力,分享到朋友圈让朋友帮忙助力下就可以免费获取 98 元的实战课程啦。欢迎参与哦

小白 回复

嗯 说的在理。

看楼主 android 版本为 7.1.2,但是你 automationName 没指定,所以为 appium 默认的 appium 参数,使用 appium 的是对 android7 的版本控件不识别的哈,加上这个试试 'automationName': 'uiautomator2',

文贤平 回复

加上了 运行报这个错:selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Cannot create property 'replace' on boolean 'true'

文贤平 回复

5.1.1 的模拟器是正常执行脚本的,暂时先用 5.1.1 版本的了,谢了哈

发现你的注册 appium 参数,怀疑你写错

我怀疑你打印 page_source 的时候是发现是一个 installer 的系统界面,并不是我们看到的这个界面
所以发现不了当前的元素

app 是不是 target 26 以上

同学,请问你解决这个问题了吗?
能不能分享下办法

同学,我也想问下, 这个问题解决了吗,我也碰到类似的问题了,就是无法定位到这个某个元素,只能定位到所在框的外面的大的元素,里面的元素怎么样也定位不到,我打印了 page_source, 也没有要定位的这个元素信息

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册