在我们学习selenium的po模式之前,我们先要了解什么是自动化测试,以及selenium中的八大定位的基本操作,那么接下来,您可以跟我一起走进po模式中的base篇的编写(也是对基础api的封装)
什么是po?
po既是Page Object Model的简写,是自动化测试中常见的一种设计理念,它将我们常用的一个操作划分为多个页来完成,实现操作层和业务层的分离。
Base = 封装基础Api,如常用的找元素、点击元素、输入文本信息、以文本信息返回、跳出iframe、alter弹窗处理、切换句柄
Page(填充定位元素) = 通过调用Base页来填充定位元素
Case(用例页) = 通过调用Page页来实现具体的操作,也就是用例页,我们最终要实现的结果
Common(公用类) = common一般存放公用方法,如读取csv表、yaml管理数据方法、日志的封装方法等
Data (数据) = 存放方便我们做数据驱动的数据,比如csv表、json数据、Excel表等
Report(结果存放集)= 我们在unitttest框架中执行后的用例生成html报告的存放处,以及日志信息,如有需要,也可以添加image包来存放截图的图片
Base页的具体编写
在Base包下新建Base页,并创建Base类
from selenium.webdriver.common.action_chains import ActionChains
class Base():
def __init__(self,driver,url):
self.driver = driver
self.url = url
def get_url(self): # 打开网页
self.driver.get(self.url)
def find_element(self,*data): # 获取元素信息 需要注意的是,获取一类的都需要return 返回
return self.driver.find_element(*data)
def find_elements(self,*data): # 获取一组元素
return self.driver.find_elements(*data)
def click_element(self,*data): # 点击
self.find_element(*data).click()
def click_elements(self,number,*data): #点击一组元素中的某一个
self.find_elements(*data)[number].click()
def input_text(self,text,*data): #输入文本信息
test = self.find_element(*data)
test.clear() # 先清除
test.send_keys(text) # 再输入
def windows_handles(self,number): #切换句柄
self.driver.switch_to.window(self.driver.window_handles[number])
def iframe_number(self,number): #根据下标切换iframe
iframes = self.driver.find_elements_by_tag_name('iframe')
self.driver.switch_to.frame(iframes[number])
def iframe_element(self,key,value): # 根据元素的名和值进行具体的切换
iframes = self.driver.find_elements_by_tag_name('iframe')
for i in iframes:
if i.get_attribute(key) == value:
self.driver.switch_to.frame(i)
def iframe_skip(self): #跳出iframe 回到默认的上下文
self.driver.switch_to.default_content()
def move_to_element(self,*data): # 将鼠标悬浮某一个元素上
element = self.driver.find_element(*data)
ActionChains(self.driver).move_to_element(element).perform()
对于Base页,我们要用find_element来封装定位元素方法,因为不确定我们在使用的时候具体是调用哪一个
还有对于Base页的封装越多,我们以后在工作中也会越方便
下篇带来Page页(填充定位元素)
有问题博客下方留言