如何使用自动化测试工具Selenium?

news2025/4/4 20:39:51

哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴们可以一键三连支持一下欧~

目录

一、什么是自动化测试?

二、什么是Selenium?

三、如何搭建Selenium环境?

四、Selenium的基本使用

1、一个自动化案例

2、打印url和标题title

3、浏览器操作

4、键盘事件

5、鼠标事件


一、什么是自动化测试?

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程 。
同时,自动化测试包括 UI 自动化,接口自动化,单元测试自动化。

二、什么是Selenium?

Selenium web 应用中基于UI的自动化测试框架,那么选择Selenium这个工具自然跟它自身的优势密不可分。那么Selenium的优点如下:
1、开源免费。
2、支持多浏览器,比如我们常见的chrome,edge,firefox等。
3、支持多语言,无论你掌握Java,Python,c#还是ruby等,都可以使用Selenium这个工具。
4、支持多操作系统,比如Windows,Linux,Mac等。
5、Selenium的底层封装了很多的API,可以直接拿来使用。

三、如何搭建Selenium环境?

那么这里的话博主就演示如何使用Java+ Selenium来进行自动化测试的教程,其他语言照猫画虎,本质都是一样的,学会一种即可精通其他语言的版本。
1、首先Java的版本要求是1.8,这个也可以根据自己选择的 Selenium版本来对应,这里博主我以1.8来举例。
2、Google浏览器的版本在v75以上。
3、检查自己Google浏览器的版本:

4、下载Google驱动:下载地址

选择对应自己电脑操作系统以及浏览器的驱动。

选择对应浏览器的版本。

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

OK,那么到这里环境搭建就已经完毕了,接下来我们开始学习selenium的基本语法。

四、Selenium的基本使用

1、一个自动化案例

首先在我们的IDEA里面创建一个类,类名无所谓,自己取合适的就好。

创建Chrome驱动对象,要知道所有的selenium操作都是通过驱动来完成的,所以我们首先需要获取谷歌驱动对象,下面三行代码是固定写法,记忆就好,理解起来也非常的简单。

        //允许所有的请求
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        //创建一个驱动对象来打开浏览器
        ChromeDriver driver = new ChromeDriver(options);

 2、get()方法

那么get()方法就是获取到对应页面的地址,也就是获取一个URL。比如这里我们需要获取百度首页的地址,可以如下操作:

driver.get("https://www.baidu.com/");

3、元素定位方法cssSelector()

那么首先打开百度首页,鼠标右键,打开开发者工具,然后点击箭头,选中输入框,找到对应代码,然后鼠标右键,找到copy,点击 Copy selector:

同时会用到寻找元素的方法findElement,操作如下:sendKeys()里面的内容就是输入框我们想输入的内容;

driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");

OK,那么我们现在找到了百度的输入框,并且已经输入了数据selenium,那么是不是要点击“百度一下”按钮,那么点击操作用到什么方法呢?

同样,我们需要定位到“百度一下”这个按钮,还是使用我们的cssSelector方法,同时使用click()方法来进行点击操作:

driver.findElement(By.cssSelector("#su")).click();

OK,那么一个完整的打开百度首页并且输入数据进行搜索的自动化代码就写完了,因为代码的执行速度较快,我们可能看的不太清楚,所以我们可以使用函数sleep(毫秒)来控制代码的执行速度,这样我们可以更加清晰的看到执行的过程;

sleep(3000);

OK,接下来看完整的代码:

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

import java.util.List;

import static java.lang.Thread.sleep;

public class firstAuto {
    //web自动化实例
    public void dianji() throws InterruptedException {
        //允许所有的请求
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        //创建一个驱动对象来打开浏览器
        ChromeDriver driver = new ChromeDriver(options);
        //输入百度地址
        driver.get("https://www.baidu.com/");
        sleep(3000);
        driver.findElement(By.cssSelector("#kw")).sendKeys("selenium");
        sleep(1000);
        //找到“百度一下”按钮,并点击
        driver.findElement(By.cssSelector("#su")).click();
        sleep(1000);
        //释放驱动对象,关闭浏览器
        driver.quit();
    }
}

 运行结果:

2、打印url和标题title

 这里主要会用到了两个函数 getCurrentUrl() 和 getTitle(),他们的返回值类型是String,所以可以定义两个String变量来接收。

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

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

        // 打印url和标题title
        String url = driver.getCurrentUrl();
        String title = driver.getTitle();
        if(url.equals("https://www.baidu.com/") || title.equals("百度一下,你就知道")){
            System.out.println("测试通过,标题和url均正确。");
        }
    }
}

