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 多线程抓取图片效率对比
Feb 27 Python
Python3实现带附件的定时发送邮件功能
Dec 22 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
django使用LDAP验证的方法示例
Dec 10 Python
Django中ORM外键和表的关系详解
May 20 Python
Python3+Appium实现多台移动设备操作的方法
Jul 05 Python
pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作
May 25 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
如何创建一个Flask项目并进行简单配置
Nov 18 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
Python NumPy灰度图像的压缩原理讲解
Aug 04 Python
python playwright 自动等待和断言详解
Nov 27 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
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
拥抱模块化的JavaScript
2012/03/07 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[47:03]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第二场 12.10
2020/12/13 DOTA
Python标准库之itertools库的使用方法
2017/09/07 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
详解Python 函数如何重载?
2019/04/23 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
Python requests接口测试实现代码
2020/09/08 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
当当网软件测试笔试题
2015/11/24 面试题
EJB的基本架构
2016/09/22 面试题
《颐和园》教学反思
2014/02/26 职场文书
酒店辞职书范文
2015/02/26 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
联谊会开场白
2015/06/01 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
vue里使用create, mounted调用方法
2022/04/26 Vue.js