博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python + selenium 模块封装及参数化
阅读量:5291 次
发布时间:2019-06-14

本文共 3536 字,大约阅读时间需要 11 分钟。

模块封装

示例代码:

baidu.py

from time import sleepfrom selenium import webdriverdriver = 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 sleepfrom selenium import webdriverfrom 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 sleepfrom selenium import webdriverfrom 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 sleepfrom selenium import webdriverfrom module import baidumoduledriver = 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 #这是一段指引并不会被读取seleniumwebdriverselenium2selenium3

使用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 sleepfrom selenium import webdriverfrom module import baidumoduledriver = 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,zhangsanname2,lisiname3,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']

转载于:https://www.cnblogs.com/weibgg/p/10787071.html

你可能感兴趣的文章
上传图片并预览
查看>>
哈夫曼编码_静态库
查看>>
【转】redo与undo
查看>>
C#更新程序设计
查看>>
常用Request对象获取请求信息
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Shell命令-内置命令及其它之watch、date
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
第8章-方法
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Microsoft SQL Server Transact-SQL
查看>>
Font: a C++ class
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>
Java四种引用包括强引用,软引用,弱引用,虚引用
查看>>
【NodeJS】http-server.cmd
查看>>
iOS bundle identifier 不一致,target general的Bundle Identifier后面总是有三条灰色的横线...
查看>>
研磨JavaScript系列(五):奇妙的对象
查看>>
xpath
查看>>