Selenium用戶指南 - 第六章 Selenium 1 (Selenium RC)[4]

From: http://blog.csdn.net/planisnothing/article/details/7252955



處理HTTPS和彈出窗口安全

許多應用程序從HTTP切換到HTTPS,當它們需要發送加密的信息諸如密碼或信用卡信息。這對今天的Web應用程序來說的是共同的。Selenium RC支持這個。

爲確保HTTPS站點的真實,瀏覽器需要一個安全證書。否則,當瀏覽器使用HTTPS存取AUT時,它將假定應用程序是不可信任的。當如此時,瀏覽器將顯示一個安全彈出窗口,這些彈出窗口不能使用Selenium RC關閉。

當在Selenium RC測試中處理HTTPS時,必須使用支持的運行模式,併爲你處理安全證書。你需要在你的測試程序初始化Selenium時,指定該運行模式。

在Selenium RC 1.0 beta 2以及以後的版本爲此運行模式使用*firefox或*iexplore。在早期的版本,包括Selenium RC 1.0 beta 1,使用*chrome或*iehta。使用這些運行模式,你可以不安裝任何特定的安全證書;Selenium RC將爲你處理這個。

在版本1.0,推薦運行模式*firefox或*iexplore。然而,有附加的*iexploreproxy和*firefoxproxy運行模式。這些僅僅是爲了提供向後的兼容性,除非遺留的測試程序需要,不應該使用。它們有安全證書處理,以及多窗口運行,如果你的應用程序打開附加的瀏覽器窗口,的限制。

在早期的Selenium RC版本,*chrome或*iehta是支持HTTPS和處理安全彈出窗口的運行模式。它們被認爲是試驗模式,儘管它們相當穩定和許多人使用它們。如果你正在使用Selenium 1.0,你不需要也不應該使用這些舊的運行模式。

安全證書的解釋

正常情況下,你的瀏覽器將信任你正在測試的,安裝了你擁有的安裝證書的應用程序。你可以在瀏覽器的選項或Internet屬性(如果你不知道你的AUT的安全證書,可詢問你的系統管理員)中檢查它。當Selenium裝載你的瀏覽器時,它會注入代碼到瀏覽器和服務器之間的截獲的消息。瀏覽器現在認爲不信任的軟件將試圖僞裝你的應用程序。它通過使用彈出消息警告你。

要回避這個,Selenium RC(再次重申,使用支持的運行模式)會臨時地安裝它自己的安全證書,到你的客戶機器一個瀏覽器可以存取的位置。這將欺騙瀏覽器認爲它訪問的是一個不同於你的AUT的站點,而有效地抑制警告彈出窗口。

另外一個由早期的Selenium版本使用的方法是安裝隨你的Selenium安裝提供的Cybervillians安全證書。然而,大部分的用戶不再需要做這個;如果你正運行Selenium RC在代理注入模式,你可能需要顯式地安裝這個安全證書。

支持附加的瀏覽器和瀏覽器配置

Selenium API支持運行在除了Internet Explorer和Mozilla Firefox的多種瀏覽器。參見SeleniumHG.org的Web站點,查看支持的瀏覽器類型。此外,當瀏覽器不直接被支持時,你仍然可以運行Selenium測試,在你選擇的瀏覽器,通過讓你的應用程序啓動瀏覽器使用“*custom”模式(也就是說,替代*firefox或*iexplore)。要使用這個,你在API的調用中,傳遞瀏覽器可執行文件的路徑。這也可以使用交互模式在服務器中完成。

cmd=getNewBrowserSession&1=*custom c:\Program Files\Mozilla Firefox\MyBrowser.exe&2=http://www.google.com

使用不同的瀏覽器配置運行測試

正常地,Selenium RC自動配置瀏覽器,但如果你使用“*custom”模式啓動瀏覽器,你可以強制Selenium RC啓動瀏覽器使用不同的配置,而不是使用自動配置。

例如,你可以像這樣使用一個自定義配置啓動Firefox:

 

cmd=getNewBrowserSession&1=*custom c:\Program Files\Mozilla Firefox\firefox.exe&2=http://www.google.com

