iOS Test Error: NSArrayM insertObject:atIndex

iOS Test Error: NSArrayM insertObject:atIndex,第1张

NSArrayM insertObject:atIndex

环境

原来测试环境:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存