java中Selenium简单使用

前言

Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

环境配置

下载对应浏览器驱动

这里使用Chrome浏览器,根据自己当前安装Chrome的版本来选择,下载地址,放到一个指定目录下,如 D:Tempchromedriver.exe.

引入Selenium的maven依赖

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官方文档

原文地址:https://www.cnblogs.com/strongmore/p/15110802.html