Appium app自动化测试经验分享-图片内文字的断言

之前,在断言心得第二篇分享中,我自己想到的一个问题,地图类App如何做断言?

现在详细描述下情景:对地图导航类app进行放大与缩小时【选择不同缩放级别】,如何对前后不同界面进行断言?想到的方法就是断言比例尺。

这次来分享下经验:1.多点触控,实现地图缩放;2.由于比例尺没能通过uiautomatorviewer/Appium的Inspector定位到,想到截图之后识别文字,再作断言;3.识别不到比例尺的内容,决定先裁剪图片,再识别;4.断言的几种思路。

一)地图缩放 多点触控

MultiAction 是多点触控的类,用来模拟用户多点操作。主要包含 add() 和 perform() 两个方法, MultiAction要结合TouchAction才能模拟出用户的多个手指滑动的操作效果【地图缩放】;

第一种 多点触控的方法:放大地图

    def duoDian(self):
        """多点触控"""
        # 实际这用例是模拟手指从左上角、右下角往中间并拢的情景
        # 虽然手指一般不会超过中间点,但是脚本设置可以超过

        from appium.webdriver.common.multi_action import MultiAction
        from appium.webdriver.common.touch_action import TouchAction

        x1 = self.driver.get_window_size()['width']
        y1 = self.driver.get_window_size()['height']

        a1 = TouchAction(self.driver)
        a1.press(x=x1 * 0.2, y=y1 * 0.2).wait(400).move_to(x=x1 * 0.75, y=y1 * 0.75).release()
        # press() move_to()用的是坐标位置,非元素
        # wait() 模拟真实滑动使用时间

        a2 = TouchAction(self.driver)
        a2.press(x=x1 * 0.8, y=y1 * 0.8).wait(400).move_to(x=x1 * 0.25, y=y1 * 0.25).release()

        a3 = MultiAction(self.driver)
        a3.add(a1, a2)
        a3.perform()

第二种 多点触控的方法:缩小地图

    def duoDian_2(self):
        """多点触控"""
        # 实际这用例是模拟手指从中间线的上面、下面往中间并拢的情景
        # 虽然手指一般不会超过中间点,但是脚本设置可以超过

        from appium.webdriver.common.multi_action import MultiAction
        from appium.webdriver.common.touch_action import TouchAction

        x1 = self.driver.get_window_size()['width']
        y1 = self.driver.get_window_size()['height']

        a1 = TouchAction(self.driver)
        a1.press(x=x1 * 0.5, y=y1 * 0.45).wait(400).move_to(x=x1 * 0.5, y=y1 * 0.2).release()
        # press() move_to()用的是坐标位置,非元素
        # wait() 模拟真实滑动使用时间

        a2 = TouchAction(self.driver)
        a2.press(x=x1 * 0.5, y=y1 * 0.55).wait(400).move_to(x=x1 * 0.5, y=y1 * 0.8).release()

        a3 = MultiAction(self.driver)
        a3.add(a1, a2)
        a3.perform()

二)截图,裁剪图片

在把前后截图保存后,利用Tesseract直接进行识别的时候,发现几乎百分百 无法识别我想要的比例尺,先给大家看下识别后的结果:

在这里插入图片描述
思路改变为 裁剪所保存的截图,只把比例尺那一小部分 截取出来再进行识别。

三) 识别图片内的文字,断言

    def shiBie(self, path):
        from PIL import Image
        import pytesseract

        img = Image.open(path)      # 加载原始图片

        width = img.size[0]
        height = img.size[1]

        # 可以只截取比例尺那一点点
        img = img.crop((150, height - 300,  width - 720, 1750))     # crop()的尺寸 根据手机分辨率有改变
        img.save('D:\last.png')

        text = pytesseract.image_to_string(Image.open('D:\last.png'), lang='chi_sim')
        return text

实际用例设计及打印的识别结果:
在这里插入图片描述

看下截取比例尺那一部分的先后不同截图结果的 第一种:

1A
【100米 是默认】

在这里插入图片描述

第二种:
在这里插入图片描述
在这里插入图片描述

断言

最初决定练习的时候,我想到的是判断‘米’、‘公里’存在是否,读取后对前面那数字进行不相等比较;在看到实际识别结果后,很有可能出现识别失败内容不清楚(内容不符合,和比例尺无关的),我觉得要更换思路:直接对前后识别内容进行对比,判断是否相等【我相信:相同内容识别结果肯定相等】。

再深入想想后,觉得可以多次缩放,把每次识别后的内容都与前一次进行对比,总有机会完全识别得。当然这时候,只要把读取的str进行切片后断言前几个字,这应该最符合我最初的需要。
在这里插入图片描述

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

发布了78 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/87974737
今日推荐