草庐IT

selenium 4(python)快速入门-1 简介

pythontesting 2023-10-22 原文

Selenium历史

Selenium为浏览器自动化提供了先进的功能,从业者通常用它来实现网络应用的端到端测试。Selenium由三个核心组件组成: WebDriver, Grid, 和 IDE。

Jason Huggins和Paul Hammant于2004年在Thoughtworks工作时创建了Selenium。他们选择了 "Selenium "这个名字作为与惠普公司开发的现有测试框架Mercury的对应物。这个名字很有意义,因为化学物质硒以减少汞的毒性而闻名。

最初版本的Selenium(今天被称为Selenium Core)是一个JavaScript库,在网络应用中模拟用户操作。Selenium Core解释Selenese命令来实现任务。这些命令被编码为由三部分组成的HTML表格:命令(在网络浏览器中执行的动作,如打开URL或点击链接)、目标(识别网络元素的定位器,如特定组件的属性)和值(可选数据,如输入到网络表格字段中的文本)。

Huggins和Hammant在Selenium Remote Control(RC)的新项目中给Selenium Core增加了脚本层。Selenium RC遵循C-S架构。客户端使用一种绑定语言(如Python或JavaScript)通过HTTP向Selenium RC服务器的中间代理发送Selenese命令。该服务器按需启动网络浏览器,将Selenium Core库注入网站,并将客户的请求代理给Selenium Core。此外,Selenium RC服务器将目标网站掩盖在与注入的Selenium Core库相同的本地URL上,以避免同源策略问题。这种方法在当时是改变了浏览器自动化的游戏规则,但它有很大的局限性。首先,由于JavaScript是支持自动化的底层技术,有些操作是不允许的,因为JavaScript不允许--例如,上传和下载文件或处理弹出式窗口和对话框。此外Selenium RC引入的开销也影响性能。

与此同时,Simon Stewart在2007年创建了WebDriver项目。WebDriver和Selenium RC从功能的角度来看是相当的,也就是说,这两个项目都允许程序员使用编程语言来模拟用户。然而,WebDriver使用每个浏览器的原生支持来进行自动化,因此,其能力和性能远远优于RC。2009年,Jason Huggins和Simon Stewart在谷歌测试自动化会议上会面后,他们决定将Selenium和WebDriver合并为一个项目。这个新项目被称为Selenium WebDriver或Selenium 2。这个新项目使用基于HTTP的通信协议,结合浏览器上的本地自动化支持。这种方法仍然是Selenium 3(2016年发布)和Selenium 4(2021年发布)的基础。现在我们把Selenium RC和Core称为 "Selenium 1",而且不鼓励使用它,而是使用Selenium WebDriver。

Selenium WebDriver

Selenium WebDriver是自动控制浏览器的库。它提供了不同语言绑定的跨平台的API。Selenium WebDriver支持的官方编程语言有Python、Java、JavaScript、Ruby和C#。Selenium WebDriver使用每个浏览器实现的本地支持来执行自动化过程。我们需要在使用Selenium WebDriver API的脚本和浏览器之安装驱动。

驱动程序(如chromedriver、geckodriver等)是依赖于平台的二进制文件,接收来自WebDriver脚本的命令,并将其翻译成一些浏览器特定的语言。在Selenium WebDriver的第一个版本中(即在Selenium 2中),这些命令(也被称为Selenium协议)是通过HTTP的JSON消息(所谓的 JSON Wire Protocol)。如今,这种通信(仍然是通过HTTP的JSON)遵循W3C WebDriver的标准规范。从Selenium 4开始,该规范是首选的Selenium协议。

Chrome浏览器遵循DevTools协议。DevTools是一套用于基于Blink渲染引擎的浏览器的开发者工具,如Chrome、Chromium、Edge或Opera。DevTools协议基于JSON-RPC消息,可以对这些浏览器进行检查、调试和分析。在Firefox中,原生自动化支持使用Marionette协议。Marionette是基于JSON的远程协议,允许检测和控制基于Gecko引擎的网络浏览器(如Firefox)。

Selenium WebDriver允许像用户一样控制网络浏览器,但要以编程方式进行。为此,Selenium WebDriver的API提供了各种各样的功能,可以浏览网页,与网页元素互动,或者模拟用户操作,以及其他许多功能。目标应用是基于网络的,如静态网站、动态网络应用、单页应用(SPA)、具有网络界面的复杂企业系统等。

Selenium Grid

