簡介
selenium提供了RemoteWebDriver,可以使執行測試的機器和發送測試命令的機器獨立開來,比如A機器,是寫測試代碼的機器,可以發送測試命令給服務器,可以理解為客戶端;B機器是執行測試代碼的機器,可以理解為服務器端,A發送命令給B,然后再B上面執行測試,並返回結果給A。
環境准備
通過上面的描述,我們需要兩台機器,一台作為客戶端,一台作為服務器端。
服務器端配置
前提是服務器已經安裝jdk,我這里安裝的是1.8。好像selenium-server3.0.0需要依賴java8(這個沒有驗證過),如果大家在啟動server的過程中報錯,可以嘗試將jdk修改為1.8的試一下。
(1)下載安裝firefox,chrome瀏覽器
(2)下載selenium-server-standalone.jar
官方下載地址:http://docs.seleniumhq.org/download/
我的百度雲地址(selenium-server-standalone 3.0.0.jar):http://pan.baidu.com/s/1dEQ2tiD
(3)下載chromedriver,geckodriver(selenium3.0以及之后的版本支持的firefox driver)
chromedriver官方下載地址:http://docs.seleniumhq.org/download/
我的百度雲地址(chromedriver 2.24):http://pan.baidu.com/s/1eSyWjp4
geckodriver官方下載地址:http://www.cnblogs.com/nbkhic/p/5779453.html
我的百度雲下載地址(geckodriver):http://pan.baidu.com/s/1slTHQH3
說明:由於我下載的serverselenium-server-standalone.jar是3.0.0版本的,所以這里需要下載geckodriver,如果你本機的server不是3.0.0以及之后的版本,則不用單獨下載firefox driver(geckodriver),可以直接使用selenium客戶端的老版本的firefoxdriver。關於firefox driver和selenium-server-standalone.jar的版本問題,可以參見我的另外一篇博客“【問題】selenium-server-standalone和webdriver版本不對應的問題”
(4)在服務器端啟動服務並配置driver
啟動server的命令:java -jar D:\FilesToDriver\selenium-server-standalone-3.0.0.jar
將driver放置到系統變量下,一般放置到“C:\Windows\System32”下
其實這里可以創建一個批處理文件(start.bat),每次啟動的時候就不用手工在cmd中輸入命令,可以雙擊一鍵啟動。
啟動之后的cmd顯示如下:
注意:服務器的地址如下:http://你的host地址:4444/wd/hub/,記錄,后面編寫客戶端代碼的時候需要使用
客戶端配置
eclipse+selenium2.53.1+jdk1.8
客戶端書寫測試用例
package seleniumdemo; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; public class EDemo2 { public static void main(String[] args) throws MalformedURLException, InterruptedException { // RemoteWebDriver的基本使用 //第一個參數:表示服務器的地址。第二個參數:表示預期的執行對象,其他的瀏覽器都可以以此類推 WebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:4444/wd/hub/"), DesiredCapabilities.chrome()); driver.manage().window().maximize(); driver.get("http://www.baidu.com"); Thread.sleep(2000); JavascriptExecutor js = (JavascriptExecutor)driver; js.executeScript("alert('我現在在服務器')"); Thread.sleep(2000); driver.quit(); } }
執行腳本
其實腳本是在服務器端執行的,客戶端用於發送命令。執行過程中可以看到服務器端的chrome別調用,同時cmd打印出相關的運行信息,如下