环境
原来测试环境:
macOS 系统电脑:10.13.6Xcode:13.1Appium Desktop 1.21.0升级后测试环境:
macOS 系统电脑:11.3.1Xcode:13.2问题描述
存在一些元素,对于 find_element_by_name(name).click() 不生效点击app与系统交互的d框,出现报错
排查
首先想从根源找问题原因,尝试重启所有涉及到的设备和服务,没有解决。
发现系统升级后,猜测是当前这个bug应该是系统、Xcode升级引起,考虑修改测试代码,规避报错和点击失效。
原来都是通过 find_element_by_name 找到元素后并点击,现在改成直接点击坐标。
解决思路
每次点击前,获取 driver 的属性 page_source,在里面检查是否存在name如果存在想要找的name,就通过正则匹配到该行数据,解析提取出该元素的坐标通过driver 直接点击坐标,来取代 find_element_by_name(name).click() 实现点击元素针对遇到的问题,用下面代码可以获得想要点击元素的中心点坐标,然后直接点击,可以规避报错、达到点击的效果
def get_element_coordinate(driver, name):
if hasattr(driver, 'page_source'):
page_source = driver.page_source
ret_list = re.findall(f"[{name})(.*)[/>]" , page_source)
if len(ret_list) >= 1:
name_str = f'name="{name}"'
element_str_list = [''.join(i) for i in ret_list]
for element_str in element_str_list:
if name_str in element_str and 'button' in element_str.lower():
x = re.findall(r' x="(\d+)"', element_str)[0]
y = re.findall(r' y="(\d+)"', element_str)[0]
width = re.findall(r' width="(\d+)"', element_str)[0]
height = re.findall(r' height="(\d+)"', element_str)[0]
x, y, width, height = [int(i) for i in [x, y, width, height]]
ele_coordinate = (x + width / 2, y + height / 2)
return True, ele_coordinate
return False, None
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)