工程结构
大厦停电,备用电比较炎热的情况下,大家坚持在学习。
课程公开webdriver封装基础封装的,需要使用基础封装和常规的定位器来实现作业
project名
util(工具类模块)
\t init.py <--提升文件夹到模块
\t ClientSelenium.py (selenium工具类)
Base.py(工具的基础类)
\t ParserConfig.py (工具的处理读取INI配置的类) 服务于Conf/config.ini
Conf(配置类模块)
\t init.py <--提升文件夹到模块
\t config.ini (目前处理驱动和网站地址等)--书架功能
setting.py(处理文件常量和路径拼接) --服务于testcase文件夹
driver(驱动文件夹) 拉起驱动时有这个不用配置环境变量了,给别人立即给用。
chromedriver.exe
geckodriver.exe
test_log(预留的日志文件夹)
screen(预留的截图文件夹)
testcase(业务代码测试用例)
\t init.py
\t testLogin.py (第一个测试用例文件,名字先自己取)
yaml(预留的外部配置文件夹)
\t init.py
browser.yaml (配置测试信息)
run.py -入口函数 把testcase文件夹套件化处理(testsuite)
流程路径
util\\Base基础 --> util\\SeleniumClient --> testcase\\业务代码 --> run.py 启动(现在是第一层)
util(处理封装webdriver,日志,报告等) --> testcase\\业务代码(test开头*.py)
作业内容
请尽早完成3个任意网站,并且每个网站case不小于5条。
case需要把webdriver封装的用上,并且使用学到定位器自己在工程结构下面的clientSelenium.py简单封装结合下面给的封装好的一起混合完成。
直接使用util\SeleniumClient.py
from selenium import webdriver
#只开放了基础api的,定位器请自己学习封装完成作业,下节课在讲带保护的高级封装
class ClientSelenium(object):
"""通过封装把Page的行为压缩在这里"""
def get_driver(self, driver,url):
"拉起webdriver和浏览器和打开目标url 可以用于setUpClass的初始化"
if driver == 'firefox' or driver == 'Firefox' or driver == 'F' or driver == 'f':
exe_path = base.firefox_path()#第二个功能是包裹在第一个功能下面的 base代码稍等
self.driver = webdriver.Firefox(executable_path=exe_path)
elif driver == 'Chrome' or driver == 'chrome' or driver == 'Ch' or driver == 'ch':
exe_path = base.chrome_path()
self.driver = webdriver.Chrome(executable_path=exe_path)
else:
print("输入在预期以外")
self.driver.get(url) #区域3
return self.driver
def start(self,url,_url):
"""
不拉起webdriver,只打开浏览器打开网页
:param url: 打开网页
:param _url: 期望网页
:return:
"""
self.driver.get(url)
self._get_current_url(_url)
def assert_title(self,titleStr):
"""
页面标题上是否包含关键字,支持传入多个参数
:param titleStr: 关键字
:param args: 支持传入多个参数
:return:
"""
try:
assert titleStr in self.driver.title, \\
"在title里没有找到%s" % titleStr
print("加载网页正确") #业务self.assertTrue()
except AssertionError as error: # 断言表达式不足
print(format(error))
except Exception as error:
print(format(error))
def assert_source(self,sources):
"""
网页源码是否包含关键字 做业务判断
:param sources: list [arg1,arg2...]
:return:
"""
for source in sources: # 关键字驱动有可能包含多个参数
try:
assert source in self.driver.page_source, \\
"在page_source里没有找到%s" % source
print("判断 %s 包含在page_source" % source)
except AssertionError as error: # 断言表达式
print(format(error))
except Exception as error:
print(format(error))
time_wait = 2
def time_sleep(self, time_wait):
"""
强制等待默认为2秒
:param time_wait:
:return:
"""
if time_wait <= 0:
time.sleep(time_wait)
else:
print("等待%ss" % time_wait)
time.sleep(time_wait)
def max_size(self):
"""
放大浏览器最大化 需要先拉起浏览器
:return:
"""
time.sleep(0.5) # 切换展示
self.driver.maximize_window()
def set_size(self,width=800, height=600):
"""
先打印浏览器尺寸,设置浏览器到尺寸
:param width: 宽
:param height: 高
:return:
"""
self.driver.set_window_size(width, height, windowHandle="current") # 当前句柄
print("尺寸设置成功")
def _get_current_url(self,_url):
try:
assert _url ==self.driver.current_url, \\
"当前网页%刷新后url被修改"%self.driver.current_url
except Exception as error:
print(format(error))
def F5(self,_url):
"""
刷新后验证网页正确 now_url覆写使用
:return:
"""
self.driver.refresh()
print("刷新正确")
self._get_current_url(_url) # 刷新后判断当前网页
def back(self, _url,time_wait=2):
"""
后退到之前的页面(等同浏览器上按回退按钮)
条件:先需要有前后打开的2个页面
:param _url:形参是验证当前页面
:param time_wait:属于time_sleep方法
:return:
"""
self.time_sleep(time_wait)
self.driver.back()
self._get_current_url(_url)
print("back网页成功")
def forward(self, _url,time_wait=2):
"""
配合浏览器回退使用,回到之前的页面
:param _url:形参是验证当前页面
:param time_wait:属于time_sleep方法
:return:
"""
self.time_sleep(time_wait)
self.driver.forward()
self._get_current_url(_url)
print("forward网页成功")
def quit(self):
"""关闭浏览器 可以用于tearDownClass的清理
:return:
"""
self.time_sleep(self.time_wait) # 展示最后一条case
self.driver.quit()
print("关闭浏览器",self.driver)
结合util\Base.py
# 只有用到的部分
from Conf.setting import * #其他都被这个文件导入了, from后面跟着是文件夹绝对路径,可以想想比如os
from util.ParserConfig import ParserConfig #也可以放入Conf\\setting.py
pc =ParserConfig(ini_path)
class Base(object):
def chrome_path(self):
"谷歌的浏览器驱动"
#读取驱动
return pc.get_option_value("Driver", "chrome") #把driver目录拷贝到一级目录下。 这里之前写错了,传错了一个函数
def firefox_path(self):
"火狐的浏览器驱动"
return pc.get_option_value("Driver", "firefox")
加油啊。