前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Python和Chrome安装Selenium WebDriver

使用Python和Chrome安装Selenium WebDriver

作者头像
用户7466307
发布于 2020-07-28 09:20:30
发布于 2020-07-28 09:20:30
3.8K00
代码可运行
举报
运行总次数:0
代码可运行

什么是WebDriver?

WebDriver是用于与实时Web浏览器进行交互的可编程界面。它使测试自动化能够打开浏览器,发送点击,键入键,刮擦文本并最终干净地退出浏览器。WebDriver界面是W3C建议书。WebDriver标准的最受欢迎的实现是Selenium WebDriver,它是免费和开放源代码。

WebDriver具有多个组件:

  1. 语言绑定。诸如Selenium WebDriver之类的软件包为浏览器交互 提供了编程语言绑定。Selenium支持主要语言,例如C#,Java,JavaScript,Ruby和Python
  2. 自动化代码。程序员使用语言绑定来自动化浏览器交互。常见的 交互包括查找元素,单击元素以及抓取文本。通常,这是使用测 试自动化框架编写的。
  3. JSON Wire协议。语言绑定使用JSON对每个交互进行编码,并将 它们作为REST API请求发送到浏览器的驱动程序。JSON Wire协议 独立于平台和语言。
  4. 浏览器驱动程序。该驱动程序是测试计算机上的独立可执行文件。它充当交互的调用方和浏览器本身之间的代理。它接收JSON交互请 求,并使用HTTP将其发送到浏览器。
  5. 浏览器。浏览器呈现被测网页。它基本上由驾驶员控制。所有主要 的浏览器都支持WebDriver。每个浏览器还需要将自己的驱动程序 类型与浏览器安装在同一台计算机上,并且可以从系统路径进行 访问。例如,谷歌浏览器需要ChromeDriver。

安装Selenium WebDriver

对于我们的测试项目,我们将Selenium WebDriver的Python绑定与Google Chrome和ChromeDriver结合使用。我们可以使用任何浏览器,但请使用Chrome,因为(a)它具有很高的市场份额,并且(b)其开发人员工具稍后会派上用场。

验证ChromeDriver是否可以从命令行运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ chromedriver
Starting ChromeDriver 73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72) on port 9515
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

然后,将Python的selenium软件包安装到我们的环境中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ pipenv install selenium --dev

现在,机器应该可以进行网络测试了!

新测试

在名为的目录下创建一个新的Python模块。这个新模块将保存我们的Web UI测试。然后,添加以下导入语句:tests/test_web.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pytest

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys

为什么我们需要这些进口?

  • pytest 将用于固定装置
  • Chrome 提供ChromeDriver绑定
  • Keys 包含用于浏览器交互的特殊按键

WebDriver设置和清理

作为最佳实践,每个测试用例都应使用其自己的WebDriver实例。尽管设置和清除会给每个测试增加几秒钟的时间,但是每个测试使用一个WebDriver实例可使测试保持简单,安全和独立。如果一个测试遇到问题,那么其他测试将不会受到影响。另外,为每个测试使用单独的WebDriver实例可以使测试并行运行。

最好使用pytest固定装置处理WebDriver设置。fixtures是pytest出色的设置和清除功能,它们也可以进行依赖项注入。任何需要WebDriver实例的测试都可以简单地调用fixture来获取它。

代码

将以下代码添加到:tests/test_web.py:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@pytest.fixture
def browser():
  driver = Chrome()
  driver.implicitly_wait(10)
  yield driver
  driver.quit()

browser是一个pytest固定功能,如装饰器所示。让我们逐步完成每一行,以了解此新装置的功能。@pytest.fixture

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver = Chrome()

Chrome()使用默认选项在本地计算机上初始化ChromeDriver实例。它返回的驱动程序对象已绑定到ChromeDriver实例。所有WebDriver调用都将通过它进行.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.implicitly_wait(10)

Web UI测试自动化中最痛苦的部分是在触发交互之后等待页面加载/更改。该页面需要时间来呈现新元素。如果自动化尝试在存在新元素之前对其进行访问,则WebDriver将引发一个NoSuchElementException。等待不当是Web UI测试“不稳定”的主要来源之一。

implicitly_wait上面的 方法告诉驱动程序,每当尝试找到元素时,它们要等待10秒钟才能存在。等待机制很聪明:当元素出现时,它不会停止等待10秒钟,而是会立即停止等待。隐式等待被声明一次,然后自动用于 所有元素。另一方面,显式等待可以以每次显式等待调用为代价为每个交互提供自定义等待。作为最佳实践,用等待一个风格 完全用于测试自动化。混合显式和隐式等待会产生令人讨厌的意外副作用。对于我们的测试项目,隐式等待10秒应该是合理的(如果您的Internet连接速度很慢,请增加此超时时间以进行补偿)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yield driver

pytest固定装置应返回一个表示已设置内容的值。我们的装置返回对初始化的WebDriver的引用。但是,return它使用而不是使用语句,这yield意味着fixture 是generator。fixture 的第一个迭代-在我们的例子中是WebDriver初始化-是在测试开始之前要调用的“设置”阶段。第二个迭代(将quit称为调用)是测试完成要调用的“清理”阶段 。编写夹具作为生成器将相关的设置和清理操作放在一起作为一个关注点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.quit()

