自动化测试 selenium 篇

✏️作者:银河罐头
系列专栏:JavaEE

“种一棵树最好的时间是十年前,其次是现在”

目录

  • 什么是自动化测试?
  • Selenium 介绍
    • Selenium 是什么
    • Selenium 特点
    • 工作原理
  • selenium+Java环境搭建
    • Chrome+Java
      • 1.下载chrome浏览器
      • 2.查看chrome浏览器版本
      • 3.下载chrome浏览器驱动
    • 配置环境变量
    • 验证环境是否搭建成功
      • 1.创建java项目,添加pom文件中添加依赖
      • 2.编写代码运行
  • selenium 常用 API
    • 元素的定位
      • css 定位
      • xpath 定位
  • 操作测试对象
  • 添加等待
    • 强制等待
    • 隐式等待
  • 打印信息

什么是自动化测试?

自动化测试就是将人工测试手段进行转换,让代码去执行。

自动化测试分类:

单元测试,接口自动化,UI自动化。

Selenium 介绍

Selenium 是什么

Selenium 是 web 应用中基于 UI 的自动化测试框架。

Selenium 特点

支持多平台、多浏览器、多语言(如java,C#,Python,Ruby), 有丰富的 API。

工作原理

自动化测试 selenium 篇_第1张图片

selenium+Java环境搭建

Chrome+Java

windows电脑环境搭建-chrome浏览器

1.下载chrome浏览器

2.查看chrome浏览器版本

自动化测试 selenium 篇_第2张图片

3.下载chrome浏览器驱动

https://chromedriver.chromium.org/downloads

自动化测试 selenium 篇_第3张图片

自动化测试 selenium 篇_第4张图片

配置环境变量

解压下载好的驱动压缩包,将下载好的chromedriver.exe放到java系统环境变量下.

自动化测试 selenium 篇_第5张图片

验证环境是否搭建成功

1.创建java项目,添加pom文件中添加依赖

自动化测试 selenium 篇_第6张图片

<dependencies>
    
    <dependency>
        <groupId>org.seleniumhq.seleniumgroupId>
        <artifactId>selenium-javaartifactId>
        <version>3.141.59version>
    dependency>
dependencies>

自动化测试 selenium 篇_第7张图片

2.编写代码运行

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class Main {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        webDriver.get("https://www.baidu.com");
    }
}

自动化测试 selenium 篇_第8张图片

自动化测试 selenium 篇_第9张图片

如果打开了浏览器,此时说明安装成功。

自动化测试 selenium 篇_第10张图片

selenium 常用 API

元素的定位

css 定位

自动化测试 selenium 篇_第11张图片

public class Main {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        //允许所有请求
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //找到百度搜索输入框
        WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
        //输入软件测试
        element.sendKeys("软件测试");
    }
}

运行:

自动化测试 selenium 篇_第12张图片

xpath 定位

自动化测试 selenium 篇_第13张图片

public class Main {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        //允许所有请求
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //找到百度搜索输入框
        //xpath 定位元素
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        //输入软件测试
        element.sendKeys("软件测试");
    }
}

自动化测试 selenium 篇_第14张图片

  • 绝对路径:/html/head/title (不常用)

  • 相对路径:

相对路径 + 索引://form/span[1]/input

自动化测试 selenium 篇_第15张图片

相对路径 + 属性值://input[@class=“s_ipt”]

自动化测试 selenium 篇_第16张图片

相对路径 + 通配符:// * [@ * =“su”]

自动化测试 selenium 篇_第17张图片

相对路径 + 文本匹配://a[text()=“新闻”]

自动化测试 selenium 篇_第18张图片

public class Main {
    public static void main(String[] args) throws InterruptedException {
        test01();
    }