注意當以這種方式啓動瀏覽器時,你必須手動配置瀏覽器使用Selenium服務器做爲一個代理。正常地,這僅僅意味着打開你的瀏覽器首選項,並指定“localhost:4444” 作爲一個HTTP代理,但此操作方法可能對不同的瀏覽器,有根本地區別。詳細信息可查閱你的瀏覽器文檔。

Mozilla瀏覽器可能在如何啓動和停止上改變。可能需要設置MOZ_NO_REMOTE環境變量使得Mozilla瀏覽器行爲有更多的可預測性。Unix瀏覽器應該避免使用shell腳本啓動瀏覽器;通常直接使用二進制可執行文件(如firefox-bin)會更好。

解決公共的問題

在開始使用Selenium RC時,有幾個常常遇到的潛在的問題。 我們將在此介紹它們以及它們的解決方案。

不能連接到服務器

當你的測試程序不能連接到Selenium服務器時,Selenium在你的測試程序中拋出一個異常。它會顯示這個消息或一個類似的一個:


"Unable to connect to remote server (Inner Exception Message:
    No connection could be made because the target machine actively
    refused it )"

    (using .NET and XP Service Pack 2)

如果你看見類似於這樣的一個消息,確信你已經啓動了Selenium服務器。如果已經啓動,那麼在Selenium客戶庫和Selenium服務器之間存在一個連接問題。

當開始使用Selenium RC時,大多數人從在相同的機器上運行測試程序(帶有Selenium客戶端庫)和Selenium服務器開始。要完成這個,使用“localhost”作爲你的連接參數。我們推薦以這種方式開始,因爲它減少使用初期潛在的網絡問題的影響。假定你的操作系統有典型的網絡和TCP/IP設置,你應該沒有多少困難。事實上,許多人選擇以這種方式運行測試。

不管怎樣,如果你真的想要運行Selenium服務器在遠程機器,應該確保在兩個機器間有有效的TCP/IP連接。

如果你難以連接,可以使用常用的網絡連接工具,如ping,telnet,ifconfig(Unix)/ipconfig(Windows)等等,確保你有有效的網絡連接。如果不熟悉這些,你的系統管理員可以幫助你。

不能裝載瀏覽器

好的,不是一個友好的錯誤消息,很抱歉,但如果Selenium服務器不能裝載瀏覽器你很可能看到這個錯誤

(500) Internal Server Error

這可能是由於

    - Firefox(Selenium 1.0)不能啓動,因爲瀏覽器已經打開和你沒有指定一個不同的配置文件。參見在服務器選項的Firefox配置文件一節。

    - 你正在使用的運行模式不匹配在你的機器上的任何瀏覽器。檢查傳遞給Selenium的參數,當你的程序打開瀏覽器時。

    - 你顯式地指定了瀏覽器的路徑(使用“*custom” - 見上文),但路徑是不正確的。檢查和確保路徑是正確的。同樣查看Selenium用戶組確信你的瀏覽器和“*custom”參數沒有已知的問題。

Selenium不能找到AUT

如果你的測試程序成功地啓動瀏覽器,但瀏覽器不顯示你正在測試的Web站點,最大的可能原因是你的測試程序沒有使用正確的URL。

這可能容易發生。當你使用Selenium-IDE導出你的腳本,它插入一個虛擬的URL。你必須爲你測試的應用程序手動改變這個URL到正確的一個。

當準備一個配置文件時,Firefox拒絕關閉

這時常發生在當你運行Selenium RC測試程序在Firefox時,但你已經有一個Firefox瀏覽器會話在運行,而你在啓動Selenium服務器時沒有指定一個不同的配置文件。這個來自測試程序的錯誤看起來像這樣:

Error:  java.lang.RuntimeException: Firefox refused shutdown while preparing a profile

此處是來自服務器的完整錯誤消息:

16:20:03.919 INFO - Preparing Firefox profile...
16:20:27.822 WARN - GET /selenium-server/driver/?cmd=getNewBrowserSession&1=*fir
efox&2=http%3a%2f%2fsage-webapp1.qa.idc.com HTTP/1.1
java.lang.RuntimeException: Firefox refused shutdown while preparing a profile
        at org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc
her.waitForFullProfileToBeCreated(FirefoxCustomProfileLauncher.java:277)
...
Caused by: org.openqa.selenium.server.browserlaunchers.FirefoxCustomProfileLaunc
her$FileLockRemainedException: Lock file still present! C:\DOCUME~1\jsvec\LOCALS
~1\Temp\customProfileDir203138\parent.lock