无论发生什么情况,始终在测试结束时退出WebDriver实例。测试自动化结束时,测试机上的驱动程序进程不会总是死掉。未能明确退出驱动程序实例可能会使它作为僵尸进程运行,这可能会消耗甚至锁定系统资源。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Python面向对象编程-面向对象的各种姿势及实例化
前面我们讲解了面向对象的基础,没有涉及到一行代码。这些看似很枯燥的概念,其实是非常重要的。如果不能及时理解或掌握,可以慢慢来。
1846122963
2018/07/26
7110
Python面向对象编程Day 25部分
  说的就是数据属性,点的方式调用的就是属性,把函数封装成数据属性,使得外部在调用的时候感觉不到内部的逻辑。既可以访问实例属性还可以访问类属性。
py3study
2020/01/19
3270
Python面向对象编程Day 25部分
Python面向对象编程实战:从类定义到高级特性的进阶之旅(2/10)
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它将数据和操作数据的方法封装在一起,以对象为核心来组织和设计程序。在 OOP 中,程序被看作是一系列相互交互的对象集合,每个对象都有自己的状态(属性)和行为(方法)。类(Class)是创建对象的模板,它定义了对象的属性和方法,而对象(Object)是类的具体实例,一个类可以创建多个对象。
正在走向自律
2025/05/04
270
Python面向对象编程实战:从类定义到高级特性的进阶之旅(2/10)
Python面向对象基础
当把number属性变成私有属性__number之后,无法直接访问得到,只能通过get_number和set_number两个函数访问__number属性。
职场亮哥
2020/10/10
1.1K0
Python面向对象基础
Python3 面向对象编程进阶
面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想,把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。在 OOP 编程中对象是 OOP 程序的基本单元,一个对象包含了数据和操作数据的函数,在 Python 中,所有数据类型都可以视为对象,也可以自定义对象,自定义的对象数据类型就是面向对象中的类( Class)的概念。
嵌入式视觉
2022/09/05
4450
Python3 面向对象编程进阶
Python面向对象编程
而解决这一问题的比较有效的方法之一就是数据隐藏,即编码过程中尽可能的隐藏内部的实现细节。
讲编程的高老师
2020/08/14
5100
Python面向对象编程
面向对象最重要的概念就是类(Class)和实例(Instance),Java比较熟了,下面贴代码注释
听着music睡
2018/10/25
4490
再再肝3天,整理了70个Python面向对象编程案例
Python 作为一门面向对象编程语言,常用的面向对象知识怎么能不清楚呢,今天就来分享一波
周萝卜
2021/11/24
7280
Python从0到100(十七):面向对象编程进阶
封装:将属性和方法放到一起做为一个整体,然后通过实例化对象来处理,这样隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了。
是Dream呀
2024/05/08
1100
Python面向对象编程(OOP) —— 继承、使用槽
考虑一下许多相似而又有少数关键差别的数据类型,你可能会想到用OOP处理这种数据。你可以为每个数据类型创建各不相同的类,但是会许多代码的重复,效率并不是很高
Gorit
2021/12/09
6250
Python面向对象编程(OOP)  —— 继承、使用槽
Python 面向对象编程(OOP)—— 类
在面向对象编程中,“类”就像一个函数,尽管普通的函数就可以用于整个程序,在OOP中,我们必须创建包含类中数据的“对象”,然后才能使用
Gorit
2021/12/09
5530
Python 面向对象编程(OOP)—— 类
Python day7 面向对象编程 (1)
Object Oriented Programming,一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
昆兰
2024/07/31
730
30天拿下Python之面向对象编程
在上一节,我们介绍了Python的函数,包括:函数的定义、函数的调用、参数的传递、lambda函数等内容。在本节中,我们将介绍Python的面向对象编程。面向对象编程(Object-Oriented Programming, 即OOP)是一种编程范型,它以对象为基础,将数据和操作封装在一个类(Class)中。在Python中,类是一种定义对象结构和行为的模板,而对象则是类的实例。类定义了一个新的类型,用于创建具有特定属性和方法的对象。类是面向对象编程的核心,它允许程序员使用对象来组织代码和复用代码。
用户6256742
2024/06/22
910
Python - 面向对象编程 - super()
这里用了 super(子类名, self) ,和上面的 super() 是一样效果
小菠萝测试笔记
2021/09/08
3430
08. 面向对象编程(二)
上一篇文章中,我们介绍了面向对象编程的类和实例,以及三大基本特性。今天我们继续来了解面向对象编程的其他知识。
有一只柴犬
2024/01/25
1230
08. 面向对象编程(二)
Python - 面向对象编程 - 使用 super() 的一些注意事项
https://www.cnblogs.com/poloyy/p/15223443.html
小菠萝测试笔记
2021/09/10
3280
面向对象:继承
继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。 一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。
changxin7
2019/08/14
5910
面向对象:继承
Python面向对象:杂七杂八的知识点
实在是因为python中对象方面的内容太多、太乱、太杂,在写相关文章时比我所学过的几种语言都更让人"糟心",很多内容似独立内容、又似相关内容,放这也可、放那也可、放这也不好、放那也不好。
py3study
2020/02/10
9540
图解python | 面向对象编程
教程地址:http://www.showmeai.tech/tutorials/56
ShowMeAI
2022/02/23
6400
图解python | 面向对象编程
PythonOOP面向对象编程1
车(类) -------> BYD E6 (京A.88888) 实例 ---------------> BMW X5 (xxxxxx) 实例
py3study
2020/01/16
3710
相关推荐
Python面向对象编程-面向对象的各种姿势及实例化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档