Selenium(Python web测试工具)基本用法详解
作者:喷跑的豆子 发布时间:2022-08-02 22:04:39
本文实例讲述了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的简单用法
如果你已经按照上面安装了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程序设计有所帮助。
来源:https://blog.csdn.net/y472360651/article/details/79647410
猜你喜欢
- 前言我们在写爬虫是遇到最多的应该就是js反爬了,今天分享一个比较常见的js反爬,这个我已经在多个网站上见到过了。我把js反爬分为参数由js加
- 本文实例讲述了Python函数基础用法。分享给大家供大家参考,具体如下:一、什么是命名关键字参数?格式: 在*后面参数都是命名关键字参数。特
- 置信椭圆原理及椭圆图形绘制置信椭圆长短轴计算def confidence_oval(self,factor, ppf_rate): &nbs
- 如何在网页打开时显示“正在加载”之类的信息?代码及说明见下: <% Response.Buffer =
- 执行表扫描操作之前,将调用info()函数,以便为优化程序提供额外信息。优化程序所需的信息不是通过返回值给定的,你需填充存储引擎类的特定属性
- 记得以前写过一篇文章 php有效的过滤html标签,js代码,css样式标签: <?php $str = preg_replace(
- 今天发现sympy依赖的库mpmath里也有很多数学函数,其中也有在复平面绘制二维图的函数cplot,具体例子如下from mpmath i
- 这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。帮助蹲厕族、YP族、饭圈女孩在
- python 自定义封装带颜色的logging模块自己在搭建python接口自动化框架 分享一些内容过程中想自己封装一个logger方法 根
- 前言登录跳转:不同的用户在登录成功之后跳转到不同的网页当中例如:网站管理员登录成功后跳转到网站后台,vip用户登录成功后跳转到vip页面准备
- # -*- coding: utf-8 -*-import Image,ImageDraw,ImageFontimport randomim
- 蜜蜂可以看到紫外线,人则看不到;蛇和蚊子可以看到红外线,人则看不到。火狐(Firefox)浏览器也可以看到人们看不到的东西,但迄今为止,这些
- 最近在开发项目的过程中遇到一个问题,就是在插入一条记录的后要立即获取所在数据库中ID,而该ID是自增的,怎么做?在sql server 20
- django创建自定义模板处理器:一、需求来源:在django开发中,页面是通过template(模板)进行渲染的,对于一些数据,可以通过{
- 在开发过程中,有时遇到由于缓存问题导致页面不能及时更新,有时页面引入了不必需的样式脚本文件,有时由于文件太多,字节过大导致页面的性能缓慢,为
- 本文主要介绍的是MySQL慢查询分析方法,前一段日子,我曾经设置了一次记录在MySQL数据库中对慢于1秒钟的SQL语句进行查询。想起来有几个
- 一、先进行剪切操作圆形区域占图片可能不多,多余的部分不要。看下图。只要纽扣电池内部和少许的边缘部分,其余黑色背景部分不需要。先沿着纽扣电池的
- #!/usr/bin/env python#-*- coding: utf-8 -*-#==========================
- 由于现在在公司负责制作标准的静态页面,为了增强客户体验,所以经常要做些AJAX效果,也学你也和我一样在,学习AJAX。而设计AJAX时使用的
- 我们用pycharm写CSS的时候,是不是苦于没有提示,那么pycharm中如何显示CSS提示呢?下面小编给大家分享一下。首先点击左上角的f