上海 7月28日selenium 进阶知识点&作业

本文范围

这个帖子只是上节课的知识贴。还有集合帖子和代码库相关的。
关于文件夹结构上周的帖子里传送门
上课新增加了模块,具体会在代码库里展开结构。

主要知识点

个人不推荐用隐式等待,我课堂上有口误说成隐式等待,项目中提高稳定性只需要显式等待+强制等待。
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的邮件改下参数就可以用。
作业:希望大家按下面的敲一次,不要复制,在补充注释。