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 brew tap homebrew/cask && brew cask install chromedriver sudo apt-get install chromium-chromedriver
快速更新 1 2 3 4 brew cask reinstall chromedriver rm /usr/local/bin/chromedriver
测试代码
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 > <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 > <dependency > <groupId > org.jsoup</groupId > <artifactId > jsoup</artifactId > <version > 1.10.2</version > </dependency > <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 @Slf4j public class WebDriverTools { 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); ChromeOptions chromeOptions = new ChromeOptions (); if (null != proxyServer) { chromeOptions.addArguments("--proxy-server=http://" + proxyServer); } chromeOptions.addArguments("--headless" ); chromeOptions.addArguments("--disable-gpu" ); chromeOptions.addArguments("--no-sandbox" ); 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" ); chromeOptions.addArguments("--silent" ); chromeOptions.addArguments("lang=zh_CN.UTF-8" ); chromeOptions.addArguments("user-agent=\"" + SpiderProxyTools.randomUserAgent() + "\"" ); return new ChromeDriver (chromeOptions); } }