在智能家居系统测试中,设备的开关按钮,要么是 imgeview,要么是 view,想通过 appium,获取打开、关闭时两者的属性值的变化,发现打开、关闭,属性值都没变化,没办法做打开、关闭的状态对比
如下图,这个控件是 imgeview 下图,这个控件是 view(开发自定义的) 请问大家遇到这种情况是怎么解决的?
可以使用 x,y 控制
+1
建议使用相对 x,y 控制,找一个稳定的参照物,这样比 x,y 绝对值稳定性高很多
uiautomator2 也可以
图像识别
如果是自家 app ,可以找开发加 contentDescription 属性以及根据开关状态切换这个 id 值的逻辑。
可以参照:https://developer.android.com/guide/topics/ui/accessibility/apps
你说的是坐标吗,控件可以定位到,问题是,点击按钮后,只有按钮颜色变了,控件坐标未变,这里用坐标实际可能不行,目前我已找到解决办法,就是控件的标记点位颜色变化
只是开发们都太懒 ,目前已经找到解决办法,通过控件的标记点位的颜色变化
# 本次多亏 @ 霍格沃兹 - 修然 指点
思路:控制前后,按钮中心坐标点的颜色不一致,利用此差异,来对比实现控制结果状态获取。 主要步骤: 先截屏保存,再通过获取控件坐标,计算出 中心坐标点 坐标值,然后使用 PIL 库 getpixel((x,y)) 方法,获取控制前后的颜色值,数值不同即说明状态有变化,APP 端控制结果成功。代码只说明获取颜色值。
from PIL import Image def test_linghuokaiguan(self): ''' 1,获取中心坐标点当前颜色状态值,如果前三个值为255,则说明为打开;如果前三个值为163,则说明为关闭 2,点击后,等待3s,再次获取该中心坐标点值,与点击前的值相比较,相同则说明打开成功(打开失败) 3,核对操作记录,进一步确认 ''' # APP启动后,等待房间元素可见,然后点击 WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*TestDevice.room_btn)).click() # 单开零火开关 快捷开关按钮可见 ele =WebDriverWait(self.driver, 10).until(lambda x: x.find_element(*TestDevice.zhinengdengdai)) time.sleep(3) # 定义图片存放路径路径 image_file = os.path.join(base_dir, '234.png') logging.info(base_dir) # 截屏保存图片 self.driver.get_screenshot_as_file(image_file) time.sleep(2) # 计算控件坐标 left = ele.location.get('x') logging.info(left) top = ele.location.get('y') logging.info(top) width = ele.size['width'] logging.info(width) height = ele.size['height'] logging.info(height) # 中心点坐标 left_1 = width/2 + left logging.info(left_1) top_1 = height/2 + top logging.info(top_1) # 打开并标识给定的文件 img1 = Image.open(image_file) # logging.info(img1.mode) img_piexl= img1.getpixel((left_1,top_1)) logging.info(img_piexl) '''