def go_to_me_page(self): self.sleep(2) self.cancel_edition_upgrade() logger.info('开始准备进入我的页面') self.click_element(MainPageLocator.me_icon_loc) logger.info('已经进入我的页面') self.sleep(2)
def test_login_failed(self, handler, data): logger.info('开始执行反向测试用例:{}'.format(data['name'])) handler[1].login(data['username'], data['password']) # logger.info('选中用户协议框') # handler[1].BassPage.checkbox_agree() logger.info('登录操作完成') assert handler[1].is_toast_show(data['error_msg']) handler[1].save_picture(data['name'])
def wait_element_visible(self, locator, msg=''): try: now = datetime.now() WebDriverWait(self.driver, 20).\ until(EC.visibility_of_element_located(locator)) end = datetime.now() cost_time = (end - now).total_seconds() logger.info('等待元素可见共耗时{}s:'.format(cost_time)) except Exception as e: logger.error(e)
def logout(self): logger.info('begin to perform logout operation') try: self.click_element(MePageLocator.setting_btn_loc) self.sleep(2) self.click_element(SettingPageLocator.logout_btn_loc) self.sleep(1) self.click_element(SettingPageLocator.confirm_btn_loc) except Exception as e: logger.info('logout failed!') logger(e)
def is_user_login(self): ''' :return: True为已登录,False为未登录 ''' try: if self.search_element(MinePageLocator.click_login_text_loc): return False except Exception as e: logger.info('未找到页面元素:{}'.format(MinePageLocator.click_login_text_loc)) logger.error(e) return True
def wait_element_visible(self,locator, msg=''): try: now = datetime.now() #找页面时间是的时间 WebDriverWait(self.driver, 20). \ until(EC.visibility_of_element_located(locator)) #找locator定位的页面元素,等待某个元素可见 end = datetime.now() #收到页面元素时的时间 total_time = (end-now).total_seconds() #在找页面元素所耗费的时间 #{0}对应locator,{1}对应total_time logger.info('end total time of waiting for {0} bisible is {1}'.format(locator,total_time)) except Exception as e: logger.info(e) self.driver.sava_picture(msg) #若出现异常则截图当前页面
def wait_element_visible(self, locator, msg=''): try: now = datetime.now() WebDriverWait(self.driver, 20). \ until(EC.visibility_of_element_located(locator)) end = datetime.now() total_time = (end - now).total_seconds() logger.info( 'the total time of waiting for {0} visible is {1}'.format( locator, total_time)) except Exception as e: logger.info(e) self.driver.save_picture(msg)
def handler(): """ 用于测试用例执行前的数据准备工作和测试用例执行后的数据清理工作 :return: """ global driver #将参数drever设置为全局变量,以供方法refresh_page使用 logger.info('开始执行jrj web项目自动化测试') driver = webdriver.Chrome(execute_path) #调取chrom浏览器 driver.maximize_window() #窗口最大化 driver.get(login_url) #传入url:金融界 lg = LoginPage(driver) #LoginPage(driver),将金融界登录页面返回给用户登录页面(login_page) yield driver,lg driver.quit() #退出浏览器 logger.info('jrj web 自动化执行结束')
def is_toast_show(self, msg, timeout=20, poll_frequency=0.5): logger.info('waiting for toast element to show') locator = (By.XPATH, "//*[contains(@test,'%s')]" % msg ) #%s:变量,@test:通过msg传过来文本提示框内容(错误信息),//*:当前目录 try: #如果toast没有获得错误提示信息,则打印错误信息 WebDriverWait(self.driver, 20, poll_frequency).until( EC.presence_of_all_elements_located(locator)) #如果定位到页面元素,则返回true return True except Exception as e: logger.warning('toast not get eroor_msg') #没有定位成功,则打印错误信息 logger(e) return False
def go_to_login_page(self): #从钓鱼人首页进入“我的”按钮 logger.info('进入 我的 页面') self.go_to_me_page() #判断用户是否已登录 if self.is_user_login(): #如果已登录,则退出登录 self.logout() # 如果未登录,则点击 “点击登录”按钮 self.click_element(MePageLocator.click_to_login_loc) self.sleep(2) #点击 钓鱼人账号登录 self.click_element(LoginPageLocater.fishman_account_loc) self.sleep(2)
def is_toast_show(self, msg, timeout=20, poll_frequency=0.5): """ :param msg: toast 中显示的文本中包含的内容 :param timeout: :param poll_frequency: :return: """ logger.info('waiting for toast element to show') locator = (By.XPATH, "//*[contains(@text, '%s')]" % msg) try: WebDriverWait(self.driver, timeout, poll_frequency).until( EC.presence_of_element_located(locator)) return True except Exception as e: logger.warning('toast not found.') logger(e) return False
def is_toast_show(self, msg, timeout=20, poll_frequency=0.5): ''' presence_of_element_located: 等待元素存在,在使用toast时调用,不可使用visibility_of_element_located,否则,无法正确判断toast :param msg: toast文本提示信息 :param timeout: 超时时间 :param poll_frequency:查询频率 :return: True为找到了toast,False为未找到 ''' locator = (By.XPATH, "//*[contains(@text, '%s')]" % msg) try: WebDriverWait(self.driver, timeout, poll_frequency).until(EC.presence_of_element_located(locator)) logger.info('找到toast'.format(locator)) self.save_picture('toast截图') return True except Exception as e: logger.error(e) logger.warning('查找toast:{}失败'.format(locator)) self.save_picture('no_toast') return False
def is_user_login(self): try: logger.info('is search for element {}'.format( MePageLocator.click_to_login_loc)) if self.search_element(MePageLocator.click_to_login_loc): logger.info('found the element {}'.format( MePageLocator.click_to_login_loc)) return False except Exception as e: logger.info('the element {} not found.'.format( MePageLocator.click_to_login_loc)) logger.info(e) return True
def save_picture(self,msg=''): img_path = img_dir + '{0}-{1}.png'.format(msg, time.strftime('%Y-%m-%d_%H_%M_%S',time.localtime())) try: self.driver.save_screenshot(img_path) #screenshot:截图 logger.info('截图成功,图片保存路径为:{}'.format(img_path)) except Exception as e: logger.info('截图失败,{}'.format(msg)) logger.info(e)
def test_login_success(self, handler): logger.info('=========================开始执行正向用例==============') handler[1].login(success_data['username'], success_data['password']) # logger.info('选中用户协议框') # handler[1].BassPage.checkbox_agree() logger.info('登录操作完成') sleep(3) assert handler[1].is_nickname_exists() logger.info('==================正向用例测试通过:pass======================') handler[1].save_picture('正向用例测试截图')
def logout(self): logger.info('begin to perform logout aperation') try: #点击 设置 按钮 self.click_element(MePageLocator.setting_btn_loc) self.sleep(2) #点击 退出登录 按钮 self.click_element(SettingPageLocator.logout_btn_loc) self.sleep(1) #点击 确定 按钮 self.click_element(SettingPageLocator.confirm_btn_loc) except Exception as e: logger.info('element not found.') logger.info(e)
def test_login_success(self, handler): handler[1].login(success_data['username'], success_data['password']) logger.info("登录完成") assert handler[1].is_nickname_exists() logger.info('测试通过: ========== pass ==========')
def click_element(self, locator): element = self.search_element(locator) logger.info('已找到页面元素: {}'.format(element)) element.click() logger.info('页面元素: {} 已点击'.format(element))
def search_element(self, locator): logger.info('开始寻找页面元素: {}'.format(locator)) return self.driver.find_element(*locator)
def cancel_edition_upgrade(self): try: self.sleep(3) logger.info('开始查找版本更新窗口中的版本更新页面元素') if self.search_element(MainPageLocator.edition_upgrade_loc): logger.info('找到版本更新页面元素') logger.info('开始点击取消版本更新按钮') self.click_element(MainPageLocator.upgrade_btn_cancel_loc) logger.info('完成点击取消版本更新按钮') except NoSuchElementException: logger.info('the element: {} not found.'.format( MainPageLocator.edition_upgrade_loc)) except Exception as e: logger.info(e)
def send_data(self, locator, data): # self.clear_text(locator) element = self.search_element(locator) logger.info('已找到页面元素: {}'.format(element)) element.send_keys(data) logger.info('已向页面元素: {} 传送数据'.format(element))
def test_login_success(self, handler): handler[1].login(success_data['username'], success_data['password']) logger.info("�û����������������ѵ����¼��ť ��������Ҫ�ж��Ƿ��¼�ɹ�") assert handler[1].is_nickname_exists()
def is_nickname_exists(self): if self.search_element(MePageLocator.nickname_loc): logger.info('已找到页面元素: {}'.format(MePageLocator.nickname_loc)) return True else: return False
def agree_the_privacy(handler): logger.info('点击同意协议') handler[1].agree_privacy()
def step_1(): logger.info('准备登录')
def test_login_success(self, handler): #sys._getframe().f_code.co_name : 获取test_login_success,且打印出 logger.info('执行{}测试用例'.format(sys._getframe().f_code.co_name)) logger.info('进入 test_login_success methon') logger.info("登录测试—正常数据") step_1() # 输入正确的用户名,密码进行登录,其中handler【1】表示lg(即,driver.get(login_url) ) handler[1].login(success_data['username'], success_data['password']) #在输入数据前清除输入框里的内容 logger.info('期望值:{}'.format('退出')) logger.info('实际值:{}'.format( handler[1].get_logout_text())) #is_logout_text_exist():方法1中定义 try: step_2() assert handler[1].get_logout_text() #登录成功后进行判断是否登录成功 logger.info('测试用例执行完毕,测试结果: ======pass=====') handler[1].save_picture('登录成功并截图') except Exception as e: logger.info('测试执行完毕,测试结果:=======fail======') logger.info(e) handler[1].save_picture('登录失败并截图')
def test_login_failed(self, handler, data): logger.info('执行{}测试用例'.format(sys._getframe().f_code.co_name)) logger.info('登录测试-异常数据') step_1() #[1]表示handler的第二个实例 handler[1].login(data['username'], data['password']) #输入登录数据前清空输入框内的内容 logger.info( '期望值:{}'.format(True)) #只能写true,因为结果又两个:账号登录 和 账号或密码错误 两个值 try: #用户和密码值为空或者错误时,执行判断语句,否则执行except语句 if data['username'] == '' or data['password'] == '': #使用handler调用login_page的实例,用户和密码为空时 logger.info('实际值:{}'.format( handler[1].get_account_login_text())) step_2() assert handler[1].get_account_login_text() #其中data的数据类型为字典,fail_data数据类型为列表 logger.info( '{}, 测试用例执行完毕, 测试结果: ========= PASS ========= '.format( data['name'])) handler[1].save_picture('用户名或密码为空时截图') else: #用户和密码错误时 logger.info('实际值:{}'.format( handler[1].get_username_password_wrong_text())) step_2() assert handler[1].get_username_password_wrong_text() logger.info( '{}, 测试用例执行完毕, 测试结果: ========= PASS ========= '.format( data['name'])) handler[1].save_picture('用户名或密码为错误时截图') except Exception as e: logger.info('出现异常') logger.info(e)
def step_2(): logger.info('准备断言')
def prepare_to_login(handler): logger.info('开始进入首页') handler[1].go_to_login_page()
def test_login_failed(self, handler, data): handler[1].login(data['username'], data['password']) logger.info('反向用例,登录失败') assert handler[1].is_toast_show(data['error_msg'], 8, 0.2) logger.info('测试通过: ========== pass ==========')