搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
凡人多烦事01
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
如何在vue项目中引入scss,并使用scss样式_style lang="scss" 需要npm
2
linux显示mem进行排序,linux下top命令显示详解
3
c#和python哪个效率更高,关于C#:Python:为什么*和**比/和sqrt()更快?
4
Ubuntu 20.04 笔记本无法调节亮度解决方法_ubuntu20.04亮度调节
5
ATT&CK框架
6
关于多人操作数据的处理策略_c# 两人同时操作一条数据
7
unity---用.asset文件作为配置文件_unity .asset文件
8
Vue项目文件名详解_vue中src目录下的components文件夹
9
企业数字化转型-数据驱动的核心逻辑_企业数据驱动下的战略形成逻辑主要有
10
python安装及环境变量配置_python安装步骤以及环境变量配置
当前位置:
article
> 正文
Selenium介绍及原理解析
作者:凡人多烦事01 | 2024-02-16 02:13:12
赞
踩
selumin解析
[url]http://hi.baidu.com/liyunluck/blog/item/bbb5ec61b6e6ee6a0d33faef.html[/url]
Selenium介绍及原理解析
2009-10-31 19:05
一、什么是Selenium?
Selenium是ThoughtWorks公司的一个强大的开源Web功能测试工具系列,采用Javascript来管理整个测试过程,包括读入测试套件、执行测试和记录测试结果。它采用Javascript单元测试工具JSUnit为核心,模拟真实用户操作,包括浏览页面、点击链接、输入文字、提交表单、触发鼠标事件等等,并且能够对页面结果进行种种验证。也就是说,只要在测试用例中把预期的用户行为与结果都描述出来,我们就得到了一个可以自动化运行的功能测试套件。(Selenium的核心是Javascript写的,他和浏览器进行通信,把测试用例的信息发送给浏览器执行,从而达到自动化测试的目的。)
Selenium系列主要包括4中产品,如下:
1. Selenium Core
Selenium Core是Selenium的核心,是有Javascript和Html文件组成的,它是Selenium IDE和Selenium RC的核心引擎。
2. Selenium IDE
Selenium IDE提供了一个浏览器的插件模式,在浏览器的该插件的模式下,可以录制和运行脚本。目前只支持Firefox一种浏览器插件。
3. Selenium Remote Control
Selenium RC支持用程序预研编写测试用例,比如Ruby、Java、C#等,这样做的好处是,可以Selenium和其他测试框架集成,比如.NET环境下,可以把Selenium和NUnit集成,用Selenium来编写测试用例,用NUnit来实现测试用例的自动化运行。
Selenium RC比其他包要大,主要包括以下几个部分:
A、Selenium Core
B、Selenium Server运行时;
C、Selenium提供的针对各种开发语言的类库。
Selenium Core和Selenium Server 运行时都是放在Selenium-server.jar中,Selenium RC提供的应用程序类库重要包括下面几种语言:
Java、Ruby、Php、Phthon、Perl、.NET。
4. Selenium Grid
Selenium Grid是Selenium的一个扩展,也是开源的,他把管理一小撮Selenium-RC的事情和为了运行一个测试而连接一个 SeleniumServer的事情分开了,实际上,Selenium Grid提供了一个hub,像个用于控制测试的远程控制器,但是是显示的将请求发送到一个或多个机器上的某个有效的Selenium-RC实例上。
注意:Grid只是提供了一个脚本运行的环境,至于脚本以什么样的方式去跑(并行的方式或者是多环境的方式),要看脚本本身和和脚本的Runner的配置决定的。
二、选择合适的Selenium 工具
既然Selenium工具有这么多,那么到底如何选择呢??
1. 需要远程安装
即是否需要在被测网站的服务器端安装,这里只有Selenium Core需要,因为出于浏览器的同源策略的原因(同源策略后面会讲到),这个也是Selenium Core的一个限制,如果你要测试www.google.com网站,那你还需要在google网站的服务器上安装一个Selenium Core;
而Selenium IDE和Selenium Core HTA不会同源策略所限制,因为他们对浏览器扩展了。
Selenium RC提供了一个代理服务器,保证了Selenium JS文件时来自同一个远程服务器的,从而符合同源策略。
2. 将测试结果写到磁盘
只有Selenium Core不能将任何测试结果写到磁盘上(因为它是用javascript写的,它不允许向磁盘写数据),其解决方案是当然你可以将测试结果发送到另外一台服务器保存。这也是Selenium Core的一大限制。
OK,现在我们来研究下到底该使用哪款工具开展测试!
1.Selenium IDE支持并且只支持Firefox浏览器,支持的浏览器太少,而依附于Firefox也不便于日后开展自动化测试,但是,它的录制快捷好用!并且有代码转换功能,可以把Selenium语言测试案例转为C#,Java等语言的测试案例,我建议使用Selenium IDE + FireBug进行测试案例的编写,然后转为其他语言的测试案例后,再调用Selenium RC运行测试案例。
2. Selenium Core,它的优点是编写测试案例简单,并且支持绝大多数的浏览器,但缺点也同样明显,Selenium Core需要远程安装,Selenese语言也限制了复杂案例的可能性,并且没有良好的外部扩展,这是些都会是致命的问题。因为一个款测试工具不可能 100%满足你测试需求的,当它不能满足你测试需求时候,它必须有一个扩展机制可以让你可以使用其他的方式满足你需求,否则这款测试软件即使功能强大,也请三思慎用,否则当投入大量资源后才发现某些问题不能解决,那时候已经晚了,这是我的切身体会。
3.Selenium RC是我推荐使用的工具,它支持很多浏览器,可以使用C#,Java等语言编写测试案例,易于维护,同时提供了很好的扩展性,所以后续的文档我会以Selenium RC作为默认的测试工具。
三、Selenium RC组成
下表一个简单的架构图:
Selenium RC由两部分组成:
(1)Selenium Server
Selenium Server主要控制浏览器行为,总的来说,Selenium Server由三部分组成:Launcher、Http Proxy、Selenium Core,其中Selenium Core是在Selenium Server启动浏览器时,嵌入到浏览器中的。Selenium Core是一堆Javascript函数集合,当Selenium RC通过网络与 Selenium Server通讯时(通过简单的Http Get或Post请求),Selenium Server解析客户端请求为Selenese Command,然后就会调用相应的JS函数来控制浏览器操作。
(2)Selenium Libraries
写测试案例时主要控制Selenium Server库,客户端提供了编程接口,允许你可以通过编程运行Selenium命令,Client Libraries为每一种编程语言提供了与Selenium RC 服务器通讯的编程接口。一个Selenium客户端类库实际上时提供一套函数集合,你可以通过运行你的测试程序来运行Selenium Command,类库中的每一个接口都是和Selenium Command一一对应的。
客户端类库通过发送一个Selenium Command与Selenium Server通讯,从而使被测应用程序执行相应的操作。客户端类库接收到Selenium Command命令返回的结果,并把结果返回给应用程序并赋值给相应的变量。
注:可以通过Selenium IDE生成Selenium-RC代码。
四、Selenium-RC架构
1. 什么是同源策略?
同源策略,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。
为什么需要同源策略,这里举个例子:
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生,看下图:
比如说,浏览器的两个tab页中分别打开了http://www.baidu.com/index.html和http: //www.google.com/index.html,其中,JavaScript1和JavaScript3是属于百度的脚本,而 JavaScript2是属于谷歌的脚本,当浏览器的tab1要运行一个脚本时,便会进行同源检查,只有和www.baidu.com同源的脚本才能被执行,所谓同源,就是指域名、协议、端口相同。所以,tab1只能执行JavaScript1和JavaScript3脚本,而JavaScript2不能执行,从而防止其他网页对本网页的非法篡改。
2. Selenium RC运行模式:
Selenium RC有两种运行模式,分别是Heightened Privileges Browsers和Proxy Injection。
A、Heightened Privileges Browsers(高特权模式)
这种工作模式与代理模式的工作流程是很相似的,唯一的不同时的是,在Heightened Privileges Browsers模式下,Browser对Web的请求没有经过Http Proxy,所以返回的Web页面就有可能和Selenium Core不同源了(一般的情况下,Open都应该只获取“源”下的某个子页面,用Open获取其他“源”的页面在测试中应该是极少数的,因为在这种情况 下,我们还应该再new一个新的ISelenium selenium进行处理,虽然用Open获取其他“源”的页面出现的机会极少,但如果真的需要这样的话,也只能启动 -proxyInjectionMode模式了,虽然这样的效率会低一些)。
B、Proxy Injection(代理模式)
(1).测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。
为什么要通过发送Http请求控制Selenium Server而不采用其他方式呢?从上文可以看出,Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server是很正常的。
(2).Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。
(3).测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。
(4).Selenium Core接收到指令后,执行操作。
(5).浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的Web页面。
由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。
(6).Selenium Server接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。
(7).Selenium Server的Http Proxy把接收的Web页面返回给浏览器。
因为浏览器存在同源策略,所以Selenium RC中的Selenium Server需要以这种代理模式运行。
五、Selenium Server解析
1. 首先启动Selenium服务:(以交互模式启动Selenium服务)
先说一下Firefox启动问题,在本地目录 C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox中包含了Firefox浏览器的一些配置信息,profiles.ini文件内容如下图所示:
大家可以看到,现在我机器上一共配置了两个Profile,关闭所有Firefox浏览器,在命令行中输入firefox.exe –profilemanager,可以选择浏览器所使用的Profile,之后选择“打开”,浏览器就会以指定额度配置文件打开,同时还可以新建和删除 Profile文件。
而Selenium Server服务启动时,如果不指定-firefoxProfile参数,那么Selenium Server就会打开一个全新的Firefox浏览器(不包含任何扩展与附件组件),而指定此参数后,表面上我们看到Selenium Server会使用指定的配置文件打开浏览器,而实际上Selenium Server仍然会在目录C:\Documents and Settings\Administrator\Local Settings\Temp中生成一个新的配置文件,profile所在文件夹的名字是自动生成的,命名规则是” customProfileDir”+sessionId。
2. 我们在命令行中输入:
cmd=getNewBrowserSession&1=*firefox &2=http://www.google.com
1.Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com
我们所编写的测试案例,其实是通过发送Http请求实现对Selenium Server的控制,而测试案例所发送的请求就正是:---> Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession& amp;1=*iexplore&2=http://www.google.com。我们可以再打开一个firefox浏览器,在地址栏输入:http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession& amp;1=*iexplore&2=http://www.google.com,回车!看,Selenium Server又为此产生了一个Session了!呵呵:>
2. 这里,Selenium Server为上面的请求随机生成了一个Session ID:3ba90f6a4d1b4b8994b343cea0bac639,同时会在临时目录C:\Documents and Settings\Administrator\Local Settings\Temp 中产生新的配置文件夹customProfileDir3ba90f6a4d1b4b8994b343cea0bac639 。
3. 如果一切正常,Selenium Server最后会出现Get Result Ok的字样,并出现如下两个框框:
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/凡人多烦事01/article/detail/89736
推荐阅读
article
Python
使用
Selenium
库如何绕过
Cloudflare
验证,网页请
确认
你
是
不
是
机器人_clo...
前段时间使用
selenium
库写chatGPT的脚本,遇到过一个问题,那就
是
cloudflare
的机器验证,让你点击
确认
...
赞
踩
article
100天精通
Python
(实用脚本篇)——第115天:基于
selenium
实现反
反
爬
策略之
隐藏
浏览器
...
100天精通
Python
(实用脚本篇)——第115天:基于
selenium
实现反
反
爬
策略之
隐藏
浏览器
指纹
特征
_pytho...
赞
踩
article
python
+
Selenium
实现
自动化
查询问财
数据
及下载
Excel
数据
并存入到
mysql
_问...
因为不想每天手工操作,所以想通过该方法实现全自动下载导出存入
mysql
。_问财
自动化
交易问财
自动化
交易 ...
赞
踩
article
手把手
教你,
Selenium
遇见
伪
元素
该
如何
处理
?...
Selenium
遇见
伪
元素
该
如何
处理
?
手把手
教你,
Selenium
遇见
伪
元素
该
如何
处理
? ...
赞
踩
article
Selenium
连接
到现有
的
Firefox
示例_
selenium
连接
已存在
的
火狐
浏览器
...
3 右键安装好
的
Firefox
,目标 加入 "-marionette -start-debugger-server ...
赞
踩
article
python
爬
取
boss
直聘
数据(
selenium
+
xpath
)_
爬
boss
直聘
...
不知道是
boss
反
爬
做的太好,还是我个人太菜(哭~)我个人倾向于第二种这个
爬
虫还有很多很多的不足之处,比如在页面加载的时...
赞
踩
article
【
Selenium
】提高
测试
&爬虫效率:
Selenium
与
多线程
的
完美结合_
selenium
多线程
...
本文章介绍了
Selenium
+ threading 和
Selenium
+ ThreadPoolExecutor ...
赞
踩
article
selenium
.
common
.
exceptions
.NoSuchElementException:...
以上代码报错
selenium
.
common
.
exceptions
.NoSuchElementException: Mes...
赞
踩
article
selenium
+
Chrome
滑动
验证码
破解三之
京东
实现某东
登录
_c# 使用
selenium
...
之前爬取模拟
登录
B站和模拟春秋官网的注册
验证码
,问题都不大.所以今天想挑战下某东,对于稍微有些爬虫基础的来说脚本到
登录
界...
赞
踩
article
selenium
报错_
message
: unable to
obtain
driver
for c...
因为
selenium
升级了我的是4.16。开始学自动化测试,,环境配了一天TAT。所以通过service来传地址。goo...
赞
踩
article
软件测试
(五)
自动化
selenium
...
selenium
是用来做web
自动化
测试框架。
软件测试
(五)
自动化
selenium
...
赞
踩
article
【
java
爬虫
】
selenium
+
browsermob
入门实战_
java
selenium
prox...
到这里,本文的主要内容就介绍完了。使用
selenium
+
browsermob
可以非常方便地进行网络数据收集,不过我感觉有...
赞
踩
article
【
Selenium
】
WebDriverPool
让
动态
爬虫
变得
更简单高效
稳定
...
【
Selenium
】
WebDriverPool
让
动态
爬虫
变得
更简单高效
稳定
。_webdriverpoolwebdrive...
赞
踩
article
「
Python
」
Selenium
...
【代码】「
Python
」
Selenium
。「
Python
」
Selenium
...
赞
踩
article
Java
爬虫
入门详解(
Selenium
)_
java
selenium
...
目录一、
Selenium
简介二、
Selenium
组成三、
Selenium
特点四、案例演示1.下载驱动包2.创建项目并导入...
赞
踩
article
Python
学习
之路-爬虫提高
:
selenium
...
PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 J...
赞
踩
article
Selenium
_c#
selenium
等待
页面pdf加载
完成
...
第一章
Selenium
概述#1.1.
Selenium
发展史#
Selenium
是一系列基于Web的自动化工具,提...
赞
踩
article
Java
-
Selenium
自动化
教程(学了不亏)
_
java
selenium
...
然而,学习所有的工具你将有更多选择来解决不同类型的测试
自动化
问题。有些网站的页面是使用动态加载js的,这也就会导致htm...
赞
踩
article
学习用
java
基于
webMagic
+
selenium
+
phantomjs
实现爬虫
Demo
爬取淘宝搜索...
学习用
java
基于
webMagic
+
selenium
+
phantomjs
实现爬虫
Demo
爬取淘宝搜索页面 由于业务需要...
赞
踩
article
Java
+
Selenium
常用方法梳理_
java
selenium
...
Selenium
实现悬停,句柄获取_
java
selenium
java
selenium
...
赞
踩
相关标签
selenium
测试工具
python
隐藏浏览器指纹特征
stealth.min.js
反反爬策略
爬虫
网络爬虫
自动化
excel
mysql
自动化测试
程序员
功能测试
软件测试
职场经验
firefox
开发语言