class TestLogin(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(GlobalConfig.globaldevice) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(GlobalConfig.globaldevice) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass #页面元素检查 def defineloginpage(self, outtestcasediscription=None, outprepagetext=None): if outprepagetext == None: prepagetext = 'Log in' else: prepagetext = outprepagetext if outtestcasediscription == None: testcasediscription = '测试用例' else: testcasediscription = outtestcasediscription preele = self.baseframe.findbytext( prepagetext) # 确认有显示文字“QRindo-Merchant” self.assertTrue(preele) print("%s_%s.---测试通过" % (testcasediscription, prepagetext)) @staticmethod #根据不同的参数生成测试用例 def getTestFunc(outtestcasediscription, outprepagetext): def func(self): self.defineloginpage(outtestcasediscription, outprepagetext) return func
class TestLogin(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(outdevice=TestDeviceID) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(outdevice=TestDeviceID) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass #登录的测试方法 def definelogin(self, outtestcasediscription=None, isStartApp=False, isclickloginwithpassword=False, outphonenumberinput=None, outpwdinput=None, outprepagetext=None, outpretoastmessage=None, outexceptiontext=None): # packagename = "com.ahdi.qrindo.merchant" # phonenumberid = "com.ahdi.qrindo.merchant:id/et_phonenumber" if outphonenumberinput == None: phonenumberinput = '81122336666' else: phonenumberinput = outphonenumberinput # pwdid = "com.ahdi.qrindo.merchant:id/et_pwd" if outpwdinput == None: pwdinput = "abc123456" else: pwdinput = outpwdinput # loginbuttonid = "com.ahdi.qrindo.merchant:id/btn_login" loginbuttonid = "com.ahdi.qrindo.merchant:id/btn_login" if outtestcasediscription == None: testcasediscription = '测试用例' else: testcasediscription = outtestcasediscription if isStartApp: self.baseframe.startapp(AppPackageName) if isclickloginwithpassword: self.baseframe.findbyresourceId_and_click(OTPLogInWithPasswordId) self.baseframe.findbyresourceId_and_input(AccountInputId, phonenumberinput) # 输入账号 self.baseframe.findbyresourceId_and_input(PasswordInputId, pwdinput) # 输入密码 pretoastmessage = self.baseframe.findbyresourceId_and_click( LoginButtonId, outpretoastmessage=outpretoastmessage) # 点击登录按钮 if pretoastmessage == None: if outprepagetext == None: prepagetext = None else: prepagetext = outprepagetext if prepagetext == None: self.assertTrue( False, '断言错误,请填写预期显示控件的text内容,即确保outprepagetext字段内容不为None,然后再运行测试用例' ) else: preele = self.baseframe.findbytext( prepagetext) # 确认有显示文字“QRindo-Merchant” self.assertTrue(preele) else: toastmessage = self.baseframe.getToast() self.assertEqual(pretoastmessage, toastmessage) if outexceptiontext == 'OK': print("") elif outexceptiontext == 'Login': eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Login') self.assertFalse(eleenable) elif outexceptiontext == 'Try again': self.baseframe.findbytext_and_click(outexceptiontext) print("%s.---测试通过" % testcasediscription) @data( ("账号密码错误提示", True, True, "81234567891234", "123456", "Incorrect account number or login password. Please try again(PP001)", None, "Try again"), ("登录账号长度小于8位,login按钮置灰", False, False, "1234567", "123456", "Login", None, "Login"), ("密码长度小于6位,login按钮置灰", False, False, "12345678", "12345", "Login", None, "Login"), ("非8或08开头的账号提示非印尼号", False, False, "12345678", "123456", "Login", "You have entered an invalid Indonesia number", None), ("正确的账号密码登录成功", False, False, "81122336666", "abc123456", "Show all", None, None)) @unpack def test_login(self, outtestcasediscription, isStartApp, isotplogin, outphonenumberinput, outpwdinput, outprepagetext, outpretoastmessage, outexceptiontext): self.definelogin(outtestcasediscription, isStartApp, isotplogin, outphonenumberinput, outpwdinput, outprepagetext, outpretoastmessage, outexceptiontext)
class TestLogin(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(GlobalConfig.globaldevice) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(GlobalConfig.globaldevice) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass #登录的测试方法 def definelogin(self, outtestcasediscription=None, outphonenumberinput=None, outpwdinput=None, outprepagetext=None, outpretoastmessage=None, outexceptiontext=None): packagename = "com.ahdi.qrindo.merchant" phonenumberid = "com.ahdi.qrindo.merchant:id/et_phonenumber" if outphonenumberinput == None: phonenumberinput = '81122336666' else: phonenumberinput = outphonenumberinput pwdid = "com.ahdi.qrindo.merchant:id/et_pwd" if outpwdinput == None: pwdinput = "abc123456" else: pwdinput = outpwdinput loginbuttonid = "com.ahdi.qrindo.merchant:id/btn_login" if outtestcasediscription == None: testcasediscription = '测试用例' else: testcasediscription = outtestcasediscription self.baseframe.startapp(packagename) self.baseframe.findbyresourceId_and_input(phonenumberid, phonenumberinput) # 输入账号 self.baseframe.findbyresourceId_and_input(pwdid, pwdinput) # 输入密码 pretoastmessage = self.baseframe.findbyresourceId_and_click( loginbuttonid, outpretoastmessage=outpretoastmessage) # 点击登录按钮 if pretoastmessage == None: if outprepagetext == None: prepagetext = None else: prepagetext = outprepagetext if prepagetext == None: self.assertTrue( False, '断言错误,请填写预期显示控件的text内容,即确保outprepagetext字段内容不为None,然后再运行测试用例' ) else: preele = self.baseframe.findbytext( prepagetext) # 确认有显示文字“QRindo-Merchant” self.assertTrue(preele) else: toastmessage = self.baseframe.getToast() self.assertEqual(pretoastmessage, toastmessage) if outexceptiontext == 'OK': print("") elif outexceptiontext == 'Log in': eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Log in') self.assertFalse(eleenable) print("%s.---测试通过" % testcasediscription) @staticmethod #根据不同的参数生成测试用例 def getTestFunc(outtestcasediscription, outphonenumberinput, outpwdinput, outprepagetext, outpretoastmessage, outexceptiontext): def func(self): self.definelogin(outtestcasediscription, outphonenumberinput, outpwdinput, outprepagetext, outpretoastmessage, outexceptiontext) return func @unittest.skip('test_020') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_020(self): """ 正确的账号和密码,登录成功 """ outadborder = None outphonenumberid = None outphonenumberinput = None outpwdid = None outpwdinput = None outloginbuttonid = None outprepagetext = 'QRindo-Merchant' outpretoastmessage = None self.definelogin(outprepagetext=outprepagetext) print("已经注册商户的正确的钱包账号和密码,登录成功.---测试通过")
class TestSettings(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(outdevice=TestDeviceID) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(outdevice=TestDeviceID) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass #登录的测试方法 def defineclickandbackandlogout(self, outtestcasediscription=None, issettings=False, islogout=False, outclickelementtext=None): if outtestcasediscription == None: testcasediscription = '测试用例' else: testcasediscription = outtestcasediscription if outclickelementtext == None: clickelementtext = "My QR" else: clickelementtext = outclickelementtext if issettings: self.baseframe.findbytext_and_click("Settings") if islogout: self.baseframe.findbytext_and_click("Log Out") self.baseframe.findbytext_and_click("Log Out") self.baseframe.findbytext(outclickelementtext) else: self.baseframe.findbytext_and_click(clickelementtext) self.baseframe.delaytime(5) self.baseframe.clickback() self.baseframe.findbytext("Settings") print("%s.---测试通过" % testcasediscription) @data(("点击Settings进入Settings页,点击ChangeLoginPassword后返回Settings", True, False, "Change Login Password"), ("点击ChangeTransactionPIN后返回Settings", False, False, "Change Transaction PIN"), ("点击AboutQRindo后返回Settings", False, False, "About QRindo"), ("点击Help后返回Settings", False, False, "Help"), ("点击Logout登出", False, True, "Login")) @unpack def test_clickandbackandlogout(self, outtestcasediscription, issettings, islogout, outclickelementtext): self.defineclickandbackandlogout(outtestcasediscription, issettings, islogout, outclickelementtext)
class TestLogout(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): cls.baseframe = BaseFrame(GlobalConfig.globaldevice) cls.baseframe.findbyresourceId_and_click( "com.ahdi.qrindo.merchant:id/iv_cashier_right_top") # 点击页面右上角的更多图标 cls.baseframe.findbyresourceId_and_click( "com.ahdi.qrindo.merchant:id/tv_my_account") # 点击设置选项 pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(GlobalConfig.globaldevice) #实例化 #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 pass def define_loggout(self, outlogouttext=None, outlogoutconfirmtext=None, outpretext=None): if outlogouttext == None: logouttext = "Log Out" else: logouttext = outlogouttext if outlogoutconfirmtext == None: logoutconfirmtext = "Log Out" else: logoutconfirmtext = outlogoutconfirmtext if outpretext == None: pretext = "Log in" else: pretext = outpretext self.baseframe.findbytext_and_click(logouttext) # 点击登出 self.baseframe.findbytext_and_click(logoutconfirmtext) # 点击登出 preele = self.baseframe.findbytext(pretext) # 确认有显示文字“Log in” self.assertTrue(preele) # @unittest.skip('test_001') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_001(self): """ 点击登出,退出到登录页 """ logouttext = "Log Out" logoutconfirmtext = "Cancel" pretext = "Log Out" self.define_loggout(outlogouttext=logouttext, outlogoutconfirmtext=logoutconfirmtext, outpretext=pretext) # @unittest.skip('test_002') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_002(self): """ 点击登出,退出到登录页 """ logouttext = "Log Out" logoutconfirmtext = "Log Out" pretext = "Log in" self.define_loggout(outlogouttext=logouttext, outlogoutconfirmtext=logoutconfirmtext, outpretext=pretext)
class TestLogin(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(GlobalConfig.globaldevice) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(GlobalConfig.globaldevice) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass def definelogin(self, outadborder=None, outphonenumberid=None, outphonenumberinput=None, outpwdid=None, outpwdinput=None, outloginbuttonid=None, outprepagetext=None, outpretoastmessage=None): if outadborder == None: adborder = "com.ahdi.qrindo.merchant" else: adborder = outadborder if outphonenumberid == None: phonenumberid = "com.ahdi.qrindo.merchant:id/et_phonenumber" else: phonenumberid = outphonenumberid if outphonenumberinput == None: phonenumberinput = '81122336666' else: phonenumberinput = outphonenumberinput if outpwdid == None: pwdid = "com.ahdi.qrindo.merchant:id/et_pwd" else: pwdid = outpwdid if outpwdinput == None: pwdinput = "abc123456" else: pwdinput = outpwdinput if outloginbuttonid == None: loginbuttonid = "com.ahdi.qrindo.merchant:id/btn_login" else: loginbuttonid = outloginbuttonid # self.baseframe.adbshell(adborder) # self.baseframe.findbytext_and_click(adborder) self.baseframe.startapp(adborder) self.baseframe.findbyresourceId_and_input(phonenumberid, phonenumberinput) # 输入账号 self.baseframe.findbyresourceId_and_input(pwdid, pwdinput) # 输入密码 pretoastmessage = self.baseframe.findbyresourceId_and_click( loginbuttonid, outpretoastmessage=outpretoastmessage) # 点击登录按钮 if pretoastmessage == None: if outprepagetext == None: prepagetext = None else: prepagetext = outprepagetext if prepagetext == None: self.assertTrue( False, '断言错误,请填写预期显示控件的text内容,即确保outprepagetext字段内容不为None,然后再运行测试用例' ) else: preele = self.baseframe.findbytext( prepagetext) # 确认有显示文字“QRindo-Merchant” self.assertTrue(preele) else: toastmessage = self.baseframe.getToast() self.assertEqual(pretoastmessage, toastmessage) # @unittest.skip('test_020') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_020(self): """ 正确的账号和密码,登录成功 """ outadborder = None outphonenumberid = None outphonenumberinput = None outpwdid = None outpwdinput = None outloginbuttonid = None outprepagetext = 'QRindo-Merchant' outpretoastmessage = None self.definelogin(outprepagetext=outprepagetext) print("已经注册商户的正确的钱包账号和密码,登录成功.---测试通过") # @unittest.skip('test_001') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_001(self): """ 非8或08开头的手机 """ outadborder = None outphonenumberid = None outphonenumberinput = '1122336666' outpwdid = None outpwdinput = '123456' outloginbuttonid = None outprepagetext = None outpretoastmessage = 'You have entered an invalid Indonesia number' self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outpretoastmessage=outpretoastmessage) print( "非8或08开头的手机号登录,toast提示 'You have entered an invalid Indonesia number'.---测试通过" ) # @unittest.skip('test_002') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_002(self): """ 正确的钱包账号和密码,非商户 """ outadborder = None outphonenumberid = None outphonenumberinput = '81122337788' outpwdid = None outpwdinput = 'a123456' outloginbuttonid = None outprepagetext = 'Login account is not bound to the merchant(MC320)' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) self.baseframe.findbytext_and_click('OK') print( "没有注册商户的正确的钱包账号和密码,登录提示'Login account is not bound to the merchant(MC320)'.---测试通过" ) # @unittest.skip('test_003') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_003(self): """ 未注册的印尼手机号码 """ outadborder = None outphonenumberid = None outphonenumberinput = '86754893987' outpwdid = None outpwdinput = 'a123456' outloginbuttonid = None outprepagetext = 'Incorrect account number or login password. Please try again(PP001)' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) self.baseframe.findbytext_and_click('OK') print( "没有注册商户的钱包账号登录,提示'Incorrect account number or login password. Please try again(PP001)'.---测试通过" ) # @unittest.skip('test_004') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_004(self): """ 已注册的账号,错误的密码及锁定 """ for i in range(0, 5): outadborder = None outphonenumberid = None outphonenumberinput = '833669911' outpwdid = None outpwdinput = '123456' outloginbuttonid = None outprepagetext = 'Incorrect account number or login password. Please try again(PP001)' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) self.baseframe.findbytext_and_click('OK') print('密码错误%s此---' % str(i + 1)) outadborder = None outphonenumberid = None outphonenumberinput = '833669911' outpwdid = None outpwdinput = '123456' outloginbuttonid = None outprepagetext = 'Login password entered incorrectly too many times. Please wait 5hours 60mins before trying again or reset password(PP013)' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) self.baseframe.findbytext_and_click('OK') print( "正确的钱包账号,错误的密码,提示'Incorrect account number or login password. Please try again(PP001)',错误第五次后提示 'Login password entered incorrectly too many times. Please wait 5hours 60mins before trying again or reset password(PP013)'.---测试通过" ) # @unittest.skip('test_005') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_005(self): """ 账号长度输入小于8位,密码位数等于6位,登录按钮置灰不可用 """ outadborder = None outphonenumberid = None outphonenumberinput = '1234567' outpwdid = None outpwdinput = '123456' outloginbuttonid = None outprepagetext = 'Log in' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Log in') self.assertFalse(eleenable) print("账号长度输入小于8位,密码位数等于6位,登录按钮置灰不可用.---测试通过") # @unittest.skip('test_006') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_006(self): """ 账号长度输入等于8位,密码位数小于6位,登录按钮置灰不可用 """ outadborder = None outphonenumberid = None outphonenumberinput = '12345678' outpwdid = None outpwdinput = '12345' outloginbuttonid = None outprepagetext = 'Log in' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Log in') self.assertFalse(eleenable) print("账号长度输入等于8位,密码位数小于6位,登录按钮置灰不可用.---测试通过") # @unittest.skip('test_007') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_007(self): """ 账号长度输入大于13位时,密码位数等于6位,登录按钮置灰不可用 """ outadborder = None outphonenumberid = None outphonenumberinput = '12345678901234' outpwdid = None outpwdinput = '123456' outloginbuttonid = None outprepagetext = 'Log in' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Log in') self.assertFalse(eleenable) print("账号长度输入大于13位时,密码位数等于6位,登录按钮置灰不可用.---测试通过") # eleinfo_text = self.baseframe.findbyresourceId_and_return_text("com.ahdi.qrindo.merchant:id/et_phonenumber") # textlong = len(eleinfo_text) # print("textlong:",textlong ) # self.assertEqual(textlong,14) # @unittest.skip('test_008') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_008(self): """ 账号长度输入等于13位时,密码位数大于24位,登录按钮置灰不可用 """ outadborder = None outphonenumberid = None outphonenumberinput = '1234567890123' outpwdid = None outpwdinput = '1234567890123456789012345' outloginbuttonid = None outprepagetext = 'Log in' outpretoastmessage = None self.definelogin(outphonenumberinput=outphonenumberinput, outpwdinput=outpwdinput, outprepagetext=outprepagetext) eleenable = self.baseframe.findbytext_and_return_enabledstatus( 'Log in') self.assertFalse(eleenable) print("账号长度输入等于13位时,密码位数大于24位,登录按钮置灰不可用.---测试通过")
class TestHome(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): # cls.d = u2.connect('192.168.199.168') # cls.d = u2.connect_usb('127.0.0.1:62025') cls.watcherframe = WatcherFrame(outdevice=TestDeviceID) #实例化 cls.watcherframe.new_create_watcher() cls.watcherframe.new_create_watcher(outwatchername='OK', outconditiontextname='OK', outclicktextname='OK') cls.watcherframe.start_watcher() print('\n') pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): print('\n') cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.baseframe = BaseFrame(outdevice=TestDeviceID) #实例化 print('\n') #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print('\n') pass #登录的测试方法 def defineclickandback(self, outtestcasediscription=None, ishomeorme=None, outclickelementtext=None): if outtestcasediscription == None: testcasediscription = '测试用例' else: testcasediscription = outtestcasediscription if ishomeorme == None: homeorme = "Home" else: homeorme = ishomeorme if outclickelementtext == None: clickelementtext = "My QR" else: clickelementtext = outclickelementtext self.baseframe.findbytext_and_click(homeorme) self.baseframe.findbytext_and_click(clickelementtext) self.baseframe.delaytime(5) self.baseframe.clickback() self.baseframe.findbytext(homeorme) print("%s.---测试通过" % testcasediscription) @data(("点击MYOR然后返回Home页", "Home", "My QR"), ("点击TopUp然后返回Home页", "Home", "Top Up"), ("点击History然后返回Home页", "Home", "History"), ("点击ShowAll然后返回Home页", "Home", "Show all"), ("点击Balance然后返回Me页", "Me", "Balance"), ("点击BankCard然后返回Me页", "Me", "Bank Card"), ("点击BankAccount然后返回Me页", "Me", "Bank Account"), ("点击IdentityVerification然后返回Me页", "Me", "Identity Verification"), ("点击Settings然后返回Me页", "Me", "Settings")) @unpack def test_clickandback(self, outtestcasediscription, ishomeorme, outclickelementtext): self.defineclickandback(outtestcasediscription, ishomeorme, outclickelementtext)
class TestTips(unittest.TestCase): # 创建测试类 @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为setUpClass def setUpClass(cls): cls.watcherframe = WatcherFrame(GlobalConfig.globaldevice) #实例化 cls.watcherframe.start_all_watchers() pass @classmethod # 类方法,只执行一次,但必须要加注解@classmethod,且名字固定为tearDownClass def tearDownClass(cls): cls.watcherframe.close_all_watchers() pass def setUp(self): # 每条用例执行测试之前都要执行此方法 self.watcherframe = WatcherFrame(GlobalConfig.globaldevice) #实例化 self.baseframe = BaseFrame(GlobalConfig.globaldevice) #实例化 print("测试用例开跑-----------------------------------------------") #pass def tearDown(self): # 每条用例执行测试之后都要执行此方法 print("测试用例跑完-----------------------------------------------") pass def define_tips(self, outtipooptionsid=None, outoptiontext=None, outfixedfeeinputid=None, outfixedfeeinputtext=None, outfixedfeeconfirmid=None, outpercentagefeeinputid=None, outpercentagefeeinputtext=None, outpercentagefeeconfirmid=None, outpretext=None, outbeisaoid=None, outzhusaoid=None, outmoneyinputid=None, outmoneyinputtext=None, outpretoastmessage=None): if outtipooptionsid == None: tipooptionsid = 'com.ahdi.qrindo.merchant:id/tv_tips_show' else: tipooptionsid = outtipooptionsid if outoptiontext == None: optiontext = 'No Tips' else: optiontext = outoptiontext if outfixedfeeinputid == None: fixedfeeinputid = 'com.ahdi.qrindo.merchant:id/edt_pwd' else: fixedfeeinputid = outfixedfeeinputid if outfixedfeeinputtext == None: fixedfeeinputtext = '1000' else: fixedfeeinputtext = outfixedfeeinputtext if outfixedfeeconfirmid == None: fixedfeeconfirmid = 'com.ahdi.qrindo.merchant:id/btn_confirm' else: fixedfeeconfirmid = outfixedfeeconfirmid if outpercentagefeeinputid == None: percentagefeeinputid = 'com.ahdi.qrindo.merchant:id/edt_pwd' else: percentagefeeinputid = outpercentagefeeinputid if outpercentagefeeinputtext == None: percentagefeeinputtext = '100' else: percentagefeeinputtext = outpercentagefeeinputtext if outpercentagefeeconfirmid == None: percentagefeeconfirmid = 'com.ahdi.qrindo.merchant:id/btn_confirm' else: percentagefeeconfirmid = outpercentagefeeconfirmid if outpretext == None: pretext = 'No Tips' else: pretext = outpretext if outbeisaoid == None: beisaoid = 'com.ahdi.qrindo.merchant:id/iv_cashier_show_qr' else: beisaoid = outbeisaoid if outzhusaoid == None: zhusaoid = 'com.ahdi.qrindo.merchant:id/iv_cashier_scan_qr' else: zhusaoid = outzhusaoid if outmoneyinputid == None: moneyinputid = 'com.ahdi.qrindo.merchant:id/edt_pay_num' else: moneyinputid = outmoneyinputid if outmoneyinputtext == None: moneyinputtext = None else: moneyinputtext = outmoneyinputtext if optiontext == 'com.ahdi.qrindo.merchant:id/btn_back': cancelid = optiontext cancelpretext = self.baseframe.findbyresourceId_and_return_text( tipooptionsid) # 查看小费选项显示内容 self.baseframe.findbyresourceId_and_click(tipooptionsid) # 点击小费选项 self.baseframe.findbyresourceId_and_click( cancelid ) # # 选择小费选项_No Tips、Consumer Input、Fixed Fee、Percentage Fee、Cancel resulttext = self.baseframe.findbyresourceId_and_return_text( tipooptionsid) # 查看小费选项显示内容 self.assertEqual(cancelpretext, resulttext) else: self.baseframe.findbyresourceId_and_click(tipooptionsid) #点击小费选项 self.baseframe.findbytext_and_click( optiontext ) # # 选择小费选项_No Tips、Consumer Input、Fixed Fee、Percentage Fee、Cancel if optiontext == 'Fixed Fee': self.baseframe.findbyresourceId_and_input( fixedfeeinputid, fixedfeeinputtext) # 输入固定金额费用 self.baseframe.findbyresourceId_and_click( fixedfeeconfirmid) # 点击确认按钮 if optiontext == 'Percentage Fee': self.baseframe.findbyresourceId_and_input( percentagefeeinputid, percentagefeeinputtext) # 输入百分比金额费用 self.baseframe.findbyresourceId_and_click( percentagefeeconfirmid) # 点击确认按钮 resulttext = self.baseframe.findbyresourceId_and_return_text( tipooptionsid) # 查看小费选项显示内容 self.assertEqual(pretext, resulttext) zhusaoenablestatus = self.baseframe.findbyresourceId_and_return_enabledstatus( beisaoid) # 查看被扫可用状态 self.assertTrue(zhusaoenablestatus) beisaoenablestatus = self.baseframe.findbyresourceId_and_return_enabledstatus( zhusaoid) # 查看主扫可用状态 if optiontext == 'No Tips': self.assertTrue(beisaoenablestatus) else: self.assertFalse(beisaoenablestatus) self.baseframe.findbyresourceId_and_input(moneyinputid, moneyinputtext) #输入金额 toastmessage = self.baseframe.findbyresourceId_and_click( beisaoid, outpretoastmessage) #不输入金额,点击被扫,查看toast提示 if toastmessage != None: self.assertEqual(outpretoastmessage, toastmessage) else: self.baseframe.delaytime(5) self.baseframe.findbytext("Scan to pay me") gett = GetTimeStr() #实例化 totalamount = self.baseframe.findbyresourceId_and_return_text( 'com.ahdi.qrindo.merchant:id/tv_fee_total') totalamountstr = gett.getsplitstr(totalamount) print("totalamountstr:", totalamountstr) payamount = self.baseframe.findbyresourceId_and_return_text( 'com.ahdi.qrindo.merchant:id/tv_Amount') payamountstr = gett.getsplitstr(payamount) print("payamountstr:", payamountstr) tipsamount = self.baseframe.findbyresourceId_and_return_text( 'com.ahdi.qrindo.merchant:id/tv_tips_fee') tipsamountstr = gett.getsplitstr(tipsamount) print("tipsamountstr:", tipsamountstr) totalamountint = int(totalamountstr) pretotalamountint = int(payamountstr) + int(tipsamountstr) print("totalamountint:", totalamountint) print("pretotalamountint:", pretotalamountint) self.assertEqual(pretotalamountint, totalamountint) self.baseframe.findbyresourceId_and_click( "com.ahdi.qrindo.merchant:id/btn_back") @unittest.skip('test_011') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_011(self): """ 无小费时,主扫和被扫都可用,不输入金额,Toast提示 """ outtipooptionsid = None outoptiontext = None outpretext = None outbeisaoid = None outzhusaoid = None outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outmoneyinputid = None outmoneyinputtext = None outpretoastmessage = 'The amount cannot be empty' self.define_tips(outpretoastmessage=outpretoastmessage) print( "小费选项为‘No Tips’时,主扫和被扫都可用.不输入金额,点击被扫,Toast提示‘The amount cannot be empty’.---测试通过" ) @unittest.skip('test_012') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_012(self): """ 小费类型为Consumer Input,主扫不可用,被扫可用,不输入金额,Toast提示 """ outtipooptionsid = None outoptiontext = 'Consumer Input' outpretext = 'Consumer Input' outbeisaoid = None outzhusaoid = None outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outmoneyinputid = None outmoneyinputtext = None outpretoastmessage = 'The amount cannot be empty' self.define_tips(outoptiontext=outoptiontext, outpretext=outpretext, outpretoastmessage=outpretoastmessage) print( "小费选项为‘Consumer Input’时,主扫不可用,被扫可用.不输入金额,点击被扫,Toast提示‘The amount cannot be empty’.---测试通过" ) @unittest.skip('test_013') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_013(self): """ 小费类型为Fixed Fee,主扫不可用,被扫可用,不输入金额,Toast提示 """ outtipooptionsid = None outoptiontext = 'Fixed Fee' outfixedfeeinputid = None outfixedfeeinputtext = '10000' outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outpretext = 'Rp.%s' % outfixedfeeinputtext outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = None outpretoastmessage = 'The amount cannot be empty' self.define_tips(outoptiontext=outoptiontext, outfixedfeeinputtext=outfixedfeeinputtext, outpretext=outpretext, outpretoastmessage=outpretoastmessage) print( "小费选项为‘Fixed Fee’时,主扫不可用,被扫可用.不输入金额,点击被扫,Toast提示‘The amount cannot be empty’.---测试通过" ) @unittest.skip('test_014') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_014(self): """ 小费类型为Percentage Fee,主扫不可用,被扫可用,不输入金额,Toast提示 """ outtipooptionsid = None outoptiontext = 'Percentage Fee' outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = '10' outpercentagefeeconfirmid = None outpretext = '%s%%' % outpercentagefeeinputtext outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = None outpretoastmessage = 'The amount cannot be empty' self.define_tips(outoptiontext=outoptiontext, outpercentagefeeinputtext=outpercentagefeeinputtext, outpretext=outpretext, outpretoastmessage=outpretoastmessage) print( "小费选项为‘Percentage Fee’时,主扫不可用,被扫可用.不输入金额,点击被扫,Toast提示‘The amount cannot be empty’.---测试通过" ) @unittest.skip('test_015') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_015(self): """ 小费类型为Cancel,主扫和被扫状态不变,不输入金额,Toast提示 """ outtipooptionsid = None outoptiontext = 'com.ahdi.qrindo.merchant:id/btn_back' outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outpretext = None outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = None outpretoastmessage = 'The amount cannot be empty' self.define_tips(outoptiontext=outoptiontext, outpretoastmessage=outpretoastmessage) print( "小费选项为‘Cancel’时,主扫与被扫保持原有状态不变.不输入金额,点击被扫,Toast提示‘The amount cannot be empty’.---测试通过" ) @unittest.skip('test_021') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_021(self): """ 无小费时,主扫和被扫都可用,输入金额,跳转到二维码页面 """ outtipooptionsid = None outoptiontext = None outpretext = None outbeisaoid = None outzhusaoid = None outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outmoneyinputid = None outmoneyinputtext = '1001000' outpretoastmessage = None self.define_tips(outmoneyinputtext=outmoneyinputtext) print("小费选项为‘No Tips’时,主扫和被扫都可用.输入金额,点击被扫,跳转到二维码页面.---测试通过") @unittest.skip('test_022') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_022(self): """ 小费类型为Consumer Input,主扫不可用,被扫可用,输入金额,跳转到二维码页面 """ outtipooptionsid = None outoptiontext = 'Consumer Input' outpretext = 'Consumer Input' outbeisaoid = None outzhusaoid = None outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outmoneyinputid = None outmoneyinputtext = '1000' outpretoastmessage = None self.define_tips(outoptiontext=outoptiontext, outpretext=outpretext, outmoneyinputtext=outmoneyinputtext) print("小费选项为‘Consumer Input’时,主扫不可用,被扫可用.输入金额,点击被扫,跳转到二维码页面.---测试通过") @unittest.skip('test_023') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_023(self): """ 小费类型为Fixed Fee,主扫不可用,被扫可用,输入金额,跳转到二维码页面 """ outtipooptionsid = None outoptiontext = 'Fixed Fee' outfixedfeeinputid = None outfixedfeeinputtext = '100' outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outpretext = 'Rp.%s' % outfixedfeeinputtext outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = '1000' outpretoastmessage = None self.define_tips(outoptiontext=outoptiontext, outfixedfeeinputtext=outfixedfeeinputtext, outpretext=outpretext, outmoneyinputtext=outmoneyinputtext) print("小费选项为‘Fixed Fee’时,主扫不可用,被扫可用.输入金额,点击被扫,跳转到二维码页面.---测试通过") @unittest.skip('test_024') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_024(self): """ 小费类型为Percentage Fee,主扫不可用,被扫可用,输入金额,跳转到二维码页面 """ outtipooptionsid = None outoptiontext = 'Percentage Fee' outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = '10' outpercentagefeeconfirmid = None outpretext = '%s%%' % outpercentagefeeinputtext outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = '1000' outpretoastmessage = None self.define_tips(outoptiontext=outoptiontext, outpercentagefeeinputtext=outpercentagefeeinputtext, outpretext=outpretext, outmoneyinputtext=outmoneyinputtext) print("小费选项为‘Percentage Fee’时,主扫不可用,被扫可用.输入金额,点击被扫,跳转到二维码页面.---测试通过") @unittest.skip('test_025') # 跳过用例名字为‘test_01’的用例,跳过的用例的执行结果显示:是 def test_025(self): """ 小费类型为Cancel,主扫和被扫状态不变,输入金额,跳转到二维码页面 """ outtipooptionsid = None outoptiontext = 'com.ahdi.qrindo.merchant:id/btn_back' outfixedfeeinputid = None outfixedfeeinputtext = None outfixedfeeconfirmid = None outpercentagefeeinputid = None outpercentagefeeinputtext = None outpercentagefeeconfirmid = None outpretext = None outbeisaoid = None outzhusaoid = None outmoneyinputid = None outmoneyinputtext = '1000' outpretoastmessage = None self.define_tips(outoptiontext=outoptiontext, outmoneyinputtext=outmoneyinputtext) print("小费选项为‘Cancel’时,主扫与被扫保持原有状态不变.输入金额,点击被扫,跳转到二维码页面.---测试通过")