标签:间隔 format image 多个 操作 visible bim class 自动化
引子:
最近面试被问到了UI自动化,好久没做了,今天回来复习下,发现目前流行一种po模式,整体来说非常像django的MTV模式,有的分2层有的分3层,根据自己项目的需要都是可以的。
思路:
1 将selenium各种常用的元素定位方法以及对元素的操作2次封装,组成公共组件库,base_page
2 将每一个页面都作为一个单独的page_class(当然可以写在一个文件中,也可以分开写),主要维护web也中的元素集,以及每一步的操作
3 测试用例依赖第二步的page_class,在该层可以配合pytest or unittest等测试框架
以上是核心的部分,还可以将日志,测试报告模块一块集成进来
实现:
base_page
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import datetime class basepage(): def __init__(self,driver,url): ‘‘‘ 初始化浏览器 ‘‘‘ self.driver=driver self.driver.get(url) self.driver.maximize_window() def wait_element_visible(self,loc,timeout=20,poll_frequency=0.5,model=None): ‘‘‘ :param loc: 元组,元素定位表达式,表达方式(元素定位类型,元素定位方法) :param timeout: 等待超时时间 :param poll_frequency: 页面轮训间隔(频率) :param model: 时间超时时,截图操作 :return: ‘‘‘ try: start_time=time.time() WebDriverWait(self.driver,timeout,poll_frequency).until(EC.visibility_of_element_located(*loc)) end_time=time.time()-start_time except: raise "没有找到元素-->{}".format(loc) def wait_element_novisible(self, loc, timeout=20, poll_frequency=0.5, model=None): ‘‘‘ :param loc: 元组,元素定位表达式,表达方式(元素定位类型,元素定位方法) :param timeout: 等待超时时间 :param poll_frequency: 页面轮训间隔(频率) :param model: 时间超时时,截图操作 :return: ‘‘‘ try: start_time = time.time() WebDriverWait(self.driver, timeout, poll_frequency).until(EC.visibility_of_element_located(*loc)) end_time = time.time() - start_time except: raise "没有找到元素-->{}".format(loc) def find_Element(self,loc): ‘‘‘ :param loc: :return: ‘‘‘ try: WebDriverWait(self.driver,10).until(EC.invisibility_of_element_located(loc)) return self.driver.find_element(*loc) except: raise "find_Element没有找到元素-->{}".format(loc) def find_Elements(self,loc): ‘‘‘ 查找多个 :param loc: :return: ‘‘‘ try: WebDriverWait(self.driver, 10).until(EC.invisibility_of_element_located(loc)) return self.driver.find_element(*loc) except: raise "find_Elements没有找到元素-->{}".format(loc) def exe_script(self,ex_script): ‘‘‘ :param ex_script: 待执行的脚本 :return: ‘‘‘ self.driver.excute_script(ex_script) def send_keys(self,loc,value,clear_first=True,click_first=True): ‘‘‘ 填写和清除 :param loc: :param value: :param clear_first: :param click_first: :return: ‘‘‘ try: loc=getattr(self,"_%s"%loc) if click_first: self.find_Element(*loc).click() if clear_first: self.find_Element(*loc).clear() self.find_Element(*loc).send_keys(value) except AttributeError: raise "send_keys没有找到元素----{}".format(loc) def get_ele(self,loc,): ‘‘‘ 获取文本内容 :param loc: :param model: :return: ‘‘‘ ele=self.find_Element(loc) try: text=ele.text return text except: raise ‘get_ele获取文本失败---{}‘.format(ele) def get_attr(self,loc): ‘‘‘ 获取元素属性 :param loc: :return: ‘‘‘ ele = self.find_Element(loc) try: ele_attr=ele.get_attribute() return ele_attr except: raise "get_attr获取属性失败---{}".format(ele) def save_webImgs(self,file_path): ‘‘‘ 截图 :return: ‘‘‘ data_now=str(datetime.datetime.now()).split(‘.‘)[0] #路径 filePath=r‘{}\{}\{}.png‘.format(file_path.image_path,data_now)
标签:间隔 format image 多个 操作 visible bim class 自动化
原文地址:https://www.cnblogs.com/yuan-x/p/13790645.html