来源:
因为一位ThoughtWorks的工程师,因为要重复操纵某些元素, 为了不想让自己的时间浪费在无聊的重复性工作中,幸运的是,所有被测试的浏览器都支持Javascript。Jason和他所在的团队采用Javascript编写一种测试工具来验证浏览器页面的行为;这个JavaScript类库就是Selenium core,同时也是seleniumRC、Selenium IDE的核心组件。Selenium由此诞生。
Selenium 意思是硒,是一种化学元素,可以简写为Se。这个名字当年是针对另一个霸主地位的自动化工具QTP Mercury 来取的,因为mercury有汞的意思,而硒可以克制汞。
Selenium 1.X
Selenium 1.0 = Selenium IDE + Selenium Grid + Selenium RC
Selenium IDE是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。
Selenium Grid
用于实现分布式测试。利用Grid,可以很方便地同时在多台机器上和异构环境中并行运行多个测试事例。
Selenium RC
Selenium 的核心部分,可以实现利用Selenium的代理服务器来实现访问浏览器实现自动化测试。
Selenium RC分为:Client和Server。
Client实现自动化脚本,Selenium Server负责控制浏览器行为。
Selenium Server分为3部分。有Launcher启动浏览器,将Core嵌入到浏览器,并把浏览器代理设置为Selenium Server的Http Proxy。
原理
Selenium Server将编写的Java代码转换成一段浏览器能看懂的JS代码
浏览器根据JS实现相关操作
使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核启动浏览器之后注入这段Javascript。开发过Web应用的人都知道,Javascript可以获取并调用页面的任何元素,自如的进行操作。由此才实现了Selenium的目的
优点:
- 可以用一套代码来驱动所有的浏览器;
- 通过设置代理的方式突破了JS的安全机制(不允许访问跨域请求),
缺点:
- 代码执行的效率很大程度上决定于Selenium Server转换的JS的代码的质量;
- 浏览器也对JS有很多的限制;
自动化Web操作。这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。
webdriver的产生
2006年, Webdriver是由Google工程师开发的,WebDriver是通过原生浏览器支持或者浏览器拓展来控制浏览器, 取代了嵌入web的JavaScript(此处提到了JavaScript的沙箱机制,突破JavaScript的安全模型),除了来自浏览器厂商的支持外(也就是直接控制浏览器进行直接沟通), WebDriver还利用操作系统级别的调用, (什么操作系统级别的调用?) , 模拟用户输入。
WebDriver与之前Selenium的JS注入实现不同,直接利用了浏览器本机支持来操作浏览器。所以对于不同平台,不同的浏览器,必须依赖一个特定的浏览器的本机组件来实现把WebDriver API的调用转化为浏览器的本地调用。
selenium 2.X
Selenium 2.X = Selenium 1.X + WebDriver
2009年, Selenium和WebDriver合并,也就是现在用的Selenium2. Webdriver也就有了一个清晰的API,也就是Webdriver API。此时 selenium 2.0 = Selenium 1.0 + Webdriver, 还是兼容selenium 1.0的, 这个时候不同浏览器的驱动方式不同, chrome用的是chromedriver, 其他有的是用selenium RC, 有的是用第三方开发的driver;所以这个时候, 针对不同的浏览器, 导入的包是不一样的, 可能是selenium包,也有可能的webdriver包
由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学。然而带来的一些副作用就是,不同的浏览器厂商,对Web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等。
需要强调的是,在Selenium 2.0中主推的是WebDriver,可以将其看作Selenium RC的替代品。因为Selenium为了保持向下的兼容性,所以在Selenium 2.0中并没有彻底地抛弃Selenium RC。
所以,我们在学习Selenium2.0的时候,核心是学习WebDriver。它的工作原理是这样的:
selenium 3.X
selenium 3.0 = selenium 2.0 - selenium RC
更新不大
去掉了RC
支持Java8版本以上
.............
参考:
https://www.cnblogs.com/hchengmx/p/10745116.html
https://blog.csdn.net/bianhao1108/article/details/106409682
https://www.cnblogs.com/lipo/p/10277913.html
https://www.cnblogs.com/fnng/p/7426928.html