标签:间隔 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