运行结果:

3、浏览器操作

包括设置浏览器的页面大小,浏览器前进,后退,刷新,滚动条滑动等。

package AutoTest.Selenium1;

import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import static java.lang.Thread.sleep;

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

        //全屏
        driver.manage().window().maximize();
        //设置固定宽,高
        driver.manage().window().setSize(new Dimension(1000,800));

        driver.findElement(By.cssSelector("#kw")).sendKeys("杨幂");
        driver.findElement(By.cssSelector("#su")).click();
        //浏览器回退
        driver.navigate().back();
        sleep(1000);
        //浏览器刷新
        driver.navigate().refresh();
        sleep(3000);
        //浏览器前进
        driver.navigate().forward();
        sleep(3000);
        //将浏览器滚动条滑到最底端  JS脚本强制转换
        ((JavascriptExecutor)driver).executeScript("document.documentElement.scrollTop=10000");
    }
}

4、键盘事件

这个操作是让自动化代码在运行过程中可以进行点击键盘上的按键操作;下面给的功能即ctrl+a,

ctrl+c,ctrl+v这种快捷键的功能;

package AutoTest.Selenium1;

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

//键盘事件 让自动化代码在运行过程中可以进行点击键盘上的按键操作
public class demo4 {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com/");

        driver.manage().window().maximize();
//        driver.manage().window().fullscreen();
        driver.findElement(By.cssSelector("#kw")).sendKeys("杨幂");
        driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"a");
        driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"c");
        driver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"v");
        driver.findElement(By.cssSelector("#su")).click();
    }
}

 运行结果:

5、鼠标事件

要使用鼠标事件需要导入工具包: import org.openqa.selenium.interactions.Actions
方法move_to_element(element);
移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素;
方法perform() 执行所有存储的行为;
contextClick() 右击;
doubleClick() 双击;
dragAndDrop() 拖动;
moveToElement() 移动;
package AutoTest.Selenium1;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.interactions.Actions;

//鼠标事件
public class demo5 {
    public static void main(String[] args) {
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        ChromeDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com/");

        driver.findElement(By.cssSelector("#kw")).sendKeys("520");
        driver.findElement(By.cssSelector("#su")).click();
        //找到图片按钮
        WebElement webElement = driver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //鼠标右击
        Actions actions = new Actions(driver);
        actions.moveToElement(webElement).contextClick().perform();
    }
}

OK,考虑到文章的内容篇幅长度,那么selenium的基础语法本文先叙述一部分,我们下篇博客继续更新后续的相关操作方法。感谢关注和支持~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023前端面试笔记 —— HTML5

系列文章目录 内容链接2023前端面试笔记HTML5 文章目录 系列文章目录前言一、HTML 文件中的 DOCTYPE 是什么作用二、HTML、XML、XHTML 之间有什么区别三、前缀为 data- 开头的元素属性是什么四、谈谈你对 HTML 语义化的理解五、HTML5 对比 HTML4 有哪些不同之处六、meta 标签有…

【动手学深度学习】--21.锚框

