0%

Java-Selenium

Selenium

Selenium是最广泛使用的开源Web UI(用户界面)自动化测试套件之一。它最初由Jason Huggins于2004年开发,作为Thought Works的内部工具。Selenium支持跨不同浏览器,平台和编程语言的自动化。

  • Selenium可以轻松部署在Windows,Linux,Solaris和Macintosh等平台上。此外,它支持iOS(iOS,Windows Mobile和Android)等移动应用程序的OS(操作系统)。

  • Selenium通过使用特定于每种语言的驱动程序支持各种编程语言.Selenium支持的语言包括C#,Java,Perl,PHP,Python和Ruby。目前,Selenium Web驱动程序最受Java和C#欢迎。Selenium测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代Web浏览器中运行。Selenium支持的浏览器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。

Selenium WebDriver

Selenium WebDriver是Selenium RC的继承者。Selenium WebDriver接受命令(在Selenese中发送,或通过客户端API)并将它们发送到浏览器。这是通过特定于浏览器的浏览器驱动程序实现的,该驱动程序将命令发送到浏览器并检索结果。大多数浏览器驱动程序实际上启动并访问浏览器应用程序。

  • Selenium WebDriver是Selenium Tool套件中最重要的组件。最新版本“Selenium 2.0”与WebDriver API集成,提供更简单,更简洁的编程接口。

演示项目

环境配置

这里选用的是Google Chrome测试套件。

  • 注意,使用jdk8。

  • 下载ChromeDriver

    • 由三个独立的部分组成。有浏览器本身(“chrome”),Selenium项目提供的语言绑定(“驱动程序”)和从Chromium项目下载的可执行文件,它充当“chrome”和“driver”之间的桥梁。此可执行文件称为“chromedriver”,但我们将尝试将其称为此页面中的“服务器”以减少混淆。
    • 根据电脑安装的chrome版本选择合适的版本下载地址

快速安装

1
2
3
4
# Mac users with Homebrew installed: 
brew tap homebrew/cask && brew cask install chromedriver
# Debian based Linux distros:
sudo apt-get install chromium-chromedriver

快速更新

1
2
3
4
# Mac users with Homebrew reInstall 
brew cask reinstall chromedriver
# 如果已经存在新把之前的删除
rm /usr/local/bin/chromedriver

测试代码

  • Pom.xml
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<properties>
<junit.version>4.12</junit.version>
<lmbok.version>1.18.4</lmbok.version>
<slf4j.version>1.7.25</slf4j.version>
<logback.version>1.2.3</logback.version>
<!-- pom文件需要指定打包编码集,[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent! -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>


<dependencies>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lmbok.version}</version>
</dependency>

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>

<!-- Jsoup 工具包 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.14.0</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
</dependencies>

工具类

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

/**
* @author z201.coding@gmail.com
* @date 2020-08-30
**/
@Slf4j
public class WebDriverTools {

/**
* 创建Chrome浏览器驱动
* 需要系统已经安装好了chrome浏览器和chromedriver已加入到系统PATH环境变量中
* @return
*/
public static WebDriver chromeDriver() {
return chromeDriver(null);
}

public static WebDriver chromeDriver(Object proxyServer) {
String osName = System.getProperties().getProperty("os.name");
String path = null;
if (osName.equals("Linux")) {
path = "/usr/bin/chromedriver";
}
if (osName.equals("Mac OS X")) {
path = "/usr/local/bin/chromedriver";
}
System.setProperty("webdriver.chrome.chromedriver", path);
// ChromeDriverService service = new ChromeDriverService.Builder().usingDriverExecutable(new File(path)).usingAnyFreePort().build();
ChromeOptions chromeOptions = new ChromeOptions();
if (null != proxyServer) {
chromeOptions.addArguments("--proxy-server=http://" + proxyServer);
}
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--no-sandbox"); //Bypass OS security model
chromeOptions.addArguments("--disable-web-security");
chromeOptions.addArguments("--ignore-urlfetcher-cert-requests");
chromeOptions.addArguments("--disable-renderer-backgrounding");
chromeOptions.addArguments("--disable-infobars");
chromeOptions.addArguments("--start-maximized");
chromeOptions.addArguments("--disable-dev-shm-usage");
chromeOptions.addArguments("--log-level=3"); // set log level
chromeOptions.addArguments("--silent");
chromeOptions.addArguments("lang=zh_CN.UTF-8");
chromeOptions.addArguments("user-agent=\"" + SpiderProxyTools.randomUserAgent() + "\"");
// 创建无界面浏览器对象
// chromeOptions.setHeadless(true);
return new ChromeDriver(chromeOptions);
}
}
  • 运行完上面的代码就完成了最简单的demo。