:::
所有書籍
「Selenium」目錄
MarkDown
7. 深入瞭解Selenium RC工作原理(2)
前言
1. Selenium簡介
2. XPath的使用【ZZ】
3. Selenium API參考手冊【ZZ】
4. Selenium IDE的使用
5. 第一個Selenium RC測試案例
6. 深入瞭解Selenium RC工作原理(1)
7. 深入瞭解Selenium RC工作原理(2)
8. 玩轉Selenium Server
9. Selenium RC服務器命令行參數列表【ZZ】
9. Selenium RC服務器命令行參數列表【ZZ】
Selenium ======== 本篇主要是想更進一步介紹Selenium Server的工作原理,這次我們從Selenium Server的交互模式開始。 在《[第一個Selenium RC測試案例](http://www.cnblogs.com/hyddd/archive/2009/05/24/1488377.html)》中,我們以命令「java -jar selenium-server.jar」啟動了Selenium Server,其實在啟動Selenium Server時,我們還可以加上各種參數(具體的參數請參考《[Selenium RC服務器命令行參數列表](http://www.cnblogs.com/hyddd/archive/2009/05/30/1492511.html)》), 而開啟Selenium Server交互模式的命令為「java -jar selenium-server.jar -interactive」。交互模式,是Selenium Server提供的一種快速的測試方法,你可以對Selenium Server輸入命令從而直接啟動測試。 1.啟動Selenium Server交互模式 ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022272990.jpg) 2.在命令行中輸入:cmd=getNewBrowserSession&1=\*iexplore&2=http://www.google.com。控制Selenium Server啟動瀏覽器,以及創建Session。 ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022281380.jpg) (1).---> Requesting [http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=\*iexplore&2=http://www.google.com](http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com "http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com") 看過《[深入瞭解Selenium RC工作原理(1)](http://www.cnblogs.com/hyddd/archive/2009/05/30/1492213.html)》的應該瞭解:我們所編寫的測試案例,其實是通過發送Http請求實現對Selenium Server的控制,而測試案例所發送的請求就正是:---> Requesting [http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=\*iexplore&2=http://www.google.com](http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com "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](http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com "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的字樣,並出現如下兩個框框: ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022284012.jpg) 3.控制瀏覽器訪問[www.google.com](http://www.google.com)/webhp,輸入:cmd=open&1=http://www.google.com/webhp&sessionId=9505f5f8c52041c28f4cdc1f8e59f769 ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022290736.jpg) 噢,瀏覽器成功訪問
了:>。 總結一下: (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=…](http://localhost:4444/selenium-server/driver?cmd=Command&1=Target&2=Value&SessionID "http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com"),我們完全可以用瀏覽器發送請求控制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.cnblogs.com/hyddd/archive/2009/05/30/1492289.html)在上面的代碼中
就是「源」了,然而這是可能出現問題,請看下面代碼:
``` ISelenium selenium = new DefaultSelenium("127.0.0.1", 4444, "*iexplore", "http://www.google.com"); ``` ``` selenium.Start(); ``` ``` selenium.Open(
http://www.baidu.com
); ```
我們在啟動Session時,定義了源為
,但在後來的操作中,我們打開的卻是
,由於二者非同源,所以接下來的操作就可能會出現各種問題,故此Selenium Server會給出以下警告: ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022295371.jpg) Selenium Server提示說;如果測試案例是運行在\*iehta或者\*chrome上,或者改變Selenium Server的運行模式為proxy injection mode即可避免問題出現。 恩,在這裡,我不得不承認之前在《[深入瞭解Selenium RC工作原理(1)](http://www.cnblogs.com/hyddd/archive/2009/05/30/1492213.html)》中,為了簡化問題,我故意少寫了一些東西! 其實,Selenium Server其實有2種運行模式: (1).Heightened Privileges Browsers (2).Proxy Injection 現在Selenium Server啟動的默認模式為:Heightened Privileges Browsers。如果要啟動Proxy Injection模式,可以加參數「-proxyInjectionMode」。而之前在《[深入瞭解Selenium RC工作原理(1)](http://www.cnblogs.com/hyddd/archive/2009/05/30/1492213.html)》中介紹Selenium RC與Testcase關係,其實就是在描述Proxy Injection的 工作模式,因為我個人認為Proxy Injection設計模式更為合理,所以只對Proxy Injection模式作介紹。在這裡我補充說明一下,為什麼Heightened Privileges Browsers模式不能避免上面的問題。先看看Selenium Server在Heightened Privileges Browsers模式下的工作流程圖: ![](http://pic002.cnblogs.com/img/hyddd/200905/2009053022303137.jpg) 和Proxy Injection模式不一樣,在Heightened Privileges Browsers模式下,Browser對Web的請求沒有經過Http Proxy,所以返回的Web頁面就有可能和Selenium Core不同源了(一般的情況下,Open都應該只獲取「源」下的某個子頁面,用Open獲取其他「源」的頁面在測試中應該是極少數的,因為在這種情況 下,我們還應該再new一個新的ISelenium selenium進行處理,雖然用Open獲取其他「源」的頁面出現的機會極少,但如果真的需要這樣的話,也只能啟動 -proxyInjectionMode模式了,雖然這樣的效率會低一些)。
:::
搜尋
search
進階搜尋
QR Code 區塊
快速登入
所有討論區
「PHP全端開發」線上課程討論區
XOOPS使用討論區
一般研習學員
社大學員專用
路過哈啦區
XOOPS佈景設計
XOOPS模組開發
Tad書籍區
即時留言簿
書籍目錄
展開
|
闔起
線上使用者
55
人線上 (
8
人在瀏覽
線上書籍
)
會員: 0
訪客: 55
更多…
:::
主選單
NTPC OpenID
活動報名
模組控制台
進階區塊管理
站長工具箱(急救版)
網站地圖
Tad Tools 工具包
站長工具箱
行事曆
討論留言
嵌入區塊模組
快速登入
網站計數器
好站連結
最新消息
檔案下載
線上書籍
電子相簿
影音播放
常見問題
萬用表單
友站消息
社大學員
新聞
下載
教材
影音
討論
其他選單
好站連結
行事曆
電子相簿
常見問題
萬用表單
即時留言簿
友站消息
社大學員
登入
登入
帳號
密碼
登入