Appium appium+python3.x+PIL 根据控件的颜色判断控件的状态

huan · 2016年03月27日 · 最后由 huan 回复于 2016年09月18日 · 2531 次阅读

前言
相信大家在弄 ui 自动化时会遇到判断控件当前状态的需求,废话不说了,看下图,某订座(场)软件

需求分析
选择可预订的座(场)位,然后提交,走下支付流程
可预订状态的分析
可预订的座位和不可预订的座位 ID 什么鬼的都一样

还好两种状态的颜色不一样,一个灰色一个绿色,形成了鲜明对比,这样我们可以根据颜色来判断控件是不是可以预订的
代码实现
1.先使用 PIL 中 getpixel 方法获取目标状态的 RGBA 值,得到可预订状态的颜色(绿色)值为 (106, 212, 73, 255)
2.用 ID 查找方法,找到所有的座位
3.截取当前屏幕的图片,以 png 格式保存至本地
4.使用 PIL 打开该图片
5.用 location.get() 获取控件起点,再用 size.get() 获取长和宽,算出单个控件的左上角坐和右下角坐标
6.根据控件坐标使用 PIL 的 crop 截取控件的截图,然后使用 PIL 的 getpixel 获取控件某个点的像素值
7.获取到的像素值再与目标值对比就OK了

fix_rgba = (106, 212, 73, 255)
els = dr.find_elements_by_id("ID")
dr.get_screenshot_as_png("F:\\temp\\temp.png")
pig = Image.open("F:\\temp\\temp.png")
for el in els:
    x1 = el.location.get("x")
    y1 = el.location.get("y")
    h = el.size.get("height")
    w = el.size.get("width")
    x2 = x1 + w
    y2 = y1 + h
    el_img = pig.crop(box=(x1, y1, x2, y2))
    el_rgba = el_img.getpixel((54, 32))
    if el_rgba == fix_rgba:
        el.click()

PIL 库安装
PIL 官网 [http://pillow.readthedocs.org/en/3.0.x/index.html]
快速入门 [http://pillow-cn.readthedocs.org/zh_CN/latest/handbook/tutorial.html#]
安装方法

pip install Pillow
共收到 5 条回复 时间 点赞

留名,备用~

留爪,备用,很不错哦

如果当控件含有透明度时,取出来的 rgba 就不准确了?我测试了下取出来的透明度显示都是为 255,如:(233, 144, 165, 255) ,相对应的 rgb 值就不正确了,请问下有办法解决吗?

huan #5 · 2016年08月19日 Author

#4 楼 @wangquansheng 照理来说是对一张图片某个点取值,应该不关透明度什么事,你试试保存为 jpg 再取值试试

huan [该话题已被删除] 中提及了此贴 09月18日 17:53
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册