Selenium3自動化測試java開發

一、環境

本機安裝jdk1.8

本機安裝eclipse

eclipse添加maven組件

新建maven工程並在POM.xml中添加如下字段:

<dependency>

      <groupId>org.seleniumhq.selenium</groupId>

      <artifactId>selenium-java</artifactId>

      <version>3.14.0</version>

    </dependency>

    <dependency>

      <groupId>org.seleniumhq.selenium</groupId>

      <artifactId>selenium-server</artifactId>

      <version>3.14.0</version>

    </dependency>

1

2

3

4

5

6

7

8

9

10

二、啓動chrome瀏覽器

啓動chrome瀏覽器需要chromedriver,故在使用前需要先down下來此driver,而後再在代碼中啓動瀏覽器;


1、獲取chromeDriver

chromeDriver獲取地址爲http://chromedriver.storage.googleapis.com/index.html


在此路徑下可以找到所有版本的driver,此頁面下的LATEST_RELEASE文件打開即可看到最新的driver的版本。

進入各個版本下打開notes.txt即可看到此driver版本匹配的chrome瀏覽器版本範圍,根據自己的瀏覽器的版本、計算機系統類型下載對應的driver。


此處使用windows系統作爲說明;


2、啓動chrome

由ChromeDriver類的源代碼可知,chrome實例其實是由ChromeDriverService來創建的,源碼如下:


public ChromeDriver() {

    this(ChromeDriverService.createDefaultService(), new ChromeOptions());

  }

1

2

3

1

2

3

查看ChromeDriverService代碼發現需要設定的driver的名稱如下所示:


/**

 System property that defines the location of the chromedriver executable that will be used by

 the {@link #createDefaultService() default service}.

   */

  public static final String CHROME_DRIVER_EXE_PROPERTY = "webdriver.chrome.driver";

1

2

3

4

5

1

2

3

4

5

即爲webdriver.chrome.driver;


在創建chrome實例前必須添加代碼

System.setProperty("webdriver.chrome.driver",driverPath);


(1)簡單的chrome啓動實例如下:

public static void main( String[] args )

    {

     System.setProperty("webdriver.chrome.driver","D:\\test\\driver\\chromeDriver.exe");

        WebDriver driver = new ChromeDriver();

        driver.get("https://www.baidu.com/");

    }

1

2

3

4

5

6

1

2

3

4

5

6

結果是可以正常啓動瀏覽器的;


(2)chrome定製啓動之帶ChromeOptions

簡單代碼如下:


public static void main( String[] args )

    {

     System.setProperty("webdriver.chrome.driver","D:\\test\\driver\\chromeDriver.exe");

     ChromeOptions options = new ChromeOptions();

     WebDriver driver = new ChromeDriver(options);

        driver.get("https://www.baidu.com/");

    }

1

2

3

4

5

6

7

1

2

3

4

5

6

7

其中ChromeOptions用於添加一些chrome啓動時的常見參數,如:

options.addArguments("--test-type");

其支持的功能如下;

1、添加啓動參數,即使用方法addArguments();

2、設置chrome二進制文件位置,使用方法setBinary();

3、添加擴展應用,使用方法addExtensions(paths)或者

addEncodedExtensions(encoded);

4、添加代理,使用放方法setProxy(proxy);

5、添加chrome設置,使用方法:

options.setExperimentalOption("prefs", prefs);;


下面一一介紹這些功能;


1、添加啓動參數

