selenium是一块web自动化测试工具,主要用来进行ui自动化测试。官网上对于自己的描述就是“它能够是浏览器自动化。”当然他的功能不仅仅局限于此。我们可以避免一些重复劳动,比如说重复的点击等等的操作。甚至是抢月饼。
selenium是能够跨平台的自动控制多中浏览器的工具集合(注意是多个工具)。他的特点有:
- 能够运行与多种浏览器以及系统
- 可以在多中语言环境以及测试框架下使用。
历史
selenium历经了3代的发展,从1到2到3,其中经过了很多。
最初selenium是由ThoughtWorks的一个工程师,做了一个驱动页面交互的js库,以避免反复的手工测试。后来这个库就成为了selenium的核心,他是工具selenium rc以及selenium ide的核心部分,也就是selenium1.
后来由于js自身的限制,导致出现几个问题:
- js有很多安全限制,功能无法全部实现
- 网站越来越强大,他们使用了浏览器的各种新特性
于是,一个google的工程师,开了一个项目叫做webdriver。目的是打造一个能够通过浏览器、操作系统的本地方法直接和浏览器进行通话的测试工具,其实本质上就是解决js的沙箱问题。
后来selenium与webdirve在2008年合并,就成了selenium2。这个版本也是比较完善的一个版本,但是有一个问题,selenium2的浏览器驱动问题。其中firefox驱动内置的,但是其他的如chrome等等都是由社区开发的,并非官方版本 ,所以会出现在某些浏览器上能够点击,换了一个就不行了。2的出现,代表了一个趋势,就是webDriver。此刻的2还是兼容1的。
顺便说一句,selenium rc与webdriver驱动浏览器的方式是不一样的。对于所有类型的浏览器Selenium-RC都是使用的同一种方法:当浏览器启动时,向其中注入javascript,从而使用这些js来驱动浏览器中的AUT(ApplicationUnderTest)。WebDriver并没有使用这种技术,它是通过调用浏览器原生的自动化API直接驱动浏览器。也就是一个是通过js控制的,一个是通过原生的浏览器的接口。
2016年,selenium3出现,他摒弃了selenium中的selenium rc,并且由官方重写了所有的浏览器驱动,也即是说和2完全不兼容了。最后就只剩下webdriver。
webdriver,本质的定义可以参考这里:
WebDriver is a browser automation API that enables people to write automated tests of their web content using Python, Java, PHP, JavaScript, or any other language with a library that understands the de facto Selenium Wire Protocol or upcoming W3C WebDriver protocol.
他是一个给人们写自动化case的浏览器api。这其中是有一个标准化的协议的。这也是3为什么要官方全部重写驱动的原因了。
selenium工具集合
selenium ide
一个firefox插件,用来录制你的动作并且可以用它生成一些自动化测试脚本。对于简单的动作等基本毫无压力,两个字好用,及时对于复杂的操作、断言等,也可以先录制,再导出在修改。
selenium rc
文档
selenium remote controller,如上面所说,是一个比较核心的工具,官网上的解释为:
Selenium Remote Control (RC) is a test tool that allows you to write automated web application UI tests in any programming language against any HTTP website using any mainstream JavaScript-enabled browser.
也就是说,他能够允许你通过不同的预演来编写自动化测试脚本。
它包含两个部分:
(1)一个服务器,也就是selenium server,它能够自动的呼起以及杀死浏览器,并且,为http请求做为一个代理服务器。
(2)你要用的对应的编程语言的库,也就是client libraries
随着selenium2的发布,selenium server被搞到selenium grid中去了,参考官网
With the release of Selenium 2.0, the Selenium Server now has built-in Grid functionality.
selenium grid
文档wiki
selenium grid有三个功能:
(1)允许你将你的测试任务放到多个机器上去执行,也就是并行执行。比如你有一个大型的测试套件,那么运行很慢的情况下,就有可能需要他。
(2)帮助你管理多个不同的环境,主要目的是解决同时运行大量基于不同的环境、浏览器的情况。
(3)可以减少你对grid的维护时间。举例而言,通过继承一些自定义的钩子来影响你的虚拟机。(没太明白)
selenium webdriver
这个上面也提到了,实际上就是selenium rc的替代品。3中就只剩下webDriver了,没有rc了。
小结
- selenium是一个ui自动化测试工具,主要用来实现端到端的自动化测试
- 现在的是selenium3,不向下兼容,其核心为webdriver,支持跨平台、系统、浏览器,而且要自己下载驱动
- 它是一组工具的集合
这里需要注意几点
- 这里的测试范围,是端到端的,也就是用来替代手工测试的;
- 它不能用来替代兼容性测试,因为他目前的驱动只有chrome、ff、ie、edge、opera、safria等主流,以及一些headless浏览器如phantomjs
- selenium不能够很好的支持移动端。如果有移动端需求,请使用appium