模块封装

示例代码:

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. jenkins+gitlab webhooks 实现自动触发打包

    说明:实现代码在gitlab上的提交后立马自动进行jenkins的job构建 安装插件: Gitlab Hook Plugin  Build Authorization Token Root Plug ...

  2. JavaSE学习总结(十五)—— Java反射与注解

    一.静态语言与动态语言 静态类型语言:是指在编译时变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言可能能够部分减轻这个要求.强类型 动态 ...

  3. DotNetBar TextBoxDropDown响应按键事件

    textBoxDropDownHelp.TextBox.KeyDown += new KeyEventHandler(textBoxDropDownHelp_KeyDown); private voi ...

  4. 微信小程序开发(1) 天气预报

    本文介绍如何使用微信小程序开发天气预报功能. 一.项目文件列表 二.小程序配置 使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. ...

  5. tf.matmul()和tf.multipy()的区别

    首先我们分析一下下面的代码: import tensorflow as tf import numpy as np a=tf.constant([[1., 2., 3.],[4., 5., 6.]]) ...

  6. MySql 安装与使用图文教程

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内, ...

  7. 2018-2019-2 网络对抗技术 20165227 Exp5 MSF基础应用

    2018-2019-2 网络对抗技术 20165227 Exp5 MSF基础应用 Exploit选取 主动攻击:ms17_010_eternalblue(成功) 浏览器攻击: ms10_042_hel ...

  8. Debian & CentOS建立本地iso源

    在宿舍搞开发的时候经常遇到有些工具需要安装,没有网络,这时候只能靠mount本地的iso镜像来搞,结果像Debian有3张安装光盘,CentOS有2张光盘,有时候安装包不在第一张光盘里,而在第二张光盘 ...

  9. 使用PowerMockito和Mockito进行模拟测试,包括静态方法测试,私有方法测试等,以及方法执行的坑或者模拟不成功解决

    依赖:这个很重要,不同版本用法也有点区别: <dependency> <groupId>org.mockito</groupId> <artifactId&g ...

  10. css 背景图片自适应元素大小

    一.一种比较土的方法,<img>置于底层. 方法如下: CSS代码: HTML: <img src="背景图片路径" /> <span>字在背景 ...