Selenium(Python web测试工具)基本用法详解


Posted in Python onAugust 10, 2018

本文实例讲述了Selenium基本用法。分享给大家供大家参考,具体如下:

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

安装

pip install selenium

安装驱动程序

下面介绍几种主流浏览器的驱动程序下载地址:

浏览器 下载地址
Chrome https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox https://github.com/mozilla/geckodriver/releases
Safari https://webkit.org/blog/6900/webdriver-support-in-safari-10/

下面以windows环境,Chrome浏览器为例,我下载的是2.36版本的驱动chromedriver_win32.zip,解压得到一个chromedriver.exe文件,将其放置在浏览器的安装目录之下,如图所示:

Selenium(Python web测试工具)基本用法详解

selenium的简单用法

如果你已经按照上面安装了selenium,并且安装了驱动程序,下面来简单的玩一玩selenium:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 创建Chrome WebDriver实例,此路径为驱动程序的路径
driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
# 加载URL网页
driver.get("http://www.baidu.com/")
# 判断标题中是否包含该字符串
assert "百度一下" in driver.title
# 查找id=kw的节点
element = driver.find_element_by_id("kw")
# 清空原有的输入,输入python进行搜索
element.clear()
element.send_keys("python")
element.send_keys(Keys.RETURN)
# 判断是否有结果返回
assert "No results found." not in driver.page_source
# 关闭当前标签,也可以使用quit()关闭浏览器
driver.close()

上面的栗子,简单介绍了一下selenium的用法,接下来将结合selenium与unittest来编写测试:

import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
# 继承至TestCase,表示这是一个测试用例类
class BaiduCase(unittest.TestCase):
  # 初始化的一部分
  def setUp(self):
    self.driver = Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
  # 测试用例方法,名称可以自定义,方法名称始终以test开头
  def test_serch(self):
    self.driver.get("https://www.baidu.com/")
    assert "百度一下" in self.driver.title
    element = self.driver.find_element_by_id("kw")
    element.clear()
    element.send_keys("python")
    element.send_keys(Keys.RETURN)
    assert "No results found." not in self.driver.page_source
  # 在执行完各种测试用例方法之后会执行,为一个清理操作
  def tearDown(self):
    self.driver.close()
if __name__ == "__main__":
  unittest.main()

执行上面的代码,将会返回如下信息:

.
----------------------------------------------------------------------
Ran 1 test in 2.914s
OK

值得注意的是,如果没有配置驱动,或者路径写错了,将会出现WebDriverException错误

与网页互动

与一个网页进行的真正的交互,具体的说,与网页的HTML元素进行交互。如果需要与之交互,那么久必须要查找到HTML的元素。WebDriver提供了多种查找HTML元素的方法。例如,给定一个元素为:

<input type="text" name="passwd" id="passwd-id"/>

我们可以使用下面任意方法查找到它:

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

值的注意的是,使用xpath进行匹配时,如果有多个元素与查询匹配,只会返回第一个元素。如果什么都找不到,将会返回NoSuchElementException错误。当你查找到一个元素时,你可以用它做什么?首先你可能会想到在文本标签中输入一些文本:

element.send_keys("python")

也可以使用Keys来模拟一些箭头键:

from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.ARROW_DOWN)

你也可以使用clear()方法来清除文本标签里的内容:

element.clear()

切换下拉菜单的状态,我们可以依次循环选择每个选项并依次选择每个选项:

element = driver.find_element_by_xpath("//select[@name='name']")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
  option.click()

正如你所看到的,这并不是处理select元素的最有效的方式。WebDriver类包还包括一个名为Select的类,它提供了与这些类交互的有用的方法:

from selenium.webdriver.support.ui import Select
element = driver.find_element_by_xpath("//select[@name='name']")
select = Select(element)
select.select_by_index(index)
select.select_by_visible_text("text")
select.select_by_value("value")

WebDriver还提供取消选择所有选项的功能:

element = driver.find_element_by_id('id')
select = Select(element)
select.deselect_all()

Select还具有获取所有已经选中的标签的方法:

element = driver.find_element_by_id('id')
select = Select(element)
all_options = select.all_selected_options

获取所有可用的选项:

options = select.options

完成后表格填写后,您可以需要提交,一种方法是找到submit按钮并点击它:

driver.find_element_by_id('submit').click()

WebDriver在每个元素上都有一个submit的便利方法,如果你在一个表单的元素上调用它,Webdriver会遍历DOM直到包含表单,然后调用它:

element.submit()

WebDriver还提供了前进与后退的操作:

driver.forward()
driver.back()

WebDriver还可以进行设置Cookies和获取Cookies:

driver.get('https://www.baidu.com/')
driver.add_cookie({"name":"foo","value":"laozhang"})
print(driver.get_cookies()

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python人人网登录应用实例
Sep 26 Python
简单介绍Python中的RSS处理
Apr 13 Python
Python探索之自定义实现线程池
Oct 27 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
基于python 二维数组及画图的实例详解
Apr 03 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
关于python的缩进规则的知识点详解
Jun 22 Python
python3.x中安装web.py步骤方法
Jun 23 Python
Numpy数组的广播机制的实现
Nov 03 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
Mar 04 Python
Python生成器generator用法示例
Aug 10 #Python
python 字典修改键(key)的几种方法
Aug 10 #Python
详解python 注释、变量、类型
Aug 10 #Python
python文件操作之批量修改文件后缀名的方法
Aug 10 #Python
Random 在 Python 中的使用方法
Aug 09 #Python
Python中函数参数调用方式分析
Aug 09 #Python
Python动态生成多维数组的方法示例
Aug 09 #Python
You might like
海贼王:最美的悬赏令!
2020/03/02 日漫
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
Jquery ui css framework
2010/06/28 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
AngularJS基础 ng-class-odd 指令示例
2016/08/01 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
python连接mongodb密码认证实例
2018/10/16 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python使用pycharm导入pymysql教程
2020/09/16 Python
html5开发三八女王节表白神器
2018/03/07 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
如何做好总经理助理
2013/11/12 职场文书
大学生学业生涯规划
2014/01/05 职场文书
生日宴会答谢词
2014/01/09 职场文书
房地产项目策划书
2014/02/05 职场文书
学生干部培训方案
2014/06/12 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
学习保证书
2015/01/17 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
休假证明书
2015/06/24 职场文书
暑假打工感想
2015/08/07 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
MySQL批量更新不同表中的数据
2022/05/11 MySQL
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android