Appium appium+unittest+python 测试用例执行报错

April · 2018年01月09日 · 最后由 疯的蜗牛 回复于 2018年01月10日 · 1819 次阅读

class testSuiteForfd( unittest.TestCase ,MyDriver):
@classmethod
def setUpClass(self):
print("setUpClass\n")
self.d = self.getDriver()
startAccount(self.d)

@classmethod
def tearDownClass(self):
print("tearDownClass\n")
self.d.quit()

def test_openAccount_openAccount(self):
fCount = 0
try:
fCount = openAccount(self.d)
except Exception as e:
logger.exception(e)
print(e)
fCount += 1
self.d.quit()
self.d = self.getDriver()
finally:
self.assertEqual(fCount, 0)

def test_case2(self):
....

描述:为了执行一连串用例只打开一次应用,所以用了 setUpClass,但是这样如果用例异常(比如说在弹出弹框的时候报错),后面的用例都会执行报错。所以想在用例抛异常的时候关闭 driver,再建立新的 driver,但是还是报错找不到元素。
请问这种有没有什么解决办法

共收到 1 条回复 时间 点赞

如果让我这么做的话我会把 aseert 简单封装一下,在 catch 异常退出浏览器之后,再次调用启动浏览器共用方法,事先在 pageobject 中提供通用的进入该页面方法。 可能我的方法比较笨,哈哈哈。

import unittest
from selenium import webdriver

def newChrome(page):
    dr = webdriver.Chrome()
    ''''go to page'''
    print('open a new webdriver!')
    return dr

#将assert方法简单封装
def compare(msg, target, name, page, dr):
    try:
        assert msg == target
        print('%s pass \n'%name)
        return dr

    except Exception as e:
        print('an error occured in %s'%name)
        dr.quit()
        print('webdriver quit! \n')
        return newChrome(page)


#测试类DEMO
class Mytest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        self.dr = webdriver.Chrome()
        print('setUp')

    @classmethod  
    def tearDownClass(self):
        self.dr.quit()
        print('tearDown \n')

    def testcaseA(self):
        self.dr = compare('1', '1', 'testcaseA', 'page', self.dr)

    def testcaseB(self):
        self.dr = compare('1', '2', 'testcaseB', 'page', self.dr)

    def testcaseC(self):
        self.dr = compare('2', '2', 'testcaseC', 'page', self.dr)

if __name__ == '__main__':
    unittest.main()
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册