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>

扫描二维码关注公众号,回复: 7180737 查看本文章

      <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也可以直接在此添加,代码如下所示:


猜你喜欢

转载自blog.51cto.com/14529380/2435610