本篇主要是想更进一步介绍Selenium Server的工作原理,这次我们从Selenium Server的交互模式开始。

在《第一个Selenium RC测试案例》中,我们以命令“java -jar selenium-server.jar”启动了Selenium Server,其实在启动Selenium Server时,我们还可以加上各种参数(具体的参数请参考《Selenium RC服务器命令行参数列表》), 而开启Selenium Server交互模式的命令为“java -jar selenium-server.jar -interactive”。交互模式,是Selenium Server提供的一种快速的测试方法,你可以对Selenium Server输入命令从而直接启动测试。

1.启动Selenium Server交互模式

2.在命令行中输入:cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com。控制Selenium Server启动浏览器,以及创建Session。

(1).---> Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com

看过《深入了解Selenium RC工作原理(1)》的应该了解:我们所编写的测试案例,其实是通过发送Http请求实现对Selenium Server的控制,而测试案例所发送的请求就正是:---> Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com。我们可以再打开一个IE浏览器,在地址栏输入:http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com,回车!看,Selenium Server又为此产生了一个Session了!呵呵:>

(2).这里,Selenium Server为上面的请求随机生成了一个Session ID:9505f5f8c52041c28f4cdc1f8e59f769(由于写这篇文章的时候中途重启了Selenium Server,所以这里和上图的Session ID不同,并且下文会继续使用Session ID:9505f5f8c52041c28f4cdc1f8e59f769)。

(3).如果一切正常,Selenium Server最后会出现Get Result Ok的字样,并出现如下两个框框:

3.控制浏览器访问www.google.com/webhp,输入:cmd=open&1=http://www.google.com/webhp&sessionId=9505f5f8c52041c28f4cdc1f8e59f769

 

噢,浏览器成功访问http://www.google.com/webhp了:>。

总结一下:

(1).在Selenium Server中输入命令的格式为:cmd=Command&1=Target&2=Value&SessionID=…,这和Selenium IDE的案例语句很像。

(2).在输入命令后,Selenium Server会发条Http请求给自己,请求的URL格式也是固定的:http://localhost:4444/selenium-server/driver?cmd=Command&1=Target&2=Value&SessionID=…,我们完全可以用浏览器发送请求控制Selenium Server进行测试。

(3).另外,sessionId是很重要的一个参数,当一个Selenium Server同时运行多个测试案例时,Selenium Server就是通过sessionId判断到底该操作哪个浏览器窗口。而在下面的C#代码中:

ISelenium selenium = new DefaultSelenium("127.0.0.1", 4444, "*iexplore", "http://www.google.com");
selenium.Start();
selenium.Open("/webhp");

selenium就相当于上文中的sessionId。

(4).在Selenium Server启动一个Session时,必须先指定一个 “源”(原因见《深入了解Selenium RC工作原理(2)》),在上面的代码中http://www.google.com就是“源”了,然而这是可能出现问题,请看下面代码:

