2013-01-09 45 views
2

我想用JUnit實現一些Selenium 2 Webdriver測試。 SeleniumHQ.org和Web上的文檔讓我感到困惑,因爲它似乎在Selenium RC和Webdriver之間來回跳動。另外,我的Java不是很強大。幾年前我已經參加過幾門課程,但沒有多少用處。我想讓JUnit測試從無頭CI服務器運行,並讓Firefox通過Webdriver在遠程客戶端系統上運行。遠程Selenium 2 Webdriver實例如何接受不可信證書?

從我收集的內容中,我可以使用以下代碼在本地系統上打開由Webdriver控制的Firefox實例。我正在測試的網站有一個不可信的SSL/TLS證書,所以我需要告訴Firefox驅動程序接受不受信任的證書。這在當地很有用:

FirefoxProfile profile = new FirefoxProfile(); 
profile.setAcceptUntrustedCertificates(true); // NOTE: this is the default behavior 
RemoteWebDriver driver = new FirefoxDriver(profile); 
Selenium selenium = new WebDriverBackedSelenium(driver, baseurl); 

但我不知道如何在使用Webdriver的遠程系統上執行此操作。這兩種方法似乎完全不兼容。上面的代碼沒有任何辦法適應到下面的代碼,我一直在使用使用遠程的webdriver:與遠程測試系統上定製Firefox配置工作

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl); 
selenium.start(); 

現在,我已經花了很多時間。它在2012年夏天工作,但在最近的操作系統和瀏覽器更新後,它停止工作。創建Firefox驅動程序配置文件並調用setAcceptUntrustedCertificates(true)看起來好多了。是否可以使用Webdriver在遠程系統的瀏覽器中運行測試,並讓瀏覽器忽略不可信的SSL/TLS證書?

+0

是否有你使用webdriver支持selenium而不是純webdriver的原因? –

+0

我使用WebDriverBackedSelenium的唯一原因是因爲它是我發現的使用FirefoxProfile對象實例化Selenium對象的唯一方式(因此我可以告訴它接受不受信任的證書)。我已經多次閱讀SeleniumHQ.org上的文檔,每次我都會感到困惑。你會推薦什麼,Prashant? –

回答

-1

當我問這個問題時,我不明白Selenium對象和WebDriver對象之間的區別。儘管我特別想了解Selenium 2的「WebDriver」功能,但我愚蠢地認爲我可以用Selenium 2對象編寫一個「Selenium 2 Webdriver」項目。對於有這些工具經驗的人來說,這聽起來很明顯,但在閱讀「Selenium 2」書籍和項目文檔後,我的想法仍然不清楚。

因爲我的結果是,我正在編寫Java代碼來實例化Selenium對象來檢查網頁,並試圖將Selenium對象傳遞給WebDriver對象,希望測試可以在遠程服務器上運行。現在看來更清楚了:Selenium和WebDriver項目合併成一個名爲(令人困惑)Selenium 2.0的新傘項目,但它們是Selenium 2中獨特和獨立的工具。如果我想使用WebDriver API,我必須將任何現有的Selenium對象轉換爲WebDriver對象。這兩種工具似乎沒有有用的互動。

例如,在我的項目中,我有以下代碼。它在我的本地桌面系統的Web瀏覽器跑了巨大的:

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl); 

selenium.get(urlPath); 

selenium.type(username_field, username); 
selenium.type(password_field, password); 
selenium.click(login_button); 

但我希望能夠到一個無頭持續集成服務器上運行的測試,不是我的桌面系統。我已經將代碼轉換爲使用WebDriver對象而不是Selenium對象。現在它運行連接到硒電網2服務器的遠程系統上:

WebDriver driver = new RemoteWebDriver(new URL("http://10.0.0.29:4444/wd/hub"), capability); 

driver.get(urlPath); 

driver.findElement(By.name(username_field)).sendKeys(username); 
driver.findElement(By.name(password_field)).sendKeys(password); 
driver.findElement(By.className(login_button)).submit(); 

我希望其他人想學習如何使用webdriver的硒2不會浪費,因爲我沒有閱讀有關硒的對象儘可能多的時間,認爲Selenium對象是WebDriver的一部分。我當前的[n00b]建議是忽略任何提到Selenium對象的東西,並且純粹專注於找出關於WebDriver對象的儘可能多的東西。一個良好的開始是在SeleniumHQ.org的webdriver的文檔:

由於A.J.在他的回答提出,也看看硒網格文件:

和PS:遠程硒2 webdriver的情況下自動接受不受信任的SSL/TLS證書,默認情況下。無需代碼。

2

正如您的問題所述,您不需要設置任何屬性來顯式接受不可信證書。默認情況下,webdriver接受不受信任的證書。而不是使用webdriverbacked硒,你應該直接使用remotewebdriver,如:

Webdriver wd = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox()); 

這裏http://localhost:4444/wd/hub是集線器的URL哪些測試應該執行被髮送到。當您開始測試時,集線器將查找已使用firefox功能註冊的遠程節點。

我個人建議閱讀http://code.google.com/p/selenium/wiki/Grid2而不是seleniumhq.org的文檔。據我所知,硒團隊正在嘗試更新seleniumhq文檔。你也可以爲它做出貢獻:)

+1

謝謝你,A.J.你寫關於使用集線器的內容,以及與Grid2的鏈接,讓我開始朝着正確的方向發展。我試圖將一個WebDriver對象塞進一個Selenium對象,並沒有意識到我可以完全不使用Selenium對象,而只是使用WebDriver對象來查找頁面上的元素。這是一個非常令人沮喪的經歷,試圖瞭解Selenium和WebDriver對象如何聯繫和工作,但我開始明白。我很樂意爲SeleniumHQ文檔作出貢獻,一旦我能夠圍繞它進行考慮。再次感謝。我投了你的答案。 –

2

首先我會推薦堅持webdriver,如果你使用webdriver支持selenium只是爲了配置文件。您可以定義配置文件在本地計算機上用作

File file = new File("firebug-1.8.1.xpi"); 
    FirefoxProfile firefoxProfile = new FirefoxProfile(); 
    firefoxProfile.addExtension(file); 
    firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1"); 
    WebDriver driver = new FirefoxDriver(firefoxProfile); 

回答你的問題:我將從here引述西蒙·斯圖爾特的解決方案:

FirefoxProfile profile = new FirefoxProfile(); 
profile.setAcceptUntrustedCertificates(true); 
DesiredCapabilities caps = DesiredCapabilities.firefox(); 
caps.setCapability(FirefoxDriver.PROFILE, profile); 

使用此配置文件創建遠程驅動程序。

現在,如果這不起作用,我們可以寫一個錯誤(或至少一個功能請求)。

後編輯:,因爲我沒有一個證書問題網站一應俱全我真的不能測試這個解決方案。所以從某種意義上說,我會看着你的反饋來獲得真實的照片......:)

+0

謝謝你,Prashant。你寫的關於堅持純Webdriver讓我走上正軌。我試圖將一個WebDriver對象塞進一個Selenium對象中。我沒有意識到我可以完全不使用Selenium對象,只是使用WebDriver對象來查找頁面上的元素。這是由於我對Webdriver技術的根本誤解,以及它如何與較舊的Selenium RC技術(我試圖避免的)相關。這確實是泥濘的水!再次感謝。我投了你的答案。 –

相關問題