模块封装

示例代码:

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 模块封装及参数化的更多相关文章

  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. Python 爬虫的工具列表 附Github代码下载链接

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  2. SDRAM学习笔记(二)

    上一篇博客主要讲解了一下SDRAM整体结构以及PCB方面的注意事项.接下来讲解一下需要用到的一些命令. 1.常用命令的缩写 上述是常用到的一些指令集. 2.模式寄存器   (1)突发长度 通过对A0~ ...

  3. VBScript常用函数

    VBScript常用函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1.Abs函数 Option Explicit '@author :yinzhengjie 'blog:ht ...

  4. 学习windows编程 day4 之 绘制随机矩形和peekMessage

    #include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...

  5. netty基础篇

    什么是Bio? 当客户端数量过多时,创建的线程会越来越多,最终服务挂掉,因为客户端的线程数量和服务端创建的线程数量是一一对应的. 什么是伪异步IO? 什么是Nio? 什么是Aio

  6. Spark记录-阿里巴巴开源工具DataX数据同步工具使用

    1.官网下载 下载地址:https://github.com/alibaba/DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlSe ...

  7. 原生js的ajax请求

    传统方法的缺点: 传统的web交互是用户触发一个http请求服务器,然后服务器收到之后,在做出响应到用户,并且返回一个新的页面,,每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次 ...

  8. ATS metric query

    ATS metric query 参考:ATS metric query proxy.node.cache_hit_mem_ratio proxy.node.cache_hit_mem_ratio_a ...

  9. 上传文件服务器与web内容服务分离

    现在难点在:     1\单击表单提交按钮后,图片上传到图片服务器,文字内容上传web服务器数据库,这两个服务器分别在两个城市.     2\图片不能通过web服务器中转.     3\web服务器内 ...

  10. 支付宝app支付流程