Selenium的基本使用,已經介紹得差不多了,今天來簡單說說RemoteWebDriver與Grid,也是本系列的最后一篇。
還記得本系列第一章(Selenium簡介與環境搭配)的配置中,提到我們下載的 selenium-server-standalone-3.9.1.jar 並非是必要的。那什么時候需要用到呢?就是本文說的,當我們要用到遠程測試(RemoteWebDriver)與並行測試(Grid)的時候,才會用到該文件,並且該文件只需放到服務器端,客戶端並不需要。當然,為了方便測試,你也可以使用同一台電腦既當服務器,也當客戶端。
首先這里要說一下,這里說的遠程測試是指,利用遠程服務器的webdriver進行測試,即代碼是在客戶端,但被傳送到服務器端執行,服務器端啟動的是自己的webdriver。例如,我們客戶端只安裝了chromedriver,服務端安裝了firefoxdriver,我們想測試一下項目在firefox下的表現,就可以使用服務器端進行測試。我們在客戶端寫的代碼基本一樣,因為我們客戶端通常用的driver都是:ChromeDriver, EdgeDriver, FirefoxDriver, InternetExplorerDriver, OperaDriver, SafariDriver,而他們都繼承自 RemoteWebServer,所以,實際上我們客戶端的很多代碼,都是直接繼承自RemoteWebServer的,不同的最重要一點就是聲明方式,RemoteWebServer需要指定遠程服務器的IP地址或域名。
//客戶端driver聲明方式 System.setProperty("webdriver.chrome.driver", "D:/WorkSpace/SeleniumTest/tools/chromedriver.exe"); WebDriver driver=new ChromeDriver(); //RemoteWebDriver聲明方式 RemoteWebDriver driver=new RemoteWebDriver(new URL("http://192.168.1.107:4444/wd/hub"), DesiredCapabilities.chrome());
下面說說RemoteWebServer的用法。
首先說說配置,為了清楚說明,我用VirtualBox虛擬了win7,然后先安裝JDK,安裝最新版的chrome,將chromedriver.exe復制到C:\Windows下,將selenium-server-standalone-3.9.1.jar復制到C盤下,啟動命令行,輸入以下命令:java -jar c:\selenium-server-standalone-3.9.1.jar
這樣,selenium server就啟動成功了。
我們在項目中,輸入以下代碼並執行:
//RemoteWebDriver聲明 RemoteWebDriver driver=new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.chrome()); driver.get("http://www.baidu.com"); System.out.print(driver.getTitle());
執行后再看看命令行,效果如下:
可以看到,代碼確實在服務器端執行了,服務器端也確確實實的啟動了chrome,返回了百度的標題。而使用RemoteWebDriver與我們之前使用的webdriver的代碼基本是大同小異的。
那么,Grid又是什么呢?Grid其實是一種並行測試工具,可以同時在不同機器,不同系統,不同瀏覽器上進行測試,其最大的目的就是節省測試的時間。Grid包含至少一個hub和一個node,hub和node是什么東西呢,你可以簡單理解為hub是文件夾,node是文件,hub下可以有很多node,而每個node其實就是我們測試環境的配置。例如,我們要在linux下,測試firefox,那么我們可以注冊一個node,指定平台,瀏覽器,瀏覽器版本等。而注冊可以通過命令行,又或者是自己編輯json配置文件,然后一次加載。
那么,要並行測試,我們的代碼應該怎么寫呢,其實,大部分代碼還是一樣,不同的只是driver的聲明和配置。
DesiredCapabilities firefoxCap=DesiredCapabilities.firefox(); //設置瀏覽器名 firefoxCap.setBrowserName("firefox"); //設置版本 firefoxCap.setVersion("46"); //設置平台 firefoxCap.setPlatform(Platform.LINUX); //該測試用例,將會被hub分配到符合cap設置的三個條件的node RemoteWebDriver driver=new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), firefoxCap);
可見,后面的RemoteWebDriver也好,Grid也好,只要我們掌握了前面所說的基本用法,也就掌握了他們的用法,只是聲明方式略有不同而已。本節只是簡單介紹,更詳細的介紹可以查看官網:https://docs.seleniumhq.org/docs/07_selenium_grid.jsp
至此,本系列暫告一段落。