def _get_screenShot(self,model_name): screen_path=screenShot_dir + '\\{0}_{1}.png'.format(model_name,time.strftime("%Y%m%d_%H%M%S")) try: self.driver.get_screenshot_as_file(screen_path) logger.info('截图成功,截图为:',screen_path) except: logger.exception('截图操作失败') raise
def wait_eleVisibility(self,locator,wait_time=20,poll_frequency=0.5,model_name=''): try: logger.info('等待{0}中元素可见'.format(model_name)) WebDriverWait(self.driver,wait_time,poll_frequency).until(EC.visibility_of_element_located(locator)) except: logger.exception('等待元素可见失败') self._get_screenShot(model_name) raise
def click_ele(self,locator,model_name=''): ele = self.find_ele(locator) try: logger.info('{0}-点击操作'.format(model_name)) ele.click() except: logger.exception('点击元素操作失败') self._get_screenShot(model_name) raise
def input_keys(self,locator,content,model_name=''): ele = self.find_ele(locator,model_name) try: logger.info('{0}-输入文本'.format(model_name)) ele.send_keys(content) except: logger.exception('输入文本操作失败') self._get_screenShot(model_name) raise
def get_eleAttribute(self,locator,attribute,model_name=''): ele = self.find_ele(locator) try: logger.info('获取{0}的元素属性'.format(model_name)) return ele.get_attribute(attribute) except: logger.exception('获取元素属性失败') self._get_screenShot(model_name) raise
def get_text(self,locator,model_name=''): ele = self.find_ele(locator) try: logger.info('获取{0}文本信息'.format(model_name)) return ele.text except: logger.exception('获取当前文本信息失败') self._get_screenShot(model_name) raise
def move_IntoView(self,locator,model_name=''): ele = self.find_ele(locator) try: logger.info('将{0}的元素移动到可见区域'.format(model_name)) self.driver.execute_script("arguments[0].scrollIntoView()",ele) except: logger.exception('将元素移动到可见区域失败') self._get_screenShot(model_name) raise
def switch_tab(self, tab_name): name = "切换到{0}tab".format(tab_name) logger.info(name) locator_dict = vars(CommonLocator) #获取类的属性,并存为字典 print(locator_dict) #遍历字典中的元素,若键名中包含字符串'tab',且该键的值为元组,则取元组中的第二个定位表达式的值,判断传入参数是否在表达式中,若存在,将该定位表达式传给click_ele() for k, i in (locator_dict.items()): if 'tab' in k and isinstance(i, tuple): if tab_name in i[1]: self.wait_eleVisibility(i) self.click_ele(i)
def wait_iframe_and_switch_to_it(self,locator,wait_time=20,poll_frequency=0.5,model_name=''): """ :param locator: 类型为元组(By.XXX,iframe的定位表达式), """ ele = self.find_ele(locator) try: logger.info('等待并且换到iframe-{0}'.format(model_name)) WebDriverWait(self.driver,wait_time,poll_frequency).until(EC.frame_to_be_available_and_switch_to_it(ele)) except: logger.exception('等待并且换到iframe失败') self._get_screenShot(model_name) raise
def find_eles(self,locator,model_name=''): """ :param locator: 类型为元组(By.XXX,定位表达式) :param filename:截图存放位置 """ #异常捕获,失败时,添加日志和截图 try: logger.info('查找元素_{0}'.format(model_name)) return self.driver.find_elements(*locator) except: logger.exception('查找元素失败') self._get_screenShot(model_name) raise
def test_goto_draft(self, init_loginedEnv): name = '进入草稿箱页面' logger.info(name) #点击【写信】操作 IndexPage(init_loginedEnv).goto_drafts() #比对当前是否在草稿箱页面(tab) 当前title为:草稿箱 tab_title = CommonPage(init_loginedEnv).get_current_tab() #断言 try: assert tab_title == draft_tab except AssertionError: logger.exception('断言出错啦') raise
def test_goto_writeEmail(self, init_loginedEnv): name = '进入写信页面' logger.info(name) #点击【写信】操作 IndexPage(init_loginedEnv).goto_writeEmail() #比对当前是否在写信页面(tab) 当前title为:写信 tab_title = CommonPage(init_loginedEnv).get_write_tabTitle() #断言 try: assert tab_title == write_tab except AssertionError: logger.exception('断言出错啦') raise
def send_text_Email(self,receive,subject,content): name='发送文本信息邮件' logger.info(name) self.wait_eleVisibility(self.receive_input) #步骤 #输入收件人 self.input_keys(self.receive_input,receive) #输入主题 self.input_keys(self.subject_input,subject) #输入邮件正文---切换到文本输入iframe----输入文本 self.wait_iframe_and_switch_to_it(self.content_input_iframe,model_name=name) self.input_keys(self.content_input,content) #从iframe中切换出来,点击发送 self.driver.switch_to.default_content() self.click_ele(self.send_button,model_name=name)
def wait_windows_and_switch_to_it(self,current_handles,wait_time=20,poll_frequency=0.5,model_name=''): try: logger.info('等待新窗口打开') WebDriverWait(self.driver,wait_time,poll_frequency).until(EC.new_window_is_opened(current_handles)) except: logger.exception('等待打开新窗口失败') self._get_screenShot(model_name) raise try: logger.info('切换到新打开的窗口') cur_handles = self.driver.window_handles self.driver.switch_to.window(cur_handles[-1]) except: logger.exception('切换到新打开的窗口失败') self._get_screenShot(model_name) raise
def test_quit_login(self,init_loginedEnv): logger.info('退出登录') #点击退出button CommonPage(init_loginedEnv).quit_login() #断言 try: assert QuitePage(init_loginedEnv).get_quiteSuccess_msg() == '您已成功退出网易邮箱。' except AssertionError: logger.exception("断言出错啦:") raise # def test_switch_tab_to_address_list(self,init_loginedEnv): # logger.info( '切换到{0}tab中'.format(address_list_tab)) # CommonPage(init_loginedEnv).switch_tab(address_list_tab) # #断言 # try: # assert CommonPage(init_loginedEnv).get_tabTitle(address_list_tab) == '通讯录' # except AssertionError: # logger.exception("断言出错啦:") # raise
def test_tab_name(self, init_loginedEnv): # 通过IndexPage页面对象来获取tab # name='进入首页页面,查看页面信息是否正确' # logger.info(name) # content=IndexPage(init_loginedEnv).get_tabTitle() # #断言 # try: # assert content == index_tab # except AssertionError: # logger.exception('断言出错啦') # raise # 通过CommonPage页面对象来获取tab name = '进入首页页面,查看页面信息是否正确' logger.info(name) content = CommonPage(init_loginedEnv).get_tabTitle(index_tab) #断言 try: assert content == index_tab except AssertionError: logger.exception('断言出错啦') raise
def get_withoutReceive_msg(self): name="获取未输入收件人时,发送邮件的提示信息" logger.info(name) self.wait_eleVisibility(self.popup_withoutReceive,model_name=name) return self.get_text(self.popup_withoutReceive,model_name=name)
def save_draft(self): name="将邮件存为草稿" logger.info(name) self.move_IntoView(self.save_draft_button) self.click_ele(self.save_draft_button,model_name=name)
def get_saveDraft_success_msg(self): name="获取草稿保存成功的提示信息" logger.info(name) self.wait_eleVisibility(self.save_draft_success_msg,model_name=name) return self.get_text(self.save_draft_success_msg,model_name=name)
def get_sendSuccess_msg(self): name="获取发送邮件成功的提示信息" logger.info(name) return self.get_text(self.sendEmail_success_msg,model_name=name)
def goto_index_tab(self): name="点击【首页】tab,跳转至首页" logger.info(name) self.click_ele(self.index_tab)
def get_tabTitle(self): name = '获取写信tab的title' logger.info("获取写信页面的title") self.wait_eleVisibility(self.writeEmail_tab,model_name=name) return self.get_eleAttribute(self.writeEmail_tab,'title',model_name=name)
def goto_sended(self): name = "进入已发送列表" logger.info(name) self.wait_eleVisibility(self.sended_menu, model_name=name) self.click_ele(self.sended_menu, model_name=name)
def get_quiteSuccess_msg(self): name="获取退出成功信息" logger.info(name) return self.get_text(self.quitSuccess_msg,model_name=name)
def test_del_draft_success(self): del_name = "成功删除邮件草稿箱的草稿测试" logger.info(del_name)
def get_current_tab(self): name = '获取当前页面tab的title' logger.info(name) self.wait_eleVisibility(self.checked_tab) return self.get_text(self.checked_tab)
def checked_draft_content(self): name="选中要删除的草稿" logger.info(name) self.wait_eleVisibility(self.checkbox_draft,model_name=name) self.click_ele(self.checkbox_draft,model_name=name)
def quit_login(self): name = "退出登录" logger.info(name) self.wait_eleVisibility(self.quit_button) self.click_ele(self.quit_button, model_name=name)
def get_forgetUrl(self): logger.info('获取重置密码页面URL') return self.get_pageUrl()
def del_draft(self): name="删除草稿" logger.info(name) self.checked_draft_content() self.click_ele(self.del_draft_button,model_name=name)