如下爲一些常用的chrome啓動參數:


    –user-data-dir=”[PATH]” 指定用戶文件夾User Data路徑,可以把書籤這樣的用戶數據保存在系統分區以外的分區。 

    –disk-cache-dir=”[PATH]“ 指定緩存Cache路徑 

    –disk-cache-size= 指定Cache大小,單位Byte 

    –first run 重置到初始狀態,第一次運行 

    –incognito 隱身模式啓動 

    –disable-javascript 禁用Javascript 

    –omnibox-popup-count=”num” 將地址欄彈出的提示菜單數量改爲num個。 

    –user-agent=”xxxxxxxx” 修改HTTP請求頭部的Agent字符串,可以通過about:version頁面查看修改效果 

    –disable-plugins 禁止加載所有插件,可以增加速度。可以通過about:plugins頁面查看效果 

    –disable-javascript 禁用JavaScript,如果覺得速度慢在加上這個 

    –disable-java 禁用java 

    –start-maximized 啓動就最大化 

    –no-sandbox 取消沙盒模式 

    –single-process 單進程運行 

    –process-per-tab 每個標籤使用單獨進程 

    –process-per-site 每個站點使用單獨進程 

    –in-process-plugins 插件不啓用單獨進程 

    –disable-popup-blocking 禁用彈出攔截 

    –disable-plugins 禁用插件 

    –disable-images 禁用圖像 

    –incognito 啓動進入隱身模式 

    –enable-udd-profiles 啓用賬戶切換菜單 

    –proxy-pac-url 使用pac代理 [via 1/2] 

    –lang=zh-CN 設置語言爲簡體中文 

    –disk-cache-dir 自定義緩存目錄 

    –disk-cache-size 自定義緩存最大值(單位byte) 

    –media-cache-size 自定義多媒體緩存最大值(單位byte) 

    –bookmark-menu 在工具 欄增加一個書籤按鈕 

    –enable-sync 啓用書籤同步 

    –single-process 單進程運行Google Chrome 

    –start-maximized 啓動Google Chrome就最大化 

    –disable-java 禁止Java 

    –no-sandbox 非沙盒模式運行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

常用啓動參數及範例:

1、以中文utf-8編碼格式啓動瀏覽器:


ChromeOptions options = new ChromeOptions();

options.addArguments("--lang=zh_CN.UTF-8");

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

2、模擬iphone手機:


ChromeOptions options = new ChromeOptions();

options.addArguments("user-agent=\"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1\"");

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

3、使用用戶瀏覽器設置


   ChromeOptions options = new ChromeOptions();

   options.addArguments("--user-data-dir=C:/Users/user_name/AppData/Local/Google/Chrome/User Data");

   WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

其中user_name爲本機使用用戶名稱,由於測試用chrome安裝在默認位置,故路徑爲代碼所示地址;此參數用於有時候我們使用chrome瀏覽器做自動化時一些設置無法在代碼中進行配置,故需要使用自定義設置的瀏覽器配置來啓動的情況;

需要注意的事此時運行啓動chrome瀏覽器需要把現有的chrome瀏覽器關掉纔可以運行,不然會報錯,否則則會啓動一個全新的瀏覽器;


4、設置瀏覽器最大化:


ChromeOptions options = new ChromeOptions();

options.addArguments("--start-maximized");  

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

其實此處無必要,直接在代碼中設置最大化即可,不建議使用;


5、ChromeDriver設置忽略 Chrome 瀏覽器證書錯誤報警提示:


ChromeOptions options = new ChromeOptions();

options.addArguments("--test-type", "--ignore-certificate-errors");  

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

此處也可以在代碼中設置,不建議使用;


6、不打開GUI模式啓動chrome

此功能對於chrome版本有要求,mac和linux要求59以上版本,而windows則要求60以上版本,且chromeDriver版本爲2.30+;


ChromeOptions chromeOptions = new ChromeOptions();

chromeOptions.addArguments("--headless");

WebDriver driver = new ChromeDriver(chromeOptions);

1

2

3

1

2

3

在此模式下,運行的時候你不會看到新打開的瀏覽器,但是代碼可以正常運行;


2、設置chrome二進制文件位置

此處用於設置chrome.exe的位置,用於chrome瀏覽器未安裝在默認位置位置的情況,使用代碼如下:


ChromeOptions options = new ChromeOptions();

options.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

或者


ChromeOptions options = new ChromeOptions();

options.setBinary(new File("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"));

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

