Appium python+appium 在报错或者断言失败时怎么自动截图?

usky · 2017年06月01日 · 最后由 哇了个哇 回复于 2021年08月20日 · 1250 次阅读

在做自动化脚本开发,使用的 unittest 框架, 只想在断言失败的时候截图。下面这个例子无论成功或失败都会触发指定的函数,请问怎么修改,只在失败的时候触发函数呢?

import unittest
class loginTests(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        pass

    @classmethod
    def tearDownClass(cls):
        pass

    def aaa(self):
        print('触发函数')

    def test1(self):
        i =2
        self.assertEqual(i,1,self.aaa())

if __name__ == '__main__':
    unittest.main()
共收到 6 条回复 时间 点赞
try:
     self.assertTrue(self.driver.find_element_by_name(u'xxxxxx'))
except Exception as msg:
      print (msg)
      public.screenshot("error.png")

其中断言部分可根据实际情况修改
截图部分也需要自己修改,我这段是调用的公共方法

可以使用装饰器:

def getImage(function):
    @wraps(function)
    def get_ErrImage(self,*args, **kwargs):      
        try:
            result = function(self,*args, **kwargs)
        except:
            timestr = time.strftime("%Y-%m-%d_%H_%M_%S")
            self.dr.get_screenshot_as_file('E:\\Appium\\Mailchat\\image\\getscreen\\%s %s.png' %
                                           (function.__name__timestr))
        else:
            logging.info (" %s 脚本运行正常" %
                (function.__name__)
                )
        return result
    return get_ErrImage

使用:

class myInitiate_addOppionTest(unittest.TestCase):

    def setUp(self):
        public.setUp.setUp(self)

    def tearDown(self):
        self.dr.quit()

    @getImage
    def test_myInitiate_addOppion(self):
        go_loginPage(self)   #访问登录页

if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(myInitiate_addOppionTest)
    unittest.TextTestRunner(verbosity=2).run(suite)

感谢二楼,学会了装饰器~

五棵木 回复

如果一个 py 包含多个 testcase 好像只能执行一个,去掉 return result 就好了

五棵木 回复

我使用了装饰器的方法,比如找不到元素时不会截图,一直就卡在这步骤不会向下执行

nic 回复

后面如何解决的

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