本文范围
这个帖子只是上节课的知识贴。还有集合帖子和代码库相关的。
关于文件夹结构上周的帖子里传送门
上课新增加了模块,具体会在代码库里展开结构。
主要知识点
个人不推荐用隐式等待,我课堂上有口误说成隐式等待,项目中提高稳定性只需要显式等待+强制等待。
webdriver封装 先封装自己的一套和课程上讲的可以衔接,核心点是返回的对象类型是一样,入参数量也一样。
下拉框
from selenium.webdriver.support.ui import Select
sel =Select(self.driver.get_elements_wait(key=>value)) #容器
sel.select_by_index(下标) #数字
sel.select_by_visible_text(value) #下拉列表的内容
出现alert界面,封装2个API,1个方法控制左边确认,1个方法控制右边的取消
def switch_accept_alert(self):
"""
确认弹出窗体
driver.accept_alert()
"""
self.driver.switch_to.alert.accept()
def dismiss_alert(self):
"""
关闭弹出窗体
driver.dismiss_alert()
"""
self.driver.switch_to.alert.dismiss()
import logging封装了1个log.py 放到util/log.py
日志模块讲解 ,需要有一个存放日志的文件夹,注意是logs
截图部分也一样,需要一个单独文件夹,放到try…exception:把截图和日志放到下面
报告report文件夹是通过代码自己生成的,在大家的util/base.py 功能写在文件里新增的一个类下面。
base文件夹处理webdriver以外的功能函数的封装。
多写点业务代码通过run.py的形式去把执行用例+报告集成一起。
project/run.py project等于自己工程目录
"入口函数文件"
try:
from Conf.setting import * #管理一些常规的配置
from util import ReadOpenData, HTMLTestRunner, ClientSelenium #数据驱动文件,报告,工具类
from util.Base import TimeUtil #Base创建报告文件夹
except ImportError as error:
raise error
#run.py
if __name__ == '__main__':
t_util = TimeUtil() #实例化处理Base TimeUtil
#TestDir ="E:\\\\selenium_uses\\\\test_case\\\\" setting.py
suite = unittest.defaultTestLoader.discover(TestDir,pattern='test_*.py') #把TestDir文件夹加载到suite里面, test_case文件夹下面找到'test_*.py' 这里的test是不区分大小写的。但是注意了_是不能省略的
#下面是report区域
fb =open(t_util.get_report_path(), 'wb') #一种技巧,open(文件a,如果方法是w的是会创建文件a)
print("报告的位置:",t_util.get_report_path())
runner = HTMLTestRunner.HTMLTestRunner(stream=fb, title='本次测试数据', description='结论:')
#执行testsuite
runner.run(suite) #执行测试套件
fb.close()
这里test_case下面test_.py,每个文件可以是1个页面,也可以是1个单独业务。上文pattern='test_.py’后面还有一个参数记得是做什么的吗?是选填的.如果在test_case文件夹里只有1个文件夹或者只有一堆.py文件。如果.py文件通过了文件夹分割。
比如上节课的作业是有3个网站的,如果把3个网站分割开。
test_case/baiduPo/test_a_login.py
test_case/baiduPo/test_a_indexweb.py
test_case/baiduPo/test_a_news.py
test_case/baiduPo/test_a_tieba.py
...
yaml来不及讲了,解析yaml建议自学,因为都已经学习了openpyxl,难度曲线高于yaml.
yaml.load类似json,下面来一则课堂上提到的json文件解析的。
import json #等同于import yaml
data =r"E:\\web_project\\selenium_uses\\test_data\\data.json" #!这个文件需要自己创建
def read_json(data):
with open(data,"r") as fp:
return json.load(fp)
name=read_json(data).get("name") #json解析
if isinstance(name,str): #判断name类型是str,这个等同 if(type(name)==str):
print(name) # 拿到json里对应的key
作业1-作业迭代到知识点
集合课程里学习到的知识点,把上节课作业的内容都给串联起来。
上节课作业是3段网站,不少于5个case的。
需要集合进去的内容
- WebDriver 新封装API
- 日志文件取代print打印语句,每段里面添加
- 截图文件夹,以及出现问题截图。
- Excel去读取定位器+定位器的数值
- 重敲1次run.py 层级目录在第一层别写错了。run.py集合包含了HTMLTestRunner.py
作业2-邮件解析
邮件(选学)课程大纲里在jenkins环节会有。这段代码里使用pop3 比如163的邮件改下参数就可以用。
作业:希望大家按下面的敲一次,不要复制,在补充注释。