Selenium家族的第二个项目是Selenium Grid。Philippe Hanrigou在2008年开始开发这个项目。Selenium Grid是一组联网的主机,为Selenium WebDriver提供浏览器基础设施。这个基础结构使Selenium WebDriver脚本能够在多个操作系统的不同性质(类型和版本)的远程浏览器中(并行)执行。

网格的中心入口是Hub(也被称为Selenium服务器)。这个服务器端的组件保持对节点的跟踪,并代理来自Selenium脚本的请求。和Selenium WebDriver一样,W3C WebDriver规范是这些脚本和Hub之间通信的标准协议。Selenium 4提供了完全分布式的Selenium Grid。这种架构实现了先进的负载平衡机制,以避免任何组件过载。

Selenium IDE

Shinya Kasatani在2006年创建了这个项目。Selenium IDE是记录和回放(R&P)自动化技术的工具。首先,在Selenium IDE中,记录部分捕获用户与浏览器的互动,将这些动作编码为Selenium命令。第二,我们使用生成的Selenium脚本来自动执行浏览器会话(回放)。

这个早期版本的Selenium IDE是一个Firefox插件,嵌入了Selenium Core来记录、编辑和播放Selenium脚本。这些早期版本是XPI模块(即用于创建Mozilla扩展的技术)。从55版(2017年发布)开始,火狐浏览器将对附加组件的支持迁移到了W3C浏览器扩展规范。因此,Selenium IDE被停用了,有一段时间无法使用它。Selenium团队按照浏览器扩展的建议重写了Selenium IDE,以解决这个问题。得益于此,我们现在可以在多个浏览器中使用Selenium IDE,如Chrome、Edge和Firefox。

使用这个GUI,用户可以记录与浏览器的交互,编辑和执行生成的脚本。Selenium IDE将每个交互编码为不同的部分:命令(即在浏览器中执行的动作)、目标(即网络元素的定位器)和值(即处理的数据)。当然,我们也可以包括对命令的描述。Selenium IDE基于Electron。Electron是基于Chromium和Node.js的开源框架,允许桌面应用开发。

Selenium 生态系统

  • API

Selenium项目为Selenium WebDriver维护着各种语言绑定:
Python、Java、JavaScript、Ruby和C#。

  • 驱动

  • 定位器工具

Selenium WebDriver API提供了不同的方法来定位Web元素(见第三章):通过属性(id、name或class),通过链接文本(完整或部分),通过标签名称,通过CSS(层叠样式表)选择器,或通过XML路径语言(XPath)。特定的工具可以帮助识别和生成这些定位器。

  • 框架

python中有不少库对selenium进行了扩展,以下是一部分

https://github.com/mherrmann/selenium-python-helium
https://github.com/seleniumbase/SeleniumBase
https://github.com/cobrateam/splinter

  • 浏览器基础设施

我们可以用Selenium WebDriver来控制安装在运行WebDriver脚本的机器上的本地浏览器。同时,Selenium WebDriver可以驱动远程网络浏览器(即在其他主机上执行的浏览器)。在这种情况下,我们可以使用Selenium Grid来支持远程浏览器的基础设施。尽管如此,这种基础设施在创建和维护方面可能具有挑战性。

另外,我们也可以使用云提供商,将支持浏览器基础设施的责任外包出去。在Selenium生态系统中,云提供商是为自动测试提供管理服务的公司或产品。这些公司通常提供网络和移动测试的商业解决方案。云提供商的用户要求按需提供不同类型、版本和操作系统的浏览器。此外,这些供应商通常提供额外的服务,以缓解测试和监测活动,如访问会话记录或分析能力,仅举几例。现在与Selenium最相关的一些云供应商是Sauce Labs、BrowserStack、LambdaTest、CrossBrowserTesting、Moon Cloud、TestingBot、Perfecto或Testinium。

另一个我们可以用来支持Selenium的浏览器基础设施的解决方案是Docker。Docker是一种开源软件技术,允许用户将应用程序打包并作为轻量级、可移植的容器运行。Docker平台有两个主要组成部分:Docker引擎:用于创建和运行容器的工具,以及Docker Hub:用于分发Docker镜像的云服务。在Selenium领域,我们可以使用Docker来打包和执行容器化浏览器。表1-6列出了在Selenium生态系统中使用Docker的相关项目的摘要。

  • 社区

由于其协作的性质,软件开发需要许多参与者的组织和互动。在开放源码领域,我们可以通过社区的相关性来衡量一个项目的成功。Selenium得到了全世界许多不同参与者的大型社区的支持。

有关selenium 4(python)快速入门-1 简介的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  3. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  4. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  5. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  6. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  7. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  10. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

随机推荐