要解決這個,參見指定一個不同的Firefox配置文件一節。

版本問題

確信你的Selenium版本支持你的瀏覽器版本。例如,Selenium RC 0.92不支持Firefox3。有時候你可能是幸運的(我就是)。但不要忘記檢查你正在使用的Selenium支持哪個瀏覽器的版本。如果有疑問,使用最新的,帶有你的瀏覽器版本最廣泛支持的Selenium發佈版本。

Error message: “(Unsupported major.minor version 49.0)” while starting server

這個錯誤說你沒有使用正確地Java版本。Selenium服務器需要Java 1.5或更高。

加倍仔細地檢查你的Java版本,從命令行運行這個。

java -version

你應該看到一個顯示Java版本的消息。

java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-b03)
Java HotSpot(TM) Client VM (build 1.5.0_07-b03, mixed mode)

如果你看到一個較低的版本號,你可能需要更新JRE,或者你可能僅僅需要增加它到你的PATH環境變量。

404 error when running the getNewBrowserSession command


如果當你試圖打開一個頁面在 “http://www.google.com/selenium-server/“而你得到一個404錯誤,則一定是因爲Selenium服務器沒有正確地配置做一個代理。"Selenium服務器"目錄沒有在google.com上;只有當代理被適當地配置時纔會存在。代理配置高度依賴於帶有*firefox,*iexplore,*opera,或*custom的瀏覽器是如何啓動的。

    - *iexplore:如果瀏覽器啓動是使用*iexplore,你可能有一個Internet Explorer代理設置問題。Selenium服務器試圖在Internet選項控制面板配置全局代理設置。你必須確信當Selenium服務器啓動瀏覽器時,它們被正確地配置。試着看看你的Internet選項控制面板。點擊“連接(Connections)”選項頁,然後點擊“局域網設置(LAN Settings)”。如果你需要使用一個代理去存取你想要測試的應用程序,你需要啓動Selenium服務器用“-Dhttp.proxyHost”;參見代理配置爲了更多的詳細信息。

    - *custom:當使用*custom時,你必須正確地配置代理(手動),否則你會得到一個404錯誤。加倍檢查你的正確配置的代理設置。爲了檢查是否正確地配置了代理,可以試試故意地錯誤配置瀏覽器。試試配置瀏覽器使用錯誤的代理服務器宿主或錯誤的端口。如果你已經成功地錯誤配置瀏覽器的代理設置,那麼瀏覽器將不能夠連接到Internet,這是一個確信一個人正在正確地調整相關設置的方式 。

    - 對其他的瀏覽器(*firefox,*opera) ,我們自動爲你硬編碼代理,如此此功能沒有已知的問題。如果你遇到404錯誤,並且已經仔細地遵從用戶指南,可以張貼你的結果給Selenium用戶組,從用戶社區尋求某些幫助。

許可拒絕錯誤

