1) 、selenium 1 的基础讲解
Selenium RC 是如何运转的:
包含的两个组件:
1、Selenium server 它负责启动和关闭浏览器,解释执行从测试程序传来的Selenium命令,就像一个HTTP代理一样
(这就是为什么它能访问没有FQ的谷歌浏览器的原因)。 截取和验证浏览器与待测应用(??)之间的HTTP消息
这个代理也有一个好处: 就是每一个浏览器只能让用户在一个站点去搜索访问,不能在其他的站点去访问(这就是同源规则)
----没有同源规则。你可在任何站点读取你的银行账目信息
过程就是 :java脚本运行 ,命令就会传给远程控制服务器(Remote Control Server),经其解释之后 运行浏览器。
详解:
注意:--------------(因为这个服务器绑定了Selenium Core这个JavaSript程序,并将其嵌入到浏览器中 来解释执行java脚本命令)---------------------
当浏览器的tab1要运行一个脚本时,便会进行同源检查,只有和www.baidu.com同源的脚本才能被执行,所谓同源,就是指域名、协议、端口相同
2)、 selenium 2= WebDriver1 + selenium 1
selenium RC ==================>Selenium Driver
WebDriver 的JavaScript执行器,会封装所有JavaScript(函数)
selenium 的工具组件:
1、selenium 2(selenium webdriver)提供了极佳的测试工具特性,如关联的面向对象API
2、selenium 1(selenium remote control)支持更多的浏览器,支持更多的编程语言(Java、javaScript Ruby PHP)
3、selenium IDE(集成开发环境)是firefox的插件,有图形界面来录制和回放脚本。此插件只是用来做原型工具,不用希望
你使用这个工具来运行所有的测试脚本。除此之外,它还是一个 集成的开发环境
4、selenium—grid 可以并行的多个测试环境之下测试脚本,实现脚本的并发测试执行。缩短大量测试脚本集合的执行时间。
1.1)、详细说说 WenDriver:
我们的官网是这样说明它的作用的: WebDriver is a clean,fast framework for automated testing of webapps
WebDriver 针对于各个浏览器而开发,取代了嵌入到被测web应用中的 JavaScript。与浏览器的紧密集成支持创建更加高级的测试,
避免了JavaScript安全模型所带来的限制。除了来自与浏览器厂商的支持,webDriver 还可以用操作系统级的调用 来模拟用户输入 操作。
WebDriver 支持多种浏览器,还支持android和iPhone的应用测试。它还包含一个基于 HtmlUnit的无界面实现,称为 HtmlUnitDriver。
WebDriver API可以通过Python、Ruby、java.c#访问。支持开发成员使用他们自己的编程语言来创建测试。
就是说 WebDriver提供了丰富的API 以实现访问DOM、运行javaScript、模拟键盘输入操作等
1.2)、使用的话:
第一种,将WebDriver的JAR包 直接手动添加到 你项目中的CLASSPATH。
第二种,如果使用的是 maven构建你的项目,只需要在pom.xml文件中加入下面的依赖项即可。版本是:2.25.0
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.25.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-server</artifactId>
<version>2.25.0</version>
</dependency>
WebDriver的API遵从“Best Fit”原则,在保持良好的用户体验和灵活性之间找到一个最佳的平衡点
第三种,使用HtmlUnitDriver,HtmlUnitDriver只会在内存中执行这段代码,不会弹出一个真实的页面。例子如下:
packageorg.openqa.selenium.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class Example {
public static void main(String[] args) {
// Create a new instance of the html unit driver //就是创建一个HtmlunitDriver的一个实例
// Notice that the remainder of the code relies on the interface,
// not the implementation. //注意,剩下的代码 都是依赖于接口 而不是实现
WebDriver driver = new HtmlUnitDriver();
// And now use this to visit Google
driver.get("http://www.google.com");
// Find the text input element by its name
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys("Cheese!");
// Now submit the form. WebDriver will find theform for us from the element
element.submit();
// Check the title of the page
System.out.println("Page title is: " +driver.getTitle());
}
}
如果想用Firefox浏览器,只需改为WebDriver driver = new FirefoxDriver()即可。
前提是你的Firefox被安装在默认的位置
如果你的 Firefox没有安装在指定的位置,你可以设置“webdriver.firefox.bin“环境变量的值来指定它的位置。在java中可以使用如下daima :
System.setProperty("webdriver.firefox.bin","thelocation of firefox");
如果想使用chrome浏览器的话 就相对要麻烦一点。首先你需要下载一个ChromeDriver(下载地址:http://code.google.com/p/chromedriver/downloads/list)
这个程序又谷歌团队提供的,你可以看做它是 连接WebDriver和chrome浏览器的桥梁。然后启动chromeDriver,你会得到一个Url以及监听端口。
然后使用 webDriver =newRemoteWebDriver(url,DesiredCapabilities.chrome())创建一个chromeWebDriver进行操作。
当然,你可以在一个子线程中启动chromeDriver,并设置给 wenDriver。
File file = new File(your chromedriverfile path);
ChromeDriverService service = newChromeDriverService.Builder().usingChromeDriverExecutable(file).usingAnyFreePort().build();
service.start();
WebDriver webDriver = new ChromeDriver(service);
…..
…..
….
service.stop();
1.3).Webdriver如何工作 ,即它的工作原理是什么?
说是------------------WebDriver之所以能跟浏览器 进行交互,是因为浏览器已经实现了某些协议。而这些协议是使用JSON 通过HTTP进行传输。------------------------------
它的实现 使用了经典的 Client-Server模式。客户端发送一个请求request,服务器返回一个请求response
@1: Client 调用WebDriver API的机器
@2: Server 运行浏览器的 机器,Firefox浏览器直接实现了WebDriver的通信协议,而Chrome和IE是通过
ChromeDriver 和InternetExploreDriver 实现的
@3: session 服务器需要 维护浏览器的 Session,从客户端发过来的请求头中包含了Session信息,
服务器将会执行 相应的 浏览器页面。
@4: WebElement 这是WebDriver API中的对象,代表着 页面上的一个DOM元素
例子,如下代码是“命令” firefox 跳转到google主页:
WebDriver driver =new FirefoxDriver(); //实例化一个driver
driver.get("http://www.google.com");
过程如下: 1.浏览器(就是以上的测试代码)向远程服务器(remote server)发送“我要谷歌搜索的 搜索页面”的请求
2、如果 远程服务器是 已经实现了这个接口,那remote server 就会跳转到这个 Url地址,并返回一个response:
{"name":"get","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":""}
response部分包含:
name: 请求名 get,或者说远程服务器端 实现的方法名,表示跳转到 谷歌主页面
session : 当前session的id
satus :请求执行的 状态码
value :就像百度主页面的 “百度一下”title一样、
2. Selenium RC : (代理服务器)
2.1 Selenium RC是selenium 家族的核心工具,Selenium RC 支持多种不同的语言编写自动化测试脚本,
通过selenium RC 的服务器作为代理服务器去访问应用从而达到测试的目的。
2.2 selenium RC 使用分Client Libraries 和Selenium Server。
1). Client Libraries 库主要主要用于编写测试脚本,用来控制selenium Server 的库。
2).Selenium Server 负责控制浏览器行为,总的来说,Selenium Server 主要包括3 个部分:
Launcher、 Http Proxy、 Core。
2.1).Selenium Core 是被Selenium Server 嵌入到浏览器页面中的。
Selenium Core就是一堆JavaScript函数的集合,就是通过这些JavaScript函数,我们才可以实现用程序对浏览器进行操作。
2.2).Launcher 用于启动浏览器,把Selenium Core 加载到浏览器页面当中,
并把浏览器的代理设置为Selenium Server 的Http Proxy。
注意: ---------------2中WebDriver可以说是 1中Selenium RC的替代品---------------------------------------------------
2.3. Selenium2.0:包括了WebDriver。其实在Selenium2.0中主推的就是WebDriver这个模块。事实上WebDriver是Selenium RC的替代品,
因为Selenium需要保留向下兼容性的原因,Selenium RC才没有被彻底的抛弃,如果使用Selenium开发一个新的自动化测试项目,那么我们强烈推荐使用Selenium2.0的WebDriver进行编码。
Selenium2.0 = Selenium1.0 + WebDriver
注意: --------- Selenium RC的实质是在浏览器中运行一个JavaScript应用程序,使用每个浏览器内置的JavaScript解释器来解释和执行Selenium的命令集合。---------------
2.4 Selenium WebDriver与上述的Selenium RC是不同的。WebDriver针对不同的浏览器进行开发,取代了RC那样嵌入到被测试的WebApp程序中的JavaScript,
使用了与浏览器更加集成的方式进行测试,避免了RC使用JavaScript而可能遇到的安全模型限制导致的问题等。
------------看完书之后的总结摘抄