3、添加擴展應用

如下代碼所示,傳入的是擴展程序的路徑或者其File對象,或者多個擴展程序路徑的File對象組成的列表;


ChromeOptions options = new ChromeOptions();

options.addExtensions(new File("/path/to/extension.crx"));

WebDriver driver = new ChromeDriver(options);

1

2

3

1

2

3

4、添加代理

此部分用於在需要添加代理才能打開某些網站的機器上使用;

代碼如下:


ChromeOptions options = new ChromeOptions();

String proxyIpAndPort= "localhost:8080";//代理地址

Proxy proxy = new Proxy();

proxy.setAutodetect(true);//是否自動檢測代理設置;

proxy.setFtpProxy(proxyIpAndPort);//ftp代理地址

proxy.setHttpProxy(proxyIpAndPort);//http代理地址

proxy.setNoProxy(proxyIpAndPort);//無需代理的網址列表,用;分隔

proxy.setProxyAutoconfigUrl(proxyAutoconfigUrl);//代理自動設置地址

proxy.setProxyType(ProxyType.MANUAL);//手工代理,必填

proxy.setSocksPassword(password);//密碼

proxy.setSocksUsername(username);//用戶名

proxy.setSocksVersion(5);//添加此項會自動設置proxyType爲ProxyType.MANUAL,此項設置內容爲socks的版本,爲4或者5,最新爲5

proxy.setSslProxy(proxyIpAndPort);

options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

(在之前的工作中有用到此項,但是不好用,還未研究完)


5、添加chrome設置

用於在chrome啓動時添加一些chrome設置,使用範例爲:


ChromeOptions options = new ChromeOptions();

Map<String, Object> prefs = new HashMap<String, Object>();

//設置提醒的設置,2表示block

prefs.put("profile.default_content_setting_values.notifications", 2);

//設置自動下載項,2表示不勾選,即可以直接下載多個文件而不詢問

prefs.put("profile.default_content_setting_values.automatic_downloads", 2);

options.setExperimentalOption("prefs", prefs);

WebDriver driver = new ChromeDriver(options);

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

如上所示,設置了兩個內容設置,此部分對應於chrome的設置部分,但是key值無法在chrome界面上和設置項對應起來,找到chrome裏的設置項和其對應的key和value的方法如下:

以設置自動下載多個文件而不詢問爲例:

首先先在chrome的設置中去勾選掉默認勾選的此項,如下:


然後進入chrome瀏覽器的設置目錄,如下:


打開Preferences文件,可以在裏邊找到對應該項的設置,此處需要自己根據名稱進行尋找了,如下所示就是剛剛修改了設置後新增的部分(如果是默認設置這個文件裏是不顯示的):


所以,在代碼中添加key值爲

profile.default_content_setting_values.automatic_downloads

value爲2即可;


(3)chrome定製啓動之帶Capability

範例如下:


System.setProperty("webdriver.chrome.driver","D:\\test\\driver\\chromeDriver.exe");

ChromeOptions options = new ChromeOptions();

DesiredCapabilities capability = DesiredCapabilities.chrome();

capability.setCapability(ChromeOptions.CAPABILITY, options);

WebDriver driver = new ChromeDriver(capability);

1

2

3

4

5

1

2

3

4

5

如上所示,添加的ChromeOptions可以直接被添加到capability中,故如果有其他的capability需要設置時,建議使用此方法來啓動chrome瀏覽器。

chrome瀏覽器的設置也可以通過此方法來加入,比如:


Map<String, Object> contentSettings = new HashMap<String, Object>();

contentSettings.put("images", 2);

 

Map<String, Object> preferences = new HashMap<String, Object>();

preferences.put("profile.default_content_settings", contentSettings);

 

DesiredCapabilities caps = DesiredCapabilities.chrome();

caps.setCapability("chrome.prefs", preferences);

WebDriver driver = new ChromeDriver(caps);

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

對於Proxy也可以直接在此添加,代碼如下所示:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章