有一阵子在学习appium自动化的时候,遇到个很奇怪的问题:定位元素属性没问题,但执行点击事件的时候总是点击不到我需要点击的元素。原因是:我们定位执行点击事件时,页面元素还未加载完坐标位置不对,所以点击事件有所偏差。现将解决思路记下来,方便日后查看
思路:
1、循环获取元素的坐标位置
2、将获取的坐标位置添加到列表中
3、统计判断坐标位置是否多次出现,多次出现则执行点击事件
粗略的代码示例如下,这里只提供了解决思路可自行优化扩展:
from appium import webdriver
import time
desired_caps = {
"platformName":"Android",
"deviceName":"emulator-5554",
"platformVersion":"5.1.1",
"appPackage":"com.yipiao",
"appActivity":"com.zt.main.entrance.ZTLaunchActivity",
"noReset":True
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_caps)
time.sleep(3)
# 定义元素存放列表
element_list = []
for i in range(4):
# 获取元素的坐标位置
element = driver.find_element_by_xpath("//*[@text='订单']").location
element_list.append(str(element)) # 将坐标位置添加到列表中
if element_list.count(str(element)) > 1: # 判断列表坐标位置出现的次数是否大于1,大于则执行点击操作
driver.find_element_by_xpath("//*[@text='订单']").click()
break # 退出循环