<unittest学习10>unittest错误截图

截图方法

在自动化中截图方法有几种,我们一个个来看,那种最适合我们。

方法1:get_screenshot_as_file(self,filename)

通过屏幕进行截图保存在对应路径中

复制代码
def get_screenshot_as_file(self, filename):
        """
    将当前窗口的屏幕快照保存到PNG图像文件中。返回
如果有IOError,则为False,否则返回True。使用完整路径
你的文件名。
        """
        if not filename.lower().endswith('.png'):
            warnings.warn("name used for saved screenshot does not match file "
                          "type. It should end with a `.png` extension", UserWarning)
        png = self.get_screenshot_as_png()
        try:
            with open(filename, 'wb') as f:
                f.write(png)
        except IOError:
            return False
        finally:
            del png
        return True
复制代码

上面的源码中提示了我们如何进行使用,那么我们直接通过unittest进行开始操作吧

异常截图

复制代码
# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
    def setUp(self):
        desired_caps = {
                         'platformName': 'Android',  # 测试版本
                         'deviceName': 'emulator-5554',   # 设备名
                         'platformVersion': '5.1.1', # 系统版本
                        "appPackage": "com.taobao.taobao",   # app包名
                        "appActivity": "com.taobao.tao.welcome.Welcome",   # 启动launch Activity
                        "noReset": True,  # 不清空数据
                        "unicodeKeyboard": True,    # 使用Unicode编码方式发送字符串
                        "resetKeyboard": True,      # 键盘隐藏起来
                                }
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    def test01(self):
        try:
            text = 'text("注册/登录1")'
            self.driver.find_element_by_android_uiautomator(text).click()
        except Exception as msg:
            print('报错信息:%s'%msg)
            # 截图
            self.driver.get_screenshot_as_file('123.png')
    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
if __name__ == '__main__':
    unittest.main()
复制代码

打开appium进行执行脚本,脚本执行后,查看我们脚本的当前目录,就会发现我们的截图已经成功的保存在当前目录了

 

方法2:save_screenshot(‘filename')

通过源码我们可以看到调用的还是上门的方法,但是我们一样也可以使用

复制代码
 def save_screenshot(self, filename):
        """
       将当前窗口的屏幕快照保存到PNG图像文件中。返回
如果有IOError,则为False,否则返回True。使用完整路径
你的文件名。
        """
        return self.get_screenshot_as_file(filename)
复制代码

异常截图

复制代码
# coding:utf-8
from appium import webdriver
import unittest
import time
class test(unittest.TestCase):
    def setUp(self):
        desired_caps = {
                         'platformName': 'Android',  # 测试版本
                         'deviceName': 'emulator-5554',   # 设备名
                         'platformVersion': '5.1.1', # 系统版本
                        "appPackage": "com.taobao.taobao",   # app包名
                        "appActivity": "com.taobao.tao.welcome.Welcome",   # 启动launch Activity
                        "noReset": True,  # 不清空数据
                        "unicodeKeyboard": True,    # 使用Unicode编码方式发送字符串
                        "resetKeyboard": True,      # 键盘隐藏起来
                                }
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    def test01(self):
        try:
            text = 'text("注册/登录1")'
            self.driver.find_element_by_android_uiautomator(text).click()
        except Exception as msg:
            print('报错信息:%s'%msg)
            # 方法2:
            self.driver.save_screenshot('222.png')

    def tearDown(self):
        time.sleep(3)
        self.driver.quit()
if __name__ == '__main__':
    unittest.main()
复制代码

同样的执行后,会在当前目录中发现设备已经截图了。

 

其他的截图方法

复制代码
# 保存的是base64的方法。一般用在html的时候。

def get_screenshot_as_base64(self):
        """
   以base64编码的字符串获取当前窗口的屏幕截图
这是有用的嵌入式图像在HTML。
        """
        return self.execute(Command.SCREENSHOT)['value']


# 截图屏幕,以二进制的方法进行保存

def get_screenshot_as_png(self):
        """
以二进制数据的形式获取当前窗口的屏幕截图。
        """
        return base64.b64decode(self.get_screenshot_as_base64().encode('ascii'))
复制代码

 

总结:unittest的截图大致就是通过抛异常的方法捕捉错误,然后加上截图功能。保存在指定目录中。

posted @ 2021-06-01 15:26  陈晓猛  阅读(146)  评论(0编辑  收藏  举报