模块封装

示例代码:

baidu.py

  1. from time import sleep
  2. from selenium import webdriver
  3. driver = webdriver.Chrome()
  4. driver.get("https://www.baidu.com/")
  5. driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
  6. driver.find_element_by_xpath("//*[@id='su']").click()

我们对上面的代码简单的代码做一个模块化简单示例:

在当前目录创建封装用的module.py文件(也可在其他路径导入时加上路径即可):

  1. driver.get("https://www.baidu.com/")
  2. driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
  3. driver.find_element_by_xpath("//*[@id='su']").click()
  4. sleep(2)
  5. driver.quit()

将上面这段代码剪切到我们新建的module.py文件,稍加改装:

  1. class baidumodule():
  2. def __init__(self,driver,):
  3. self.dr = driver #不能在类中再次导入webdriver 两边的driver等于两个窗口,直接让调用方传入driver即可
  4. def login(self,values):
  5. login_dr = self.dr
  6. login_dr.get("https://www.baidu.com/")
  7. login_dr.find_element_by_xpath("//*[@id='kw']").send_keys(values)
  8. login_dr.find_element_by_xpath("//*[@id='su']").click()
  9. def login_out(self):
  10. self.dr.quit()

开始引用:

  1. from time import sleep
  2. from selenium import webdriver
  3. from module import baidumodule #从我们我们创建的module.py导入baidumodule类
  4. driver = webdriver.Chrome()
  5. start = baidumodule(driver) #将driver传给aidumodule这个类
  6. start.login("selenium") #调用aidumodule下的login函数,并传入我们想要搜索的类容
  7. sleep(2)
  8. start.login("webdriver")#调用aidumodule下的login函数,并传入我们想要搜索的类容
  9. sleep(2)
  10. start.login_out()#引用退出函数

以上为简单示例,好处是每次使用重复代码时不需要重复敲那些重复的代码,写一次,传参调用即可

参数化

我们依然使用上面的代码进行演示:

  1. from time import sleep
  2. from selenium import webdriver
  3. from module import baidumodule #从我们我们创建的module.py导入baidumodule类
  4. driver = webdriver.Chrome()
  5. start = baidumodule(driver) #将driver传给aidumodule这个类
  6. start.login("selenium") #调用aidumodule下的login函数,并传入我们想要搜索的类容
  7. sleep(2)
  8. start.login("webdriver")#调用aidumodule下的login函数,并传入我们想要搜索的类容
  9. sleep(2)
  10. start.login_out()

示例一

直接使用一个列表

一个简单的参数化列表,如我们要测试百度搜索多种类的值,那就来一个参数化,就不需要每次重复的手动调用及重复的敲代码了

  1. from time import sleep
  2. from selenium import webdriver
  3. from module import baidumodule
  4. driver = webdriver.Chrome()
  5. start = baidumodule(driver) #将driver传给aidumodule这个类
  6. name = ["selenium","webdriver","selenium2","selenium3"]#我们需要搜索的值
  7. for i in name: #循环这个列表并使用
  8. start.login(i) #调用aidumodule下的login函数并传入我们遍历列表的值,第一次第0个,二次第1个
  9. sleep(2)
  10. start.login_out()

注:项目中并不推荐使用for循环来进行参数化,因为我们不方便进行用例条目统计,及错误定位,(如我们上面的代码使用unittest 写在test函数中不管我们让其搜索了多少个值,它都只会计数为1,而且如果出错他只会显示这一条出错,可能并不会显示指定错误的细节,不方便定位错误)

示例二

使用csv文件导入

创建file.csv文件并将我们前面name列表中的数据粘贴进去

  1. vulues #这是一段指引并不会被读取
  2. selenium
  3. webdriver
  4. selenium2
  5. selenium3

使用open引入:

方法一需要关闭文件:

  1. name = open("file.csv","r") #以只读方式打开文件
  2. for i in name:
  3. print(i)
  4. name.close() #用完记得关闭文件

方法二不需要关闭文件:

  1. with open("file.csv","r") as name: 导入文件
  2. lines = name.readlines()#以行读取整个文件
  3. print(lines)
  4. 返回一个列表:['selenium\n', 'webdriver\n', 'selenium2\n', 'selenium3']

