合肥凯发网址直营
科技有限公司

18955110833

自动化测试工具——Selenium

栏目: 技术学堂 查看()


1    selenium简介

Selenium是一个用于We应用程序测试的工具。是一个开源的Web的自动化测试工具。最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,支持的浏览器包括IE(7, 8, 9, 10, 11),它支持所有主流的浏览器,可以按指定的命令自动操作,Opera等,Google Chrome,不同是Selenium可以直接运行在浏览器上,Mozilla Firefox,Safari。

Selenium测试直接运行在浏览器中。就像真正的用户在操作一样。可以根据我们的指令。或者判断网站上某些动作是否发生,让浏览器自动加载页面,甚至页面截屏,获取需要的数据。

  Slenium 自己不带浏览器,它需要与上面提到的第三方浏览器结合在一起才能使用,不支持浏览器的功能。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

2    Selenium的几个特点

1、开源软件:源代码开放可以根据需要来增加工具的某些功能

2、跨平台,多平台支持:linux 、windows 、mac

3、支持多浏览器:Firefox、Internet Explorer、Safari、Opera、Chrome、Edge

4、核心功能:就是可以在多个浏览器上进行自动化测试

5、可以搭配多种编程语言使用:Java、Python、C#、JavaScript、Ruby等

6、成熟稳定:目前已经被google , 百度, 腾讯等公司广泛使用

7、支持分布式测试用例的执行、相当于分发机的功能,可以把测试用例分布到不同的测试机器的执行。

8、功能强大:能够实现类似商业工具的大部分功能,因为开源性,可实现定制化功能

3    Selenium的主要功能

selenium的主要功能包括:

测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。

测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

4    selenium原理

我们使用Selenium实现自动化测试,主要需要3个东西

1.  测试脚本,可以是python,java编写的脚本程序(也可以叫做client端)

2.  浏览器驱动, 这个驱动是根据不同的浏览器开发的,不同的浏览器使用不同的webdriver驱动程序且需要对应相应的浏览器版本,比如:geckodriver.exe(chrome)

3.  浏览器,目前selenium支持市)面上大多数浏览器,如:火狐,谷歌,IE等

selenium脚本

    from selenium import webdriver

    driver = webdriver.Chrome()

执行上述代码、我们会发现程序打开了Chrome浏览器(前提:你已经正确配置了Chrom驱动和对应的版本) 那么 selenium 是如何实现这个过程呢?ok,那我们就来分析一下selenium的工作原理。

源码分析

如图,按住Ctrl 建,点击Chrome,我们可以看到webdriver的代码\site-packages\selenium\webdriver\chrome\webdriver.py

image.png

通过源码的第 68-73行、然后调用了 sart() 方法,我们可以看到,他启动了一个 service对象,那么我们继续看一下第 73 行 start()方法具体做了什么。

image.png

我们可以看到、这个命令主要是启动了一个ChromeDriver.exe浏览器驱动,他执行了一个cmd命令,程序会自动帮我们启动浏览器驱动,这个效果就跟我们自己手动启动是一样的效果,第69-76行,我们每次在执行脚本前。

第一步工作我们已经知道了执行脚本webdriver.Chrome()会自动执行 chromedirver.exe驱动程序,然后开启一个进程。

如何打开浏览器

我们继续看源码 \site-packages\selenium\webdriver\chrome\webdriver.py 的51-57行代码,调用了父类RemoteWebDriver 的初始化方法,我们看这个方法做了什么事?

这里有一行最重要的代码,62行self.start_session(capabilities, browser_profile) 这个方法,继续看一下这个方法的源码做了什么工作

image.png

分析这部分源码可以发现22行是向地址localhost:9515/session发送了一个post请求,参数是json格式的,然后返回特定的响应信息给程序(这里主要就是新建了一个sessionid),最终打开了浏览器,打开浏览器的操作完成了

如何执行对应操作 查看\site-packages\selenium\webdriver\chrome\webdriver.py源码(第一个源码中的76-81行)

image.png

点击ChromeRemoteConnection查看一下源码

第24行访问的是localhost:9515/session地址,第25-28行,定义了一些和我们使用的浏览器(chrome)特有的接口地址,我们再看一下父类RemoteConnection里面源码

image.png

这个类里面定义了所有的selenium操作需要的接口地址(这些接口地址全部封装在浏览器驱动程序中),那么所有的浏览器操作就是通过访问这些接口来实现的 其中 Command.GET: (‘POST’, ‘/session/$sessionId/url’) 这个地址就是实现访问一个网址的url ,我们先记录一下后面有用。所有的操作对应接口地址我们知道了,那么又怎样执行这些接口来达到在浏览器上实现各种操作呢?继续看紧接着接口地址定义下面的源码

image.png

可以看到主要是通过execute方法调用_request方法通过urilib3标准库向服务器发送对应操作请求地址,进而实现了浏览器各种操作。

有人会问打开浏览器和操作浏览器实现各种动作是怎么关联的呢? 其实,打开浏览器也是发送请求,请求会返回一个sessionid,后面操作的各种接口地址,你也会发现接口地址中存在一个变量$sessionid,那么不难猜测打开浏览器和操作浏览器就是用过sessionid关联到一起,达到在同一个浏览器中做操作 第二步在浏览其上实现各种操作原理也完成了

5    selenium的工作过程

可能大家看原理的时候,会有些不理解,那么我们可以看看selenium它是如何工作的?

1.  selenium client(python等语言编写的自动化测试脚本)初始化一个service服务,通过Webdriver启动浏览器驱动程序chromedriver.exe

2.  通过RemoteWebDriver向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id

3.  打开浏览器,绑定特定的端口,把启动后的浏览器作为webdriver的remote server

4.  打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过RemoteConnection链接到remote server,然后使用execute方法调用_request方法通过urlib3向remote server发送请求

5.  浏览器通过请求的内容执行对应动作

6.  浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本

 




扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

郑重申明:凯发网址直营 以外的任何单位或个人,不得使用该案例作为工作成功展示!