模块封装

示例代码:

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---xss(Cross Site Scripting)跨站脚本攻击和csrf(xsrf)跨站点请求伪造(Cross—Site Request Forgery)攻击

    xss跨站脚本攻击:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 例如:某些论坛允许用户自由发言,而 ...

  2. iiiLab提供的视频解析接口如何使用?转发个简单的使用教程

    iiiLab除了提供免费的在线视频解析下载工具,还提供了视频解析接口供有需要的个人和公司调用. iiiLab目前已支持解析下载今日头条.西瓜视频.内涵段子.微博.秒拍.小咖秀.晃咖.火山.快手.抖音. ...

  3. 调用Bartender服务并打印bartender标签

    通常大部分企业在生产,仓储,QC等运作环节会用到标签,标签上有些各种标识. 一般的企业都有配有标签软件+专用的标签打印机.此例以bartender为例子. 如果为了实现打印条码,或者显示具体的功能,用 ...

  4. java程序在windows后台执行的办法

    1.新建run.txt文件 2.在文件中输入一下内容: @echo off start javaw -jar xx.jar exit 3.保存,修改文件名为run.bat4.双击即可 5.删除wind ...

  5. 淘淘商城之springmvc和mybatis整合

    一.需求 使用springmvc和mybatis完成商品列表查询 二.整合思路 springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring ...

  6. 图片和流的相互转化 (c/s)

    //图片转化为流保存: Stream ms; byte[] picbyte; OpenFileDialog open = new OpenFileDialog(); open.Filter = &qu ...

  7. QDialog对话框

    QDialog对话框,用来实现那些只是暂时存在的用户界面,是独立的窗口,但通常也有父窗口对话框有模态和非模态两种,,非模态对话框的行为和使用方法都类似于普通的窗口,模态对话框则有所不同,当模态对话框显 ...

  8. JavaScript之不规则Table转化为可定点索引td节点的网格矩阵【插件】

    由于解析课程表的缘故,有如下需求: 1. 将任意表格解析成独立的单元格矩阵[本次博文的缘由] 2. 根据矩阵坐标,确定任意一格的节点   /* 表格-->网格化 标记表格的位置及其对应的节点 * ...

  9. ABAP知识点笔记

    1,获取光标所在行 READ TABLE TD_ALV_DATA INTO TH_ALV_DATA INDEX RS_SELFIELD-TABINDEX. 2,获取alv可编辑单元格内容 DATA: ...

  10. HashMap原理分析(JDK1.7.x之前)

    HashMap 实现Map.Cloneable.Serializable接口,继承AbstractMap基类. HashMap map = new HashMap<String,String&g ...