Appium Python + Appium 1.2.2, 如何为 element 截屏?

Alex · 2014年09月12日 · 最后由 Anson 回复于 2014年09月23日 · 3128 次阅读
本帖已被设为精华帖!

在 Python 里利用了 PIL.Image 这个模块,其中的 image.crop() 方法,PIL 是一个自带模块。

def capture(self, what):              #waht是webelement
        begin = what.location
        size = what.size
        start_x = begin['x']
        start_y = begin['y']
        end_x = start_x + size['width']
        end_y = start_y + size['height']
        name = str(start_x)+'_'+str(start_y)+'_'+str(end_x)+'_'+str(end_y)
        box = (start_x, start_y, end_x, end_y)
        self.driver.get_screenshot_as_file(tmp + '/' + 'full_screen.png')
        image = Image.open(tmp + '/' + 'full_screen.png')        #tmp是临时文件夹
        newimage = image.crop(box)
        newimage.save(tmp + '/' + name + '.png')
        os.popen('rm %s/full_screen.png' %tmp)

主要思路是先截取整个屏幕,这个 Appium 自带的 get_screenshot_as_file() 就可以实现,然后根据 element 的坐标在大图中截取 element 的部分。

共收到 7 条回复 时间 点赞

box 需要手动输入,想下怎么获取 element 的 bounds 属性

Alex #1 · 2014年09月12日 Author

这个 box 就是直接从 element 里拿到的,不需要手动输入

@ianxiaohanxu 这样对比起来还是很方便的,麻烦的就是先要运行代码预先截取好图片用来做对比用

Alex #4 · 2014年09月13日 Author

对于图片的 verify 问题,总是没有 verify text 那样方便,如果我们能研究出更好的办法就造福子孙啦

匿名 #5 · 2014年09月15日


为什么我截出来的都是空白的,这个地方是一个密码输入框,上面还有 “密码” 两个字咋截不到啊?

Alex #6 · 2014年09月15日 Author

#5 楼 @link1220
恩,这段代码我是在 android 上试的,还是挺好用的。
对于你那不成功,可以先用 uiautomatorview 看一下要截取 element 的属性,看看它的坐标是否正确,再单独调用 element.location, element.size, 看看这两个返回的值是不是和 uiautomatorview 看到的一致。这段代码的关键是 box 的获取和 image.crop 的运用,可以根据自己的需求进行调整

#3 楼 @xuxu
图形对比,是不是可以使用 sikulix 来解决?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册