自动化测试工具Selenium
本篇文章将介绍selenium自动化测试工具。看完这篇文章,完全有能力写出一个抢课脚本。文章最后有一个教务网的实战案例,包括验证码识别,自动化处理流程分析。
1.环境搭建
1.1下载驱动程序
以谷歌浏览器为例
下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads
1.2安装selenium
pip install selenium
1.3 基本测试
编写代码,如果程序能正常启动,那么环境搭建就没有问题。
from selenium import webdriverdirver_path = r"C:\Users\gmbjzg\Desktop\chromedriver_win32\chromedriver.exe"driver = webdriver.Chrome(executable_path=dirver_path)driver.get("https://www.baidu.com")
2.常用API详解
2.1元素定位
我们可以通过以下几种方式定位元素
id选择器
driver.find_element_by_id('kw')
类选择器
driver.find_element_by_class_name('submit')
标签选择器
driver.find_element_by_tag_name('input')
xpath定位
driver.find_element_by_xpath('//div')
css选择器
driver.find_element_by_css_selector('#box>.top')
还可以根据input标签的name属性定位表单元素
driver.find_element_by_name('pwd')
2.2表单元素操作
input 输入框
模拟输入
inputTag = driver.find_element_by_id('pwd')
inputTag.send_keys('python')
清空输入框
inputTag.clear()
button 按钮
模拟点击
inputTag = driver.find_element_by_id('kw')
inputTag.click()
checkbox 记住我
模拟点击
rememberTag = driver.find_element_by_id("remember")
rememberTag.click()
select 下拉菜单
模拟选中选项
from selenium.webdriver.support.ui import SelectselectTag = Select(driver.find_element_by_name("Menu"))selectTag.select_by_index(1)
selectTag.select_by_index(2)
3.链式调用
from selenium.webdriver import ActionChainsdirver_path = r"C:\Users\gmbjzg\Desktop\chromedriver_win32\chromedriver.exe"driver = webdriver.Chrome(executable_path=dirver_path)# 定位标签
inputTag = driver.find_element_by_id('kw')
submitTag = driver.find_element_by_id('su')# 链式调用
actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.click(submitTag)
actions.perform()
4.获取网页cookie
获取网页所有cookie信息
driver.get_cookies()
获取某个cookie值
driver.get_cookie(key)
5.页面标签切换
# 打开一个新的标签页(JS注入)
driver.execute_script("window.open(%s)" % url)
# 切换到新页面
driver.switch_to_window(driver.window_handles[1])
6.等待页面加载
隐式等待(强制等待几秒钟)
driver = webdriver.Chrome(executable_path=driver_path)driver.get("https://www.douban.com/")driver.implicitly_wait(10)
显示等待(如果元素加载完成,则不再等待,指定等待多长时间后不再等待)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import Bydriver.get("http://www.baidu.com")element = WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "pwd"))
)
7.关闭页面和浏览器
示例代码如下
driver.close() # 关闭当前页面
driver.quit() # 退出浏览器
8.案例实战
最后以自动登录某教务系统为例作结束本篇文章
网址:http://jw.zhku.edu.cn/home.aspx
第一步,打开网页定位元素
我们遇到的第一个问题就是这个网站是使用iframe标签嵌套的,如果直接定位元素是无法获取的。需要先切换到iframe标签,再进行操作。
示例代码如下
# 切换到iframe标签
driver.switch_to.frame("frm_login")
第二步,获取标签元素
# 元素获取
xhInputTag = driver.find_element_by_id("txt_asmcdefsddsd")
pwdInputTag = driver.find_element_by_id("txt_psasas")
yzmInputTag = driver.find_element_by_id("txt_sdertfgsadscxcadsads")
imgCodeTag = driver.find_element_by_id("imgCode")
submitTag = driver.find_element_by_name("btn_login")
第三步,表单填值
# 表单填值
actions = ActionChains(driver)
actions.move_to_element(xhInputTag)
actions.send_keys_to_element(xhInputTag, "学号")
actions.move_to_element(pwdInputTag)
actions.send_keys_to_element(pwdInputTag, "密码")
actions.move_to_element(yzmInputTag)
这里遇到了第二个问题就是需要识别图片验证码。并且首页加载的时候,图片验证码是不显示的,需要先点击一下验证码输入框。
示例代码如下
yzmInputTag.click()
获取验证码
imgCodeTag.screenshot('yzm.jpg')
识别验证码,直接调用第三方接口。这个验证码识别接口是在百度上随手一搜的,大家可自行找一个打码平台。
图鉴验证码识别:http://www.ttshitu.com/
# 识别验证码
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:return result["message"]return ""# 3 代表中英文
yzmCode = base64_api('账号', '密码', 'yzm.jpg', 3)
验证码输入
输入验证码
actions.send_keys_to_element(yzmInputTag, yzmCode)
actions.move_to_element(submitTag)
actions.click(submitTag)
第四步, 登录执行
执行
actions.perform()
第五步,去除弹窗确认
当我们成功登录之后,会有一个别处已下线的弹窗确认,我们需要去除这个弹窗确认 示例代码如下
# 5.执行
driver.switch_to.alert.dismiss()
完整代码如下:
from selenium import webdriver
from selenium.webdriver import ActionChains
import base64
import json
import requestsdirver_path = r"C:\Users\gmbjzg\Desktop\chromedriver_win32\chromedriver.exe"driver = webdriver.Chrome(executable_path=dirver_path)driver.get("http://jw.zhku.edu.cn/home.aspx")# 切换到iframe标签
driver.switch_to.frame("frm_login")# 1.元素获取
xhInputTag = driver.find_element_by_id("txt_asmcdefsddsd")
pwdInputTag = driver.find_element_by_id("txt_psasas")
yzmInputTag = driver.find_element_by_id("txt_sdertfgsadscxcadsads")
imgCodeTag = driver.find_element_by_id("imgCode")
submitTag = driver.find_element_by_name("btn_login")# 5.表单填值
actions = ActionChains(driver)
actions.move_to_element(xhInputTag)
actions.send_keys_to_element(xhInputTag, "")
actions.move_to_element(pwdInputTag)
actions.send_keys_to_element(pwdInputTag, "")
actions.move_to_element(yzmInputTag)
yzmInputTag.click()# 2.获取验证码
imgCodeTag.screenshot('yzm.jpg')# 3.识别验证码
def base64_api(uname, pwd, img, typeid):with open(img, 'rb') as f:base64_data = base64.b64encode(f.read())b64 = base64_data.decode()data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)if result['success']:return result["data"]["result"]else:return result["message"]return ""yzmCode = base64_api('', '', 'yzm.jpg', 3)# 4.输入验证码
actions.send_keys_to_element(yzmInputTag, yzmCode)
actions.move_to_element(submitTag)
actions.click(submitTag)# 5.执行
actions.perform()# 6.去除弹窗确认
driver.switch_to.alert.dismiss()
通过这个案例,相信大家对selenium工具的使用已经有初步的认识啦!更多好玩的东西就留给大家自己发掘了。
最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试经:一线城市搬砖!又面软件测试岗,5000就知足了…
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
什么样的人适合从事软件测试工作?
那个准点下班的人,比我先升职了…
测试岗反复跳槽,跳着跳着就跳没了…
自动化测试工具Selenium相关推荐
- Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】
Python3 爬虫学习笔记第四章 -- [自动化测试工具 Selenium] 文章目录 [4.1]下载驱动 [4.2]声明浏览器对象 [4.3]访问页面 [4.4]启动参数 [4.5]查找节点 [4 ...
- 开源 软件测试自动化工具,开源Web自动化测试工具Selenium IDE
Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,支持测试用例的录制与回放. 只要在浏览器里装一下插件,就可以开始使用,简直是"开箱即用".我们相信测 ...
- python自动测试p-python网络爬虫之自动化测试工具selenium[二]
@ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...
- Python实训day07am【爬取数据接口、webdriver、自动化测试工具selenium】
Python实训-15天-博客汇总表 目录 1.网络爬虫-课后练习题 1.1.写法1 1.2.写法2 2.Selenium自动化测试工具 2.1.安装工具 2.2.命令行操作 直接爬取HTML (30 ...
- 自动化测试工具selenium python_Selenium自动化测试工具使用方法汇总
1.设置无头浏览器模式 from selenium import webdriver from selenium.webdriver.chrome.options import Options chr ...
- selenium python实例录制运行_WEB自动化测试工具selenium录制器使用笔记
简介 selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发. Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户 ...
- WEB 自动化测试工具 Selenium 简介及其应用
2019独角兽企业重金招聘Python工程师标准>>> 最近我们要对站点的指定 url 测试其页面请求完整性,并分析每个请求参数是否正常.如果不使用自动化测试工具,你也可以人肉点击. ...
- 自动化测试工具selenium python_WEB自动化测试工具selenium录制器
简介 selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发. Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户 ...
- 【tips】自动化测试工具 - selenium和phantomJS
### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...
最新文章
- 样式集(二) 信息填写样式模板
- echarts 折线图悬停拐点大小不变_echarts-折线图(折线虚实/颜色与拐点样式修改)...
- 备忘:C++基础 -- 数据类型的学习总结
- Android AIDL的实现
- java员工请假系统_基于jsp的员工请假管理系统-JavaEE实现员工请假管理系统 - java项目源码...
- MFC访问阿里云Oss平台
- CNKI学术趋势与万方数据的知识脉络
- 安卓开发之Toast(吐司)应用
- 批判性思维_为什么批判性思维技能对数据科学家至关重要
- 如何禁止某个程序修改计算机,电脑如何禁止某个程序运行?
- Tilera的多核CPU
- Gos —— 文件系统
- 【文末送书】知识体系目录
- APP地推心得:可复制的APP地推方案
- 【后端教程】深入浅出动态化 SSR 服务(一):开发工具篇
- 搭建属于自己的云同步盘
- 2018年网龙、深圳盒子产品经理校招笔试题简要分享
- 对电容不同称呼的理解
- 电脑显示无法启动程序 因为计算机丢失,电脑显示无法启动此程序丢失.dll文件怎么办...
- 如何用GraphPadPrism绘制热图
热门文章
- android 课堂讨论内容,Android端课堂交互应用研究与实现
- python数据格式化后导入数据库_MySQL导入格式化数据
- 怎么将查询到的数据表传到文本区_60秒上手Treelab (二):入门数据表
- python数据框拼接_pandas数据拼接的实现示例
- 有史以来最伟大的软件开发书籍(国外篇)
- Java原生代码连接MySQL数据库
- 武汉大学计算机专业录取分数线,最新武汉大学专业排名录取分数线
- HALCON 20.11:深度学习笔记(5)---设置超参数
- C++标准转换运算符:reinterpret_cast
- 关闭使用ShellExecute打开的进程