本篇文章将介绍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相关推荐

  1. Python3 爬虫学习笔记 C04 【自动化测试工具 Selenium】

    Python3 爬虫学习笔记第四章 -- [自动化测试工具 Selenium] 文章目录 [4.1]下载驱动 [4.2]声明浏览器对象 [4.3]访问页面 [4.4]启动参数 [4.5]查找节点 [4 ...

  2. 开源 软件测试自动化工具,开源Web自动化测试工具Selenium IDE

    Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,支持测试用例的录制与回放. 只要在浏览器里装一下插件,就可以开始使用,简直是"开箱即用".我们相信测 ...

  3. python自动测试p-python网络爬虫之自动化测试工具selenium[二]

    @ 前言 hello,大家好,在上章的内容里我们已经可以爬取到了整个网页下来,当然也仅仅就是一个网页. 因为里面还有很多很多的标签啊之类我们所不需要的东西. 额,先暂且说下本章内容,如果是没有丝毫编程 ...

  4. Python实训day07am【爬取数据接口、webdriver、自动化测试工具selenium】

    Python实训-15天-博客汇总表 目录 1.网络爬虫-课后练习题 1.1.写法1 1.2.写法2 2.Selenium自动化测试工具 2.1.安装工具 2.2.命令行操作 直接爬取HTML (30 ...

  5. 自动化测试工具selenium python_Selenium自动化测试工具使用方法汇总

    1.设置无头浏览器模式 from selenium import webdriver from selenium.webdriver.chrome.options import Options chr ...

  6. selenium python实例录制运行_WEB自动化测试工具selenium录制器使用笔记

    简介 selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发. Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户 ...

  7. WEB 自动化测试工具 Selenium 简介及其应用

    2019独角兽企业重金招聘Python工程师标准>>> 最近我们要对站点的指定 url 测试其页面请求完整性,并分析每个请求参数是否正常.如果不使用自动化测试工具,你也可以人肉点击. ...

  8. 自动化测试工具selenium python_WEB自动化测试工具selenium录制器

    简介 selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发. Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户 ...

  9. 【tips】自动化测试工具 - selenium和phantomJS

    ### 目录清单 selenium和phantomjs概述 selenium常用API 案例操作:模拟登陆csdn 1. selenium和phantomJS是什么东西 selenium是一套web网 ...

最新文章

  1. 样式集(二) 信息填写样式模板
  2. echarts 折线图悬停拐点大小不变_echarts-折线图(折线虚实/颜色与拐点样式修改)...
  3. 备忘:C++基础 -- 数据类型的学习总结
  4. Android AIDL的实现
  5. java员工请假系统_基于jsp的员工请假管理系统-JavaEE实现员工请假管理系统 - java项目源码...
  6. MFC访问阿里云Oss平台
  7. CNKI学术趋势与万方数据的知识脉络
  8. 安卓开发之Toast(吐司)应用
  9. 批判性思维_为什么批判性思维技能对数据科学家至关重要
  10. 如何禁止某个程序修改计算机,电脑如何禁止某个程序运行?
  11. Tilera的多核CPU
  12. Gos —— 文件系统
  13. 【文末送书】知识体系目录
  14. APP地推心得:可复制的APP地推方案
  15. 【后端教程】深入浅出动态化 SSR 服务(一):开发工具篇
  16. 搭建属于自己的云同步盘
  17. 2018年网龙、深圳盒子产品经理校招笔试题简要分享
  18. 对电容不同称呼的理解
  19. 电脑显示无法启动程序 因为计算机丢失,电脑显示无法启动此程序丢失.dll文件怎么办...
  20. 如何用GraphPadPrism绘制热图

热门文章

  1. android 课堂讨论内容,Android端课堂交互应用研究与实现
  2. python数据格式化后导入数据库_MySQL导入格式化数据
  3. 怎么将查询到的数据表传到文本区_60秒上手Treelab (二):入门数据表
  4. python数据框拼接_pandas数据拼接的实现示例
  5. 有史以来最伟大的软件开发书籍(国外篇)
  6. Java原生代码连接MySQL数据库
  7. 武汉大学计算机专业录取分数线,最新武汉大学专业排名录取分数线
  8. HALCON 20.11:深度学习笔记(5)---设置超参数
  9. C++标准转换运算符:reinterpret_cast
  10. 关闭使用ShellExecute打开的进程