改写上面的baidu.py文件

  1. import csv #导入csv模块
  2. from itertools import islice #从itertools导入islice,后边让其默认跳过第一行使用
  3. from time import sleep
  4. from selenium import webdriver
  5. from module import baidumodule
  6. driver = webdriver.Chrome()
  7. start = baidumodule(driver) #将driver传给aidumodule这个类
  8. with open("file.csv","r") as name:
  9. lines = name.readlines()#以行读取整个文件
  10. for i in islice(lines,1,None): #每次从第二个遍历,因为第一行为我们设置的指引行
  11. start.login(i) #调用aidumodule下的login函数
  12. sleep(2)
  13. start.login_out()

一行多个值的情况如我们上面的file.csv文件中的值使参数化用户名及密码

  1. name,passwd #这是一段指引并不会被读取
  2. name1,zhangsan
  3. name2,lisi
  4. name3,wanger

那我们读取的时候进行拆分使用split

  1. with open("file.csv","r") as name:
  2. lines = name.readlines()
  3. for i in islice(lines,1,None): #每次从第二个遍历
  4. a = i.split(",")#以,进行拆分
  5. #print(a)
  6. start.login(a[0])#就可以使用位置参数0来取user1来取passwd

a返回的结果为多个列表:

  1. ['name1', 'abc123\n']
  2. ['name2', 'lisi\n']
  3. ['name3', 'abc123']

python + selenium 模块封装及参数化的更多相关文章

  1. python selenium模块调用浏览器的时候出错

    python selenium模块使用出错,这个怎么改 因为不同版本更新不同步问题,浏览器都要另外下一个驱动.

  2. python selenium模块 css定位

    selenium是python的非标准库,使用时需要下载安装 安装命令  pip install selenium selenium是python的自动化测试模块,可以模拟浏览器的行为 所以在使用之前 ...

  3. python selenium 模块的安装及使用

    安装 pip install selenium 或者到https://pypi.python.org/pypi/selenium 下载setup安装包,之后进入目录后运行python setup.py ...

  4. python - selenium模块简介

    为什么要使用Selenium? 很多浏览器渲染页面的方式都很难找出其规律, 但是利用Selenium来驱动加载网页就可以直接拿到javaScript渲染后的结果了, 不需要再担心其相关的加密系统 声明 ...

  5. Python—selenium模块(浏览器自动化工具)

    selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件 安装方法: pip install selen ...

  6. python selenium 模块

    控制已打开的浏览器 https://www.cnblogs.com/lovealways/p/9813059.html selenium.自动填充文本框.自动点按钮 https://blog.csdn ...

  7. python selenium模块 xpath定位

    ''' 附w3xpath语法地址 https://www.w3school.com.cn/xpath/xpath_syntax.asp 总结: 返回匹配到所有符合条件的第一个节点,对象是 <cl ...

  8. Python CSV模块简介

    Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...

  9. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

随机推荐

  1. make_blobs

    一.make_blobs简介 scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量.中心点数量.范围等来生成几类数据,这些数据 ...

  2. window netsh interface portproxy 配置转发

    系统版本 windows server2016 datacenter 1.配置443.80端口转发到其他服务器的443.80上 netsh interface portproxy add v4tov4 ...

  3. 在 chrome 上导出 pdf

    用html+css写出网页,然后在chrome上导出pdf 1. command + p:快捷呼出打印: 2. “目标打印机”:选择“更改”,之后选择“另存为PDF”: 3. 点“更多设置”,可以勾选 ...

  4. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  5. 骨骼动画的原理及在Unity中的使用

    制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...

  6. 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点

    FFmpeg 3.3“Hilbert”,一个新的主要版本的一些亮点: 苹果Pixlet解码器 NewTek SpeedHQ解码器 QDMC音频解码器 PSD(Photoshop Document)解码 ...

  7. mysql中sql语句的常用语句

    1:提取公共的sql语句: 2:动态添加----sql语句: 代码: <insert id="test1" parameterType="com.floor.sho ...

  8. oracle乱码记录

    plsql中显示正常,查询到的结果乱码 1.获得服务端编码 select * from nls_database_parameters where parameter ='NLS_CHARACTERS ...

  9. Socket 连接建立过程

    阻塞模式下: 1,客户端向服务器端发起请求建立连接时,服务器端只需要运行到 serverSocket = ); 客户端注册的  SelectionKey.OP_CONNECT 事件就能够发生. 也就是 ...

  10. Java——关于num++和++num

    public class num_add_add { public static void numAdd(){ int num = 10; int a = num++; System.out.prin ...