一、基于 Python 语言的 Selenium 环境搭建
1. 安装python
注意:
- 勾选添加环境变量,不然得自己配置环境变量
- 选择自定义安装地址,否则很难找到安装地址
2. 安装 selenium
pip install -U selenium
3. 准备浏览器驱动器
- IEDriverServer、chromedriver(google)、geckodriver(Firefox)
- webdriver.Ie()、.Chrome()、.Firefox()
- 均无需安装,复制到\Python中即可
4. HTMLTestRunner.py
- 无需安装或配置
- 用于生成测试结果报告
- 可以自己修改
二、编写脚本
1. 导入包
- from selenium import webdriver
- from selenium.webdriver.support.select import Select
- 用以支持下拉列表对象
- from time import sleep
2. 打开和关闭浏览器
- driver=webdriver.Ie()
- webdriver.Chrome()
- webdriver.Firefox()
- driver.close()
- 关闭浏览器
- driver.quit()
- 关闭浏览器以及浏览器驱动程序
3. 打开 Url
- driver.get(“url 地址”)
4. 等待时间
- sleep(3)
- wait 3s
- driver.implicitly_wait(3)
- 隐性等待时间为 3 秒
5. 切换框架/窗口
- 使用 switch_to 包
- 定位到当前聚焦的元素上
- driver.switch_to.active_element()
- 切换到 alert 弹窗
- driver.switch_to.alert()
- 切换到主页面
- driver.switch_to.default_content()
- 切换到某个 frame
- driver.switch_to.frame(编号或 name)
- 切换到指定的 window_name 页签
- driver.switch_to.window(window_name)
- 切换到上一层的 frame
- driver.switch_to.parent_frame()
6. 定位页面元素
- driver.find_element_by_
- name(“login”)
- id
- xpath
- tag_name
- link_text
- partial_link_text
- class_name
- driver.find_elements_by_
- name(“控件 name 名”)[下标]
- Select(driver.find_elements_by_?)
- 用于识别下拉列表元素
- 需要导入包
- from selenium.webdriver.support.select import Select
7. 页面元素的属性和方法
- driver.title()
- 获得网页标题
- 对象.text
- 获得页面元素的文本值
- 属于属性
- 对象.get_attribute(“属性名”)
- 获得指定属性的值
- Select(对象).select_by_value
- 需要导入包
- from selenium.webdriver.support.select import Select
- select_by_index
- select_by_visible_text
- deselect_all()
- 取消所有选项
- deselect_by_index()
- 取消对应 index 选项
- deselect_by_value()
- 取消对应 value 选项
- deselect_by_visible_text()
- 取消对应文本选项
- first_selected_option()
- 返回第一个选项
- all_selected_options()
- 返回所有的选项
- 需要导入包
- 页面元素.send_keys(“数据”)
- 用于键盘输入数据
- 页面元素.click()
- 支持单选按钮、复选框、命令按钮
三、增强脚本
1. 检查点
1.1 in 运算符
- str1 in str2
- 用于判断 str1 是否存在于 str2 中
1.2 if 语句
if (条件表达式):
语句
else:
语句
2. 参数化
2.1 for 循环
for i in range(初值,终值+1):
语句
2.2 读 txt 文件
- file=open(文件名,‘r’)
- 返回文件对象,文本默认编码方式是 UTF-8。
- 'r’表示只是读,默认项。
- 读取时默认会将平台有关的行结束符(Windows 中是\r\n)转换为\n。
- 文件名外使用 r 可以禁止\转义。
- 遍历文件
- for 变量 in file
- 输出变量即可读出整个文件。
- 按行读出。
- list=file.readlines( )
- 把文件中的所有行读到一个列表中,换行符可读出。
- len(list) :返回列表中的元素个数
- for 变量 in file
- 关闭文件
- file.close( )
- 释放文件占用的系统资源。
- file.close( )
2.3 excel 文件IO操作
使用xlrd、xlwt模块对excel文件中的数据进行读写。
2.3.1 安装xlrd模块
window+R打开cmd窗口,执行下面命令完成xlrd、xlwt的安装
pip3 install xlrd
pip3 install xlwt
2.3.2 读取数据
将上文的数据做到excel文件中,作为数据源
import xlrd
#f作为文件对象
f = xlrd.open_workbook(r"e:\dd.xlsx")
# <xlrd.sheet.Sheet object at 0x000001801A725248>
# sheet页索引号是从0开始的
# table = f.sheet_by_index(0)
# table = f.sheet_by_name("Sheet1")
table = f.sheets()[0]
rows = table.nrows
cols = table.ncols
# print(rows)
# print(table.row_values(0)[0])
for i in range(0,n):
#遍历行数据,然后索引单元格
# print(table.row_values(i)[0])
#直接通过坐标,遍历单元格数据
print(table.cell_value(i,0))
2.3.3 写入数据
import xlwt
#创建工作簿
f = xlwt.Workbook(encoding="utf-8")
# #创建sheet
sheet1 = f.add_sheet(r'sheet1',cell_overwrite_ok=True)
row0 = ["user00","123456",'123456',"[email protected]"]
#生成第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i]) # 顺序为x行x列写入第x个元素
f.save('e:\dd.xls')
======输出结果======
在e:根目录下创建了一个心的excel工作簿,数据也被写入其中
2.4 csv 文件IO操作
2.4.1 读取csv文件数据
import csv
#现在要做的就是对csv文件的读操作
with open(r"e:\dd.csv","a",encoding="utf-8") as f:
data = csv.reader(f)
#<_csv.reader object at 0x000001B4E939B518>
# <class '_csv.reader'>ss
# print(type(data))
for i in data:
print(i)
=======输出结果===========
['username', 'password', 'repassword', 'email']
['user1', '123456', '123456', '[email protected]']
['user2', '123456', '123456', '[email protected]']
['user3', '123456', '123456', '[email protected]']
['user4', '123456', '123456', '[email protected]']
['user5', '123456', '123456', '[email protected]']
['user6', '123456', '123456', '[email protected]']
['user7', '123456', '123456', '[email protected]']
['user8', '123456', '123456', '[email protected]']
['user9', '123456', '123456', '[email protected]']
['user10', '123456', '123456', '[email protected]']
2.4.2 写入csv文件数据
import csv
#现在要做的就是对csv文件的写操作,newline='',主要是避免写入数据之后,有多余的换行
with open(r"e:\dd.csv","a",encoding="utf-8",newline='') as f:
# 往csv文件中写入一行数据
dda = ['user11', '123456', '123456', '[email protected]']
csv_writer = csv.writer(f,dialect="excel")
csv_writer.writerow(dda)
# 往csv文件中写入多行数据
csv_writer.writerows([['user11', '123456', '123456', '[email protected]'],['user12', '123456', '123456', '[email protected]']])
2.5 访问数据库
- 安装 pymysql
- 用于支持 python 连接 mysql。
- pip install pymysql…tar.gz
- 连接数据库
- conn=pymysql.connect(host=‘服务器 IP’, port=3306, user=‘用户名’, passwd=‘密码’, db=‘数据库名’, charset=‘utf8’)
- port=3306,不能加引号,charset='utf8’可省略,此时使用默认端口和字符 集。
- 用游标读取数据
- cur=conn.cursor( )
- sql=select 语句
- cur.execute(sql)
- data=cur.fetchall( )
- 获得数据(元组)
- cur.close( )
- conn.close( )
- 关闭游标和数据库
- 用游标插入数据
- conn=pymysql.connect(…)
- cur=conn.cursor( )
- sql=‘insert into 表名 values(%d, “%s”)’ % (变量或常量 1,变量或常量 2)
- %s 必须加引号,%d 可加可不加。
- (变量或常量 1,变量或常量 2)是元组。
- cur.execute(sql)
- conn.commit( )
- 用于提交数据,不可省略。
- cur.close( )
- conn.close( )
- 批量提交数据
- 将很多数据写入数据库时,使用循环每次写入数据会导致服务器压力很大,可 以一次性提交批量数据。
- 列表.append((变量 1, 变量 2, …, 变量 n))
- 必须加括号,元组存入列表。
- sql=‘insert into 表名 values(%s, %s, %s, …%s)’
- 一律使用%s,%s 与变量个数对应,不能加引号。
- cur.executemany(sql, 列表)
- conn.commit( )
- cur.close( )
- conn.close( )