锚框 学习视频:锚框【动手学深度学习v2】 官方笔记:锚框 1.锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(gro…

模型下载不知道去哪下便宜的可以看过来!

我们在画图的时候,为了提升工作效率,会上一些模型下载网站下载一些模型,但是有时候模型网站的免费模型找不到自己想要的模型,我们只能下载付费的。因此,寻找一个便宜的又能满足自己需求的模型下载网站变得很重要。现在…

微信群发超过200人怎么一键群发

首先微信本身就有群发的功能,只不过有限制最多也就200人。使用微信自带的群发助手需要分批进行群发消息,如果不想分批次群发消息可以借助第三方工具,比如微信管理系统。 微信自带的群发助手使用如下: 手机打开微信——【我】的主…

WPF实战项目十二(API篇):配置AutoMapper

1、新建类库WPFProjectShared,在类库下新建文件夹Dtos,新建BaseDto.cs,继承INotifyPropertyChanged,实现通知更新。 public class BaseDto : INotifyPropertyChanged{public int Id { get; set; }public event PropertyChangedEv…

Seaborn数据可视化(四)

目录 1.绘制箱线图 2.绘制小提琴图 3.绘制多面板图 4.绘制等高线图 5.绘制热力图 1.绘制箱线图 import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据(例如,使用seaborn自带的数据集) tips sns.load_dataset("t…

OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 论文阅读

论文信息 题目:OVRL-V2: A simple state-of-art baseline for IMAGENAV and OBJECTNAV 作者:Karmesh Yadav, Arjun Majumdar, Ram Ramrakhya 来源:arxiv 时间:2023 代码地址: https://github.com/ykarmesh…

UWB超宽带定位技术介绍

UWB超宽带定位技术介绍 UWB系统是近几年来非常热门的一个技术,UWB技术使用两种方式传输数据:一种是无线收发,利用卫星信号进行传输,另一种是通过无线通信的方式传输数据。 无线收发采用的模式主要是同步、异步和自适应多址。 一…

Linux环境下远程访问SVN服务:SVN内网穿透的详细配置与操作指南

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

AI常用工具实战,一次性带你全面体验,助你掌握AI技术!

AI常用工具实战,一次性带你全面体验,助你掌握AI技: 1、AI工具的通识介绍,工具准备 2、GPT和Mid journey文本图形工具的使用说明 3、GPT:核心玩法、定制你的私人助理,在不同场景下,GPT能够为我…

自动化部署及监测平台基本架构

声明 本文是学习 政务计算机终端核心配置规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 核心配置自动化部署及监测技术要求 自动化部署及监测平台基本架构 对于有一定规模的政务终端核心配置应用,需要配备自动化部署及监测平台&am…

打开软件提示vcomp100.dll丢失问题怎么解决?

当我们打开游戏或软件时,电脑提示vcomp100.dll丢失或找不到vcomp100.dll,该怎么办呢?这可能会困扰很多人。事实上,vcomp100.dll是电脑系统中的一个重要动态连接文件,丢失或损坏可能会导致电脑计算机出现蓝屏、崩溃或卡…

【【萌新的STM32学习-15】】

萌新的STM32学习-15 我们现在考虑需要把IO应该设置在什么模式 什么样的输出模式 暂时不考虑复用模式 只用在 开漏和推挽两种情况下 推挽的优点是可以输出高低电平 驱动能力强 开漏必须考虑是否有内部上拉或者外部上拉 通过一个按键控制一个LED灯亮灭 按键是输入 LED亮灭是输…

SOPC之NIOS Ⅱ实现电机转速PID控制(调用中断函数)

通过FPGA开发板上的NIOS Ⅱ搭建电机控制的硬件平台,包括电机正反转、编码器的读取,再通过软件部分实现PID算法对电机速度进行控制,使其能够渐近设定的编码器目标值。 一、问题与改进 SOPC之NIOS Ⅱ实现电机转速PID控制_STATEABC的博客-CSDN…

【AI模型】ncnn深度学习框架配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍ncnn框架配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…

快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

轻松实现文件夹名互换,快速批量改名高手工具助您高效管理!

亲爱的用户们,您是否曾经需要将文件夹的名称进行互换,但手动一个一个改名太过繁琐?现在,我们为您推出一款高效的文件夹批量改名工具,让您轻松实现文件夹名的互换,帮助您更好地管理文件! 首先&a…

linux安装部署gitlab全教程,包含配置中文

linux安装部署gitlab全教程,包含配置中文 大家好,我是酷酷的韩~ 1.前期准备 安装包下载地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 我这里选择的这个gitlab-ce-15.7.3-ce.0.el7.x86_64.rpm 还有一些相关依赖包(地址等审核过我放到…

Android图片压缩原理分析(三)—— 哈夫曼压缩讲解

前言 前面几篇文章,我们了解了一些关于图片压缩的基础知识以及Android的Bitmap相关的知识,然后也提到的Skia是Android的重要组成部分。在鲁班压缩算法解析中初次提到了哈夫曼压缩,那么他们之间到底是存在什么关系呢?今天我们就来探…

Spring 事务(事务、声明式事务@Transactional、事务隔离级别、事务传播机制)

目录 1.事务的定义 2.Spring中事务的实现 2.1 MySQL中的事务使用 2.2 Spring中编程事务的实现 2.3 Spring中声明式事务 2.3.1 声明式事务的实现 Transactional 2.3.2 Transactional 作用域 2.3.3 Transactional 参数说明 2.3.4 注意事项 (1)解…