該錯誤最常見的原因是你的會話正試圖,通過跨域的邊界(諸如存取一個頁面從http://domain1,然後存取一個頁面從http://domain2)或切換協議(從http://domainX移動到https://domainX)違反同源策略。

這個錯誤也可能發生,當JavScript試圖去查找UI對象,那個仍然是不可得到的(先於這個頁面已經完成裝載),或者不再是可得到的(在頁面已經開始卸載)。這最常遇到是在帶有幾個部分的AJAX頁面,或者裝載和/或重新裝載獨立的較大頁面的子幀。

錯誤可能是間歇的。經常不可能用調試器再生這種問題,因爲當調試器的負荷增加到系統後,源於競爭條件的問題原因是不可再生的。許可問題被包括在本教程中。請仔細地閱讀有關同源策略,代理注入的章節。

處理瀏覽器彈出窗口

有幾種在Selenium測試中得到的“彈出窗口”。你可能不能運行Selenium命令關閉這些彈出窗口,如果它們是由瀏覽器激發而不是你的AUT。你可能需要知道如何管理它們。每一種類型的彈出窗口有區別地標定。

    - HTTP基本驗證對話框:這些對話框用於提示登錄到站點的用戶/密碼。要登錄到需要HTTP基本驗證的站點,在URL中使用用戶/口令,正如在RFC1738中的描述,像這樣: open(“http://myusername:[email protected]/blah/blah/blah“).

    - SSL證書警告:Selenium RC自動試圖去僞裝SSL證書,當服務器使能做一個代理時;參見HTTPS一節爲了更多的信息。如果你的瀏覽器被正確地配置,你應該永遠也不會看到SSL證書警告,但你可能需要配置瀏覽器信任我們危險的“CyberVillains” SSL證書授權。再次重申,有關如何完成請參考HTTPS一節。

    - 模態的JavaScript的alert/confirmation/prompt對話框:Selenium試圖隱藏這些對話框(通過替代window.alert,window.confirm和window.prompt),因此它們不會停止你的頁面的執行。如果你看到一個alert彈出窗口,可能是因爲它是在頁面裝載過程中激發的,那個通常對我們來說太早,以至於不能保護這個頁面。Selenium包含用於斷言和驗證alert和confirmation彈出窗口的命令。參見在第四章中的有關這些主題的章節。

在Linux,爲什麼我的FIrefox瀏覽器會話沒有關閉?

在Unix/Linux,你必須直接調用“firefox-bin”,如此確信可執行文件在指定的路徑上。如果通過一個shell腳本執行Firefox,當殺死瀏覽器Selenium RC時,也將殺死shell腳本,留下瀏覽器繼續運行。你可以直接指定firefox-bin的路徑,像這樣。

cmd=getNewBrowserSession&1=*firefox /usr/local/firefox/firefox-bin&2=http://www.google.com

Firefox *chrome使用自定義的配置文件不工作

檢查Firefox配置文件文件夾 -> prefs.js -> user_pref(“browser.startup.page”, 0);註釋此行像這樣: “//user_pref(“browser.startup.page”, 0);” 然後重試。

當正在裝載父頁面時,裝載一個自定義的彈出窗口可以麼(例如,先於父頁的JavaScript window.onload() 函數運行)?

不可以。Selenium在裝載頁面時,依賴於解釋器去決定窗口名稱。這些解釋器在捕捉新窗口時工作最佳,如果這些窗口被裝載在onload()函數之後。Selenium不可能識別在onload()函數之前裝載的窗口。

驗證命令的問題

如果你從Selenium-IDE導出你的測試,你可能發現你從測試得到空的驗證字符串(依賴於你使用的編程語言)。

註釋:本節還沒有開發。

Safari和MultiWindow模式

註釋:本節還沒有開發。

Firefox在Linux

在Unix/Linux,1.0以前的Selenium版本需要直接調用“firefox-bin” ,如果你正在使用一個以前的版本,確信真實的可執行文件在指定的路徑上。

在大多數的Linux發佈中,實際的firefox-bin位於:

/usr/lib/firefox-x.x.x/

其中x.x.x是程序的版本號。如此要增加路徑到用戶搜索路徑,你必須增加下面的到你的.bashrc文件:


export PATH="$PATH:/usr/lib/firefox-x.x.x/"

如果需要,你可以直接指定firefox-bin的路徑到你的測試中,像這樣:

"*firefox /usr/lib/firefox-x.x.x/firefox-bin"

IE和樣式屬性

如果你正運行測試在Internet Explorer,你不能定位元素使用樣式屬性。例如:

//td[@style="background-color:yellow"]

在Firefox,Opera或Safari,這會工作完美的,但在IE不行。IE按大寫字母解釋在@style中的關鍵字。因此,即使源代碼是小寫,你也應該使用:

//td[@style="BACKGROUND-COLOR:yellow"]

如果你的測試打算工作在多個瀏覽器中,這是一個問題,但你可以容易地編碼你的測試去檢測這種情況,並試圖替代這個僅工作在IE的定位器。

Error encountered - “Cannot convert object to primitive value” with shut down of *googlechrome browser

要避免這個錯誤,你必須啓動瀏覽器帶有一個無效同源策略檢查的選項。

selenium.start("commandLineFlags=--disable-web-security");

在那裏我可以詢問在這裏沒有回答的問題的?

試一下我們的用戶組。


© Copyright 2008-2012, Selenium Project. Last updated on Feb 02, 2012.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章