ISelenium selenium = new DefaultSelenium("127.0.0.1", 4444, "*iexplore", "http://www.google.com");
selenium.Start();
selenium.Open(http://www.baidu.com);

我们在启动Session时,定义了源为http://www.google.com,但在后来的操作中,我们打开的却是http://www.baidu.com,由于二者非同源,所以接下来的操作就可能会出现各种问题,故此Selenium Server会给出以下警告:

Selenium Server提示说;如果测试案例是运行在*iehta或者*chrome上,或者改变Selenium Server的运行模式为proxy injection mode即可避免问题出现。

恩,在这里,我不得不承认之前在《深入了解Selenium RC工作原理(1)》中,为了简化问题,我故意少写了一些东西!

其实,Selenium Server其实有2种运行模式:

(1).Heightened Privileges Browsers

(2).Proxy Injection

现在Selenium Server启动的默认模式为:Heightened Privileges Browsers。如果要启动Proxy Injection模式,可以加参数“-proxyInjectionMode”。而之前在《深入了解Selenium RC工作原理(1)》中介绍Selenium RC与Testcase关系,其实就是在描述Proxy Injection的工作模式,因为我个人认为Proxy Injection设计模式更为合理,所以只对Proxy Injection模式作介绍。在这里我补充说明一下,为什么Heightened Privileges Browsers模式不能避免上面的问题。先看看Selenium Server在Heightened Privileges Browsers模式下的工作流程图:

和Proxy Injection模式不一样,在Heightened Privileges Browsers模式下,Browser对Web的请求没有经过Http Proxy,所以返回的Web页面就有可能和Selenium Core不同源了(一般的情况下,Open都应该只获取“源”下的某个子页面,用Open获取其他“源”的页面在测试中应该是极少数的,因为在这种情况下,我们还应该再new一个新的ISelenium selenium进行处理,虽然用Open获取其他“源”的页面出现的机会极少,但如果真的需要这样的话,也只能启动-proxyInjectionMode模式了,虽然这样的效率会低一些)。

Selenium私房菜系列7 -- 玩转Selenium Server的更多相关文章

  1. Selenium私房菜系列6 -- 深入了解Selenium RC工作原理(1)

    前一篇已经比较详细讲述了如何使用Selenium RC进行Web测试,但到底Selenium RC是什么?或者它由哪几部分组成呢?? 一.Selenium RC的组成: 关于这个问题,我拿了官网上的一 ...

  2. Selenium私房菜系列5 -- 第一个Selenium RC测试案例

    <Selenium简介>中讲过,Selenium RC支持多种语言编写测试案例,如:C#,Python.在工作中,我倾向于是用Python这类动态语言编写测试案例,因为这样的测试案例无需编 ...

  3. Selenium私房菜系列--总章

    前言 在这段期间,我一直在找关于服务器的端测试方案,自动化工具等等,无意间我发现了Selenium这个工具.在试用一段时间后,觉得Selenium确实是一个很不错的Web测试工具.在和强大的QTP比较 ...

  4. Selenium私房菜系列10 -- 我遇到的问题及解决问题的方法

    Selenium私房菜系列10 -- 我遇到的问题及解决问题的方法

  5. Selenium私房菜系列9 -- 我遇到的问题及解决问题的方法

    Selenium私房菜系列10 -- 我遇到的问题及解决问题的方法

  6. Selenium私房菜系列4 -- Selenium IDE的使用

    (转自http://www.cnblogs.com/hyddd/archive/2009/05/24/1487967.html) 前面说过,Selenium IDE是Firefox的一个插件,是可以进 ...

  7. Selenium私房菜系列1 -- Selenium简介

    一.Selenium是什么? Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,本系列现在主要包括以下4款: 1.Selenium Core:支持DHTML的测试案 ...

  8. Selenium私房菜系列9 -- Selenium RC服务器命令行参数列表【ZZ】

    本文转载自:http://wiki.javascud.org/display/SEL/Selenium+Remote+Control+-+options 使用示例: java -jar seleniu ...

  9. Selenium私房菜系列3 -- Selenium API参考手册【ZZ】

    大家在编写测试案例想查阅Selenium API说明时,可以查阅本文,否则请跳过! (注:这里API版本比较老,新版本的Selenium的API在这里不一定能找到.) Selenium API说明文档 ...

随机推荐

  1. Keil BUG 导致读字库时,无法显示某些汉字解决办法

    原因在于:KEIL C51 的一个汉字BUG,keil c51在编译的时候会将0xfd的字符(有些汉字含该字符的内码)过滤, 最佳解决方案:打补丁,用  晓奇工作室出的补丁 cckeilvxx.exe ...

  2. js正则匹配字符串

    这里我第一时间想到的就是用 js 的search 和 match ,其中最常见的是match: 1. str.search(regexp):search()方法不支持全局搜索,因为会忽略正则表达式参数 ...

  3. Foreign Postcards

    题意: 给定 n 张排成一堆的的卡片,每一次从堆顶上等概率随机取出 [1~当前卡片数] 个卡片,如果堆顶的卡片是反面朝上, 则将所有取出的卡片翻转,求问期望取出多少个反面朝上的卡片. 解法: 考虑dp ...

  4. ElasticSearch基础之批量操作(mget+mbulk)

      在前面的演示中,我们都是基于一次http查询,每次查询都要建立http的三次握手请求,这样比较耗费性能!因此ES给我们提供了基本的批量查询功能,例如如下的查询,注意里面的index是可以任意指明的 ...

  5. 【网络爬虫】【python】网络爬虫(一):python爬虫概述

    python爬虫的实现方式: 1.简单点的urllib2 + regex,足够了,可以实现最基本的网页下载功能.实现思路就是前面java版爬虫差不多,把网页拉回来,再正则regex解析信息--总结起来 ...

  6. PHP实用小程序(七)

    <? //用COOKIE保存投票人的投票记录 if($vote && !$already_voted) SetCookie("already_voted",& ...

  7. 详细讲解:零知识证明 之 zk-SNARK 开篇

    作者:林冠宏 / 指尖下的幽灵 博客:http://www.cnblogs.com/linguanh/ 掘金:https://juejin.im/user/587f0dfe128fe100570ce2 ...

  8. hexo新建md文档推送到blog出错

    1. git错误提示 $ hexo g INFO Start processing FATAL Something's wrong. Maybe you can find the solution h ...

  9. 718. Maximum Length of Repeated Subarray

    Given two integer arrays A and B, return the maximum length of an subarray that appears in both arra ...

  10. Linux - 查看并修改当前的系统时间

    转载自Linux系统查看当前时间的命令 查看和修改Linux的时区 查看当前时区 命令 : date -R 修改设置Linux服务器时区 方法 A 命令 : tzselect 方法 B 仅限于RedH ...