java中Selenium简单使用
前言
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官方文档