def android_driver(self): '''Android driver''' # 从desired_caps.yaml读取driver配置数据 stream = open(DESIRED_CAPS_YAML_PATH, 'r') data = yaml.load(stream, Loader=yaml.FullLoader) desired_caps = {} desired_caps['platformName'] = data['platformName'] desired_caps['platformVersion'] = data['platformVersion'] desired_caps['deviceName'] = data['deviceName'] desired_caps['udid'] = data['udid'] desired_caps['appPackage'] = data['appPackage'] desired_caps['appActivity'] = data['appActivity'] desired_caps['noReset'] = data['noReset'] desired_caps['unicodeKeyBoard'] = True desired_caps['resetKeyboard'] = True desired_caps['automationName'] = data['automationName'] # 设置收到下一条命令的超时时间,超时appium会自动关闭session ,默认60秒 desired_caps['newCommondTimeout'] = data['newCommondTimeout'] try: driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps) driver.implicitly_wait(8) log.info("驱动app打开成功...") return driver except Exception as e: log.error("驱动app打开失败:{}".format(e))
def test_02_modify_pwd(self): '''验证修改后的密码能否登录''' log.info("验证修改后的密码能否登录") tel = get_yaml_value(TEST_ACCOUNT_PATH, 'account_1') pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'new_pwd_s') lp = LoginPage(self.driver) lp.login_opera_again(tel, pwd) log.info("登录操作") time.sleep(2) # 断言是否登录成功 result = False if lp.new_is_exist_element("立即更新"): result = True # 有则点击取消 UpdatePopup(self.driver).cancel_opera() elif lp.new_is_exist_element("首页"): result = True self.assertTrue(result) time.sleep(2) # 为不影响后面的测试,需将密码还原成旧密码 ms = MySet(self.driver) ms.enter_to_my() ms.enter_to_set() # 修改密码操作 old_pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'new_pwd_s') new_pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'old_pwd_s') ms.change_pwd(old_pwd, new_pwd) time.sleep(2)
def test_02_login_normal(self): '''正确用户名,正确密码登录''' log.info("验证正确用户名、正确密码登录") tel = get_yaml_value(TEST_ACCOUNT_PATH, 'account_1') pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'pwd_1_right') lp = LoginPage(self.driver) lp.login_opera(tel, pwd) time.sleep(2) # 判断是否登录成功 result = False udp = UpdatePopup(self.driver) if lp.new_is_exist_element("立即更新"): result = True udp.cancel_opera() # 判断是否存在通知弹窗 if lp.is_exist_element(udp.cancel_el): udp.cancel_opera() if lp.new_is_exist_element("我知道了"): Iknow(self.driver).click_iknow_btn() elif lp.is_exist_element(udp.cancel_el): udp.cancel_opera() if lp.new_is_exist_element("我知道了"): Iknow(self.driver).click_iknow_btn() elif lp.new_is_exist_element("我知道了"): result = True Iknow(self.driver).click_iknow_btn() else: if lp.new_is_exist_element("首页"): result = True self.assertTrue(result) time.sleep(1)
def get_apk_info(self): '''获取apk包的appPackage、启动类appActivity''' mac_aapt_path = '/Users/mac/Downloads/android-sdk-macosx/build-tools/29.0.3/' aapt_command_base = 'aapt dump badging ' app_path = self.get_apk_path() try: # mac获取方法 # p = subprocess.Popen(mac_aapt_path+aapt_command_base+app_path, stdout=subprocess.PIPE, # stderr=subprocess.PIPE, # stdin=subprocess.PIPE, # shell=True) # windows获取方法 p = subprocess.Popen(aapt_command_base + app_path, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True) (output, err) = p.communicate() t = output.decode() # print(t) match_appPackage = re.compile("package: name='(.*?)'").search(t) match_apkActivity = re.compile( "launchable-activity: name='(.*?)'").search(t) appPackage = match_appPackage.groups()[0] appActivity = match_apkActivity.groups()[0] # print(appPackage) # print(appActivity) log.info("获取被测apk包的appPackage、appActivity成功...") return appPackage, appActivity except Exception as e: log.error("获取被测apk包的appPackage、appActivity失败:{}".format(e))
def start_appium(self): '''启动appium服务''' try: os.system('start appium -a 127.0.0.1 -p 4723') time.sleep(5) log.info("启动appium服务...") except Exception as e: log.error("appium启动失败:{}".format(e))
def quit_appium(self): '''停止appium服务''' process = os.popen('netstat -aon |findstr 4723').read() print(process) pid = process.replace(' ', '').split('LISTENING')[1] m = os.popen('taskkill -f -pid %s' % pid) # print(m.read()) log.info("appium服务已停止...")
def test_02_edit_person(self): '''验证编辑人员''' log.info("验证编辑人员") pmg = PersonnelManagement(self.driver) # 编辑人员操作 pmg.edit_person_opera() # 断言是否编辑成功 r_1 = pmg.is_toast_exist(pmg.edit_success_toast) self.assertTrue(r_1)
def test_03_senior_set(self): '''验证设备详情页-高级设置''' log.info("验证设备详情页-高级设置") # 高级设置操作 dm = DeviceManagement(self.driver) dm.senior_set_opera() # 断言是否设置成功 toast_text = dm.get_toast_text() self.assertEqual(toast_text, dm.set_success_toast)
def test_03_delete_person(self): '''验证删除人员''' log.info("验证删除人员") pmg = PersonnelManagement(self.driver) # 删除操作 pmg.delete_person_opera() # 断言是否删除成功 r_1 = pmg.is_toast_exist(pmg.delete_success_toast) self.assertTrue(r_1)
def test_02_batch_start_devices(self): '''验证批量启动设备''' log.info("验证批量启动设备") dm = DeviceManagement(self.driver) # 批量启动操作 dm.batch_start_opera() # 断言是否操作成功 toast_text = dm.get_toast_text() self.assertEqual(toast_text, dm.batch_start_success_toast)
def test_03_member_management(self): '''验证会员管理-回收通用小票''' log.info("验证会员管理-回收通用小票") # 通用小票管理页-回收小票操作 mm = ManageMarketing(self.driver) mm.member_manage_recovery_coin_opera() # 断言回收小票是否成功 r_1 = mm.is_toast_exist(mm.recovery_success_toast) self.assertTrue(r_1)
def install_app(self): '''安装App基本方法''' try: log.info("正在安装应用{},请稍后...".format(self.appName)) result = os.popen(self.install_command).read() if "Success" in result: log.info("{}应用安装成功...".format(self.appName)) except Exception as e: log.error("应用安装失败:{}".format(e))
def uninstall_app(self): '''卸载App基本方法''' try: log.info("开始卸载应用{}...".format(self.appName)) result = os.popen(self.uninstall_command).read() if "Success" in result: log.info("应用卸载成功...") except Exception as e: log.error("应用卸载失败:{}".format(e))
def test_02_search_edit_device(self): '''验证搜索设备、编辑设备''' log.info("验证搜索设备、编辑设备") # 搜索、编辑设备操作 dm = DeviceManagement(self.driver) dm.search_edit_device_opera() # 断言是否编辑成功 toast_text = dm.get_toast_text() self.assertEqual(toast_text, dm.edit_success_toast)
def test_03_delete_bathroom(self): '''验证删除浴室''' log.info("验证删除浴室") bm = BathroomManagement(self.driver) # 删除浴室操作 bm.delete_bathroom_opera() # 断言是否编辑成功 result = bm.is_exist_element(bm.edit_bathroom_name) self.assertFalse(result)
def get_deviceName(self): '''获取连接设备的设备名deviceName''' try: result = os.popen(self.deviceName_command).read() deviceName = result.split('\n')[0] # print(deviceName) log.info("获取设备名成功...") return deviceName except Exception as e: log.error("获取设备名失败:{}".format(e))
def get_platformVersion(self): '''获取连接设备的系统版本号platformVersion''' try: result = os.popen(self.platformVersion_command).read() platformVersion = result.split('\n')[0] # print(platformVersion) log.info("获取设备系统版本号成功...") return platformVersion except Exception as e: log.error("获取系统版本号失败:{}".format(e))
def test_02_edit_bathroom(self): '''验证编辑浴室''' log.info("验证编辑浴室") bm = BathroomManagement(self.driver) # 编辑浴室操作 bm.edit_bathroom_opera() # 断言是否编辑成功 toast_text = bm.get_toast_text() self.assertEqual(toast_text, bm.edit_success_toast) result = bm.is_exist_element(bm.edit_bathroom_name) self.assertTrue(result)
def test_04_delete_device(self): '''验证删除设备''' log.info("验证删除设备") dm = DeviceManagement(self.driver) # 删除操作 dm.delete_device_opera() # 断言是否删除成功 # result = dm.is_exist_element(dm.device_manage_title) # self.assertTrue(result) toast_text = dm.get_toast_text() self.assertEqual(toast_text, dm.delete_success_toast)
def test_03_delete_currency_ticket(self): '''验证删除通用小票''' log.info("验证删除通用小票") # 删除通用小票 mm = ManageMarketing(self.driver) mm.delete_opera() # 断言是否删除成功 r_1 = mm.is_exist_element(mm.currency_ticket_manage_page_title) r_2 = mm.is_exist_element(mm.currency_ticket_store_name) self.assertTrue(r_1) self.assertFalse(r_2)
def test_02_add_currency_ticket(self): '''验证编辑通用小票''' log.info("验证编辑通用小票") # 编辑通用小票 mm = ManageMarketing(self.driver) mm.edit_currency_ticket_opera() # 断言是否编辑成功 r_1 = mm.is_exist_element(mm.switch_state_1) r_2 = mm.is_exist_element(str(mm.sell_coin)) self.assertTrue(r_1) self.assertTrue(r_2)
def test_02_add_currency_ticket(self): '''验证编辑限时优惠''' log.info("验证编辑限时优惠") # 编辑限时优惠 mm = ManageMarketing(self.driver) mm.edit_discount_opera() # 断言是否编辑成功 r_1 = mm.is_toast_exist(mm.edit_success_toast) r_2 = mm.is_exist_element(str(mm.edit_discount)) self.assertTrue(r_1) self.assertTrue(r_2)
def test_03_delete_currency_ticket(self): '''验证删除限时优惠''' log.info("验证删除限时优惠") # 删除限时优惠 mm = ManageMarketing(self.driver) mm.delete_discount_opera() # 断言是否删除成功 r_1 = mm.is_toast_exist(mm.delete_success_toast) r_2 = mm.is_exist_element(mm.belong_store_name) self.assertTrue(r_1) self.assertFalse(r_2)
def test_02_hotline(self): '''验证合作热线页面展示''' log.info("验证合作热线页面展示") # ->我的->合作热线 mh = MyHelp(self.driver) mh.enter_to_my() mh.enter_to_hotline() # 断言页面是否有"服务热线:"字样 result = mh.new_is_exist_element("服务热线:") self.assertTrue(result)
def test_01_login_abnormal(self): '''正确用户名,错误密码登录''' log.info("验证正确用户名、错误密码登录") tel = get_yaml_value(TEST_ACCOUNT_PATH, 'account_1') pwd = get_yaml_value(TEST_ACCOUNT_PATH, 'pwd_1_wrong') lp = LoginPage(self.driver) lp.login_opera(tel, pwd) # time.sleep(2) result = lp.is_toast_exist("账号或密码错误") self.assertTrue(result) time.sleep(2)
def test_03_delete_shop(self): '''验证删除店铺''' log.info("验证删除店铺") smg = ShopManagement(self.driver) # 编辑店铺操作 smg.delete_shop_opera() # 断言是否删除成功 toast_text = smg.get_toast_text() r = smg.is_exist_element(smg.edit_shop_name) self.assertEqual(toast_text, smg.delete_success_toast) self.assertFalse(r)
def test_03_delete_vip(self): '''验证删除vip''' log.info("验证删除vip") # 删除vip mm = ManageMarketing(self.driver) mm.delete_vip_opera() # 断言删除是否成功 r_1 = mm.is_exist_element(mm.vip_centre_title) r_2 = mm.is_exist_element(mm.belong_store_name) self.assertTrue(r_1) self.assertFalse(r_2)
def test_02_edit_vip(self): '''验证编辑vip''' log.info("验证编辑vip") # 编辑vip mm = ManageMarketing(self.driver) mm.edit_vip_opera() # 断言编辑是否成功 r_1 = mm.is_toast_exist(mm.vip_edit_success_toast) r_2 = mm.is_toast_exist(str(mm.modify_limit_time)) self.assertTrue(r_1) self.assertTrue(r_2)
def test_report_screen(self): '''验证报表页流水筛选功能''' log.info("验证报表页流水筛选功能") # 进入报表页-流水,进行筛选操作 rfp = ReportFormPage(self.driver) rfp.enter_to_report() rfp.report_screen_opera() # 断言筛选结果是否正确 result = rfp.new_is_exist_element(rfp.store_text) self.assertTrue(result)
def test_01_batch_update_devices(self): '''验证批量修改设备''' log.info("验证批量修改设备") # ->全部应用->设备管理 dm = DeviceManagement(self.driver) dm.enter_to_all_applications() dm.enter_to_devices_management() # 批量修改操作 dm.batch_update_opera() # 断言是否修改成功 toast_text = dm.get_toast_text() self.assertEqual(toast_text, dm.batch_update_success_toast)