前言
Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。
環境配置
下載對應瀏覽器驅動
這里使用Chrome瀏覽器,根據自己當前安裝Chrome的版本來選擇,下載地址,放到一個指定目錄下,如 D:\Temp\chromedriver.exe.
引入Selenium的maven依賴
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.5</version>
</dependency>
代碼測試
這里我們使用Selenium完成一個小功能
打開百度,搜索"selenium 中文官網",新開一個窗口打開第一個搜索的結果。
代碼實現如下
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class Client {
public static void main(String[] args) throws InterruptedException {
//配置瀏覽器驅動地址
System.setProperty("webdriver.chrome.driver",
"D:\\Temp\\chromedriver.exe");
//打開Chrome瀏覽器
WebDriver webDriver = new ChromeDriver();
TimeUnit.SECONDS.sleep(5);
//打開百度網站
webDriver.get("https://www.baidu.com");
TimeUnit.SECONDS.sleep(2);
//輸入框輸入搜索關鍵詞 selenium 中文官網
webDriver.findElement(By.id("kw")).sendKeys("selenium 中文官網");
TimeUnit.SECONDS.sleep(2);
//點擊百度一下按鈕
webDriver.findElement(By.id("su")).submit();
TimeUnit.SECONDS.sleep(2);
//查詢所有搜索的結果
List<WebElement> resultElements = webDriver.findElements(By.className("result"));
if (!resultElements.isEmpty()) {
//找到第一條結果的第一個鏈接
List<WebElement> aTagElements = resultElements.get(0).findElements(By.tagName("a"));
if (!aTagElements.isEmpty()) {
//新開一個窗口打開此鏈接
String href = aTagElements.get(0).getAttribute("href");
System.out.println(href);
((JavascriptExecutor) webDriver).executeScript(String.format("window.open('%s')", href));
}
}
TimeUnit.SECONDS.sleep(10);
//關閉瀏覽器
webDriver.quit();
}
}
這里需要用到一些HTML中定位元素的知識,如根據Id,class,標簽名稱定位元素等。執行效果如下
基本原理
Selenium 自己定義了一套協議 The WebDriver Wire Protoco,幾乎可以操作瀏覽器做任何事情,包括打開、關閉、最大化、最小化、元素定位、元素點擊、上傳文件等,每個瀏覽器都實現了這套協議,就是WebDriver驅動。java向WebDriver發送http請求,WebDriver調用對應瀏覽器的本地API,並將返回結果封裝成json返回給java。
參考
selenium 使用教程詳解-java版本
WebDriver工作原理
Selenium Webdriver原理終於搞清楚了!
WebDriver官方文檔