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的列表中利用remove()方法删除元素的教程
May 21 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python中取整的几种方法小结
Jan 06 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 Python
python中的json总结
Oct 11 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
python:接口间数据传递与调用方法
Dec 17 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
python实现控制台输出彩色字体
Apr 05 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
Python 串口通信的实现
Sep 29 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
如何利用php+mysql保存和输出文件
2006/10/09 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
Python机器学习之决策树算法
2017/12/22 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
windows下python安装pip图文教程
2018/05/25 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
python eventlet绿化和patch原理
2020/11/21 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
新闻专业个人自我评价
2013/09/21 职场文书
金融专业应届生求职信
2013/11/02 职场文书
终止劳动合同通知书
2015/04/16 职场文书
军训新闻稿范文
2015/07/17 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书