在做自动化的过程中,大多数执行者都不在旁边,那么如果用例失败了我们通常看报告上的失败信息,但是这样有时候可能不够清楚的判断到底哪里出了错误,我们还可以通过自动截图的功能,判断用例走到哪里出了错误。
截图方法
在自动化中截图方法有几种,我们一个个来看,那种最适合我们。
方法1:get_screensho t_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的截图大致就是通过抛异常的方法捕捉错误,然后加上截图功能。保存在指定目录中。
如果感觉安静写的对您有所帮助,可以右下角点个关注,点关注,不迷路~~