    private static void test01() throws InterruptedException {
        ChromeOptions options = new ChromeOptions();
        //允许所有请求
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver = new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //找到百度搜索输入框
        //css定位元素
//        WebElement element = webDriver.findElement(By.cssSelector(".s_ipt"));
        //xpath 定位元素
        WebElement element = webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
        //输入软件测试
        element.sendKeys("软件测试");
        //找"百度一下"按钮
        //点击
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //校验
        List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
        int flag = 0;
        for(int i = 0;i < elements.size();i++){
            if(elements.get(i).getText().contains("测试")){
                flag = 1;
                System.out.println("测试通过");
                break;
            }
        }
        if(flag == 0){
            System.out.println("测试不通过");
        }
    }
}

自动化测试 selenium 篇_第19张图片

css 选择器定位元素效率更高。

操作测试对象

  • click 点击对象

  • send_keys 在对象上模拟按键输入

  • clear 清除对象输入的文本内容

private static void test02() throws InterruptedException {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    //找到百度搜索输入框,输入"软件测试"
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
    //点击"百度一下"按钮
    webDriver.findElement(By.cssSelector("#su")).click();
    sleep(3000);
    //清空百度搜索输入框中的数据
    webDriver.findElement(By.cssSelector("#kw")).clear();
}
  • submit 提交

如果点击的元素放在 form 标签中,使用 submit 和 click 效果一样。

如果点击的元素不在 form 标签中,此时使用 submit 会报错。

//会报错,因为点击的是"新闻"超链接,它没有放在 form 标签中
private static void test03() {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    webDriver.findElement(By.xpath("//a[text()=\"新闻\"]")).submit();
}

自动化测试 selenium 篇_第20张图片

  • text 用于获取元素的文本信息

  • getAttribute: 获取元素属性的值。

自动化测试 selenium 篇_第21张图片

像"软件测试"这样的可以通过.getText()来获取文字内容。

自动化测试 selenium 篇_第22张图片

而"百度一下"这个按钮不能通过 .getText() 来获取文字内容。

private static void test04() {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    String button_value = webDriver.findElement(By.cssSelector("#su")).getText();
    System.out.println(button_value);
}

自动化测试 selenium 篇_第23张图片

没有打印 “百度一下” 这个按钮的文本内容。

如果要想打印"百度一下" 这个按钮的文本内容,可以通过 getAttribute()

private static void test04() {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    String button_value = webDriver.findElement(By.cssSelector("#su")).getAttribute("value");
    System.out.println(button_value);
}

自动化测试 selenium 篇_第24张图片

添加等待

强制等待

sleep();

隐式等待

隐式等待和显式等待都是智能等待。

如果等待时间 3 天时间,强制等待会一直等待,等待的时间 3 天。

隐式等待,最多等 3 天,如果在 这 3 天之内获取到了页面上的元素,就会往下执行代码;如果等待 3 天还没有找到这个元素就会报错。

private static void test02() throws InterruptedException {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    //找到百度搜索输入框,输入"软件测试"
    webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
    //点击"百度一下"按钮
    webDriver.findElement(By.cssSelector("#su")).submit();
    //        sleep(30000000);
    webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
    //清空百度搜索输入框中的数据
    webDriver.findElement(By.cssSelector("#kw")).clear();
}

sleep(30000000); 效果是 输入框输入 软件测试后 一直死等 30000000 ms.

webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);

效果是只要输入框一输入完软件测试,就执行下面的代码,clear(). 没有等待。

显式等待可以让他指定去等待某一个元素。

打印信息

打印 title

打印 url

private static void test05() {
    ChromeOptions options = new ChromeOptions();
    //允许所有请求
    options.addArguments("--remote-allow-origins=*");
    WebDriver webDriver = new ChromeDriver(options);
    //打开百度首页
    webDriver.get("https://www.baidu.com");
    String url = webDriver.getCurrentUrl();
    String title = webDriver.getTitle();
    System.out.println("title: " + title + " url: " + url);
}

自动化测试 selenium 篇_第25张图片

你可能感兴趣的:(软件测试,selenium,测试工具)