python + selenium 模块封装及参数化
模块封装
示例代码:
baidu.py
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//*[@id='su']").click()
我们对上面的代码简单的代码做一个模块化简单示例:
在当前目录创建封装用的module.py
文件(也可在其他路径导入时加上路径即可):
driver.get("https://www.baidu.com/")
driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//*[@id='su']").click()
sleep(2)
driver.quit()
将上面这段代码剪切到我们新建的module.py
文件,稍加改装:
class baidumodule():
def __init__(self,driver,):
self.dr = driver #不能在类中再次导入webdriver 两边的driver等于两个窗口,直接让调用方传入driver即可
def login(self,values):
login_dr = self.dr
login_dr.get("https://www.baidu.com/")
login_dr.find_element_by_xpath("//*[@id='kw']").send_keys(values)
login_dr.find_element_by_xpath("//*[@id='su']").click()
def login_out(self):
self.dr.quit()
开始引用:
from time import sleep
from selenium import webdriver
from module import baidumodule #从我们我们创建的module.py导入baidumodule类
driver = webdriver.Chrome()
start = baidumodule(driver) #将driver传给aidumodule这个类
start.login("selenium") #调用aidumodule下的login函数,并传入我们想要搜索的类容
sleep(2)
start.login("webdriver")#调用aidumodule下的login函数,并传入我们想要搜索的类容
sleep(2)
start.login_out()#引用退出函数
以上为简单示例,好处是每次使用重复代码时不需要重复敲那些重复的代码,写一次,传参调用即可
参数化
我们依然使用上面的代码进行演示:
from time import sleep
from selenium import webdriver
from module import baidumodule #从我们我们创建的module.py导入baidumodule类
driver = webdriver.Chrome()
start = baidumodule(driver) #将driver传给aidumodule这个类
start.login("selenium") #调用aidumodule下的login函数,并传入我们想要搜索的类容
sleep(2)
start.login("webdriver")#调用aidumodule下的login函数,并传入我们想要搜索的类容
sleep(2)
start.login_out()
示例一
直接使用一个列表
一个简单的参数化列表,如我们要测试百度搜索多种类的值,那就来一个参数化,就不需要每次重复的手动调用及重复的敲代码了
from time import sleep
from selenium import webdriver
from module import baidumodule
driver = webdriver.Chrome()
start = baidumodule(driver) #将driver传给aidumodule这个类
name = ["selenium","webdriver","selenium2","selenium3"]#我们需要搜索的值
for i in name: #循环这个列表并使用
start.login(i) #调用aidumodule下的login函数并传入我们遍历列表的值,第一次第0个,二次第1个
sleep(2)
start.login_out()
注:项目中并不推荐使用for循环来进行参数化,因为我们不方便进行用例条目统计,及错误定位,(如我们上面的代码使用unittest 写在test函数中不管我们让其搜索了多少个值,它都只会计数为1,而且如果出错他只会显示这一条出错,可能并不会显示指定错误的细节,不方便定位错误)
示例二
使用csv文件导入
创建file.csv
文件并将我们前面name列表中的数据粘贴进去
vulues #这是一段指引并不会被读取
selenium
webdriver
selenium2
selenium3
使用open引入:
方法一
需要关闭文件:
name = open("file.csv","r") #以只读方式打开文件
for i in name:
print(i)
name.close() #用完记得关闭文件
方法二
不需要关闭文件:
with open("file.csv","r") as name: 导入文件
lines = name.readlines()#以行读取整个文件
print(lines)
返回一个列表:['selenium\n', 'webdriver\n', 'selenium2\n', 'selenium3']
改写上面的baidu.py
文件
import csv #导入csv模块
from itertools import islice #从itertools导入islice,后边让其默认跳过第一行使用
from time import sleep
from selenium import webdriver
from module import baidumodule
driver = webdriver.Chrome()
start = baidumodule(driver) #将driver传给aidumodule这个类
with open("file.csv","r") as name:
lines = name.readlines()#以行读取整个文件
for i in islice(lines,1,None): #每次从第二个遍历,因为第一行为我们设置的指引行
start.login(i) #调用aidumodule下的login函数
sleep(2)
start.login_out()
一行多个值的情况如我们上面的file.csv
文件中的值使参数化用户名及密码
name,passwd #这是一段指引并不会被读取
name1,zhangsan
name2,lisi
name3,wanger
那我们读取的时候进行拆分使用split
with open("file.csv","r") as name:
lines = name.readlines()
for i in islice(lines,1,None): #每次从第二个遍历
a = i.split(",")#以,进行拆分
#print(a)
start.login(a[0])#就可以使用位置参数0来取user,1来取passwd
a返回的结果为多个列表:
['name1', 'abc123\n']
['name2', 'lisi\n']
['name3', 'abc123']
python + selenium 模块封装及参数化的更多相关文章
- python selenium模块调用浏览器的时候出错
python selenium模块使用出错,这个怎么改 因为不同版本更新不同步问题,浏览器都要另外下一个驱动.
- python selenium模块 css定位
selenium是python的非标准库,使用时需要下载安装 安装命令 pip install selenium selenium是python的自动化测试模块,可以模拟浏览器的行为 所以在使用之前 ...
- python selenium 模块的安装及使用
安装 pip install selenium 或者到https://pypi.python.org/pypi/selenium 下载setup安装包,之后进入目录后运行python setup.py ...
- python - selenium模块简介
为什么要使用Selenium? 很多浏览器渲染页面的方式都很难找出其规律, 但是利用Selenium来驱动加载网页就可以直接拿到javaScript渲染后的结果了, 不需要再担心其相关的加密系统 声明 ...
- Python—selenium模块(浏览器自动化工具)
selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件 安装方法: pip install selen ...
- python selenium 模块
控制已打开的浏览器 https://www.cnblogs.com/lovealways/p/9813059.html selenium.自动填充文本框.自动点按钮 https://blog.csdn ...
- python selenium模块 xpath定位
''' 附w3xpath语法地址 https://www.w3school.com.cn/xpath/xpath_syntax.asp 总结: 返回匹配到所有符合条件的第一个节点,对象是 <cl ...
- Python CSV模块简介
Table of Contents 1. CSV 1.1. 简介 1.2. 字典方式地读写 1.3. 其它 2. 参考资料 CSV csv文件格式是一种通用的电子表格和数据库导入导出格式.最近我调用R ...
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
随机推荐
- make_blobs
一.make_blobs简介 scikit中的make_blobs方法常被用来生成聚类算法的测试数据,直观地说,make_blobs会根据用户指定的特征数量.中心点数量.范围等来生成几类数据,这些数据 ...
- window netsh interface portproxy 配置转发
系统版本 windows server2016 datacenter 1.配置443.80端口转发到其他服务器的443.80上 netsh interface portproxy add v4tov4 ...
- 在 chrome 上导出 pdf
用html+css写出网页,然后在chrome上导出pdf 1. command + p:快捷呼出打印: 2. “目标打印机”:选择“更改”,之后选择“另存为PDF”: 3. 点“更多设置”,可以勾选 ...
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- 流媒体技术学习笔记之(十七)FFmpeg 3.3《希尔伯特》-新版本的亮点
FFmpeg 3.3“Hilbert”,一个新的主要版本的一些亮点: 苹果Pixlet解码器 NewTek SpeedHQ解码器 QDMC音频解码器 PSD(Photoshop Document)解码 ...
- mysql中sql语句的常用语句
1:提取公共的sql语句: 2:动态添加----sql语句: 代码: <insert id="test1" parameterType="com.floor.sho ...
- oracle乱码记录
plsql中显示正常,查询到的结果乱码 1.获得服务端编码 select * from nls_database_parameters where parameter ='NLS_CHARACTERS ...
- Socket 连接建立过程
阻塞模式下: 1,客户端向服务器端发起请求建立连接时,服务器端只需要运行到 serverSocket = ); 客户端注册的 SelectionKey.OP_CONNECT 事件就能够发生. 也就是 ...
- Java——关于num++和++num
public class num_add_add { public static void numAdd(){ int num = 10; int a = num++; System.out.prin ...