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

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

目录

一、什么是自动化测试?

二、什么是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的基础语法本文先叙述一部分,我们下篇博客继续更新后续的相关操作方法。感谢关注和支持~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据课程K3——Spark的常用案例

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的常用案例——WordCount; ⚪ 掌握Spark的常用案例——求平均值; ⚪ 掌握Spark的常用案例——求最大值和最小值; ⚪ 掌握Spark的常用案例——TopK; ⚪ 掌握Spark的常用案例…

SpringSecurity原理

最近在研究SpringSecurity,肝了好多天,算是有点收获,在这里分享下 SpringSecurity是什么? SpringSecurity是一个强大的可高度定制的认证和授权框架,对于Spring应用来说它是一套Web安全标准。SpringSecurity注重于为J…

DDD 架构分层,MQ消息要放到那一层处理?

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 本文的宗旨在于通过简单干净实践的方式教会读者,使用 Docker 配置 RocketMQ 并在基于 DDD 分层结构的 SpringBoot 工…

厦门逗客传媒:抖音本地团购怎么入驻

随着社交媒体的不断发展,短视频平台已经成为了商家推广和营销的热门渠道之一。在这其中,抖音作为全球知名的短视频平台,以其巨大的用户基数和精准的推荐算法吸引了大量商家的关注。而在抖音上,本地团购也成为了一个备受关注的领域…

【Python】强化学习:原理与Python实战

搞懂大模型的智能基因,RLHF系统设计关键问答 RLHF(Reinforcement Learning with Human Feedback,人类反馈强化学习)虽是热门概念,并非包治百病的万用仙丹。本问答探讨RLHF的适用范围、优缺点和可能遇到的问题&#xff…

商城-学习整理-高级-商城业务-异步线程池(十三)

目录 一、线程1、初始化线程的 4 种方式2、线程池的七大参数3、线程池的运行流程:4、例子5、常见的 4 种线程池6、开发中为什么使用线程池 二、CompletableFuture 异步编排0、业务场景:1、创建异步对象2、计算完成时回调方法3、handle 方法4、线程串行化…

自动化测试平台seldom-platform部署及使用

介绍 seldom-platform是一个基于seldom测试框架的测试平台 项目地址:https://github.com/SeldomQA 文档:seldom 语雀 首先,专门为seldom测试框架提供平台化支持。其次,只负责自动化测试项目的解析、执行用例,当然…

【Django】Task4 序列化及其高级使用、ModelViewSet

【Django】Task4 序列化及其高级使用、ModelViewSet Task4主要了解序列化及掌握其高级使用,了解ModelViewSet的作用,ModelViewSet 是 Django REST framework(DRF)中的一个视图集类,用于快速创建处理模型数据的 API 视…

十八、深度学习模型30年演化史

1、模型分类 深度学习是解决问题的一系列模型与方法,但深度学习模型不是深度学习领域中唯一的研究方向,且不一定是最重要的研究方向。除了模型之外,比较重要的还有优化算法、损失函数、采样方法等。 1.1 DNN 深度神经网络(Deep Neural Networks, 以下简称DNN)是…

解决Oracle中XML插入数据时的空格问题

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

windows上ffmpeg如何录制双屏幕中的一个屏幕上的视频

首先,如何在window上安装ffmpeg自己查找scoop安装ffmpeg. 如题: 如果你有两个屏幕,如何让ffmpeg来录制其中的一个屏幕的视频呢。 很简单,首先你要查看另外一个屏幕的分辨率: 第一步:进入系统中 第二步&am…

基于OpenCV实战(基础知识一)

目录 简介 1.计算机眼中的图像 2.图片的读取、显示与保存 3.视频的读取与显示 简介 OpenCV是一个流行的开源计算机视觉库,由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包,可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和…

Spring Clould 负载均衡 - Ribbon

视频地址:微服务(SpringCloudRabbitMQDockerRedis搜索分布式) Ribbon-负载均衡原理(P14) 具体实现时通过LoaBalanced注解实现,表示RestTemplate要被Ribbon拦截处理 orderservice调用user时候&#xff0c…

用队列实现栈

目录 题目题目要求示例 解答方法一、实现思路时间复杂度和空间复杂度代码 方法二、实现思路时间复杂度和空间复杂度代码 方法三、实现思路时间复杂度和空间复杂度代码 总结 题目 用队列实现栈 题目要求 题目链接 示例 解答 方法一、 使用两个队列来实现栈。 实现思路 题…

科技成果鉴定测试有什么意义?专业CMA、CNAS软件测评公司

科技成果鉴定测试是指通过一系列科学的实验和检测手段,对科技成果进行客观评价和鉴定的过程。通过测试,可以对科技成果的技术优劣进行评估,从而为科技创新提供参考和指导。 一、科技成果鉴定测试的意义 1、帮助客户了解科技产品的性能特点和…

【Spring】一次性打包学透 Spring | 阿Q送书第五期

文章目录 如何竭尽可能确保大家学透Spring1. 内容全面且细致2. 主题实用且本土化3. 案例系统且完善4. 知识有趣且深刻 关于作者丁雪丰业内专家推图书热卖留言提前获赠书 不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很…

nvm安装使用教程

文章目录 下载配置安装最新稳定版 node安装指定版本查看版本切换版本删除版本 常见问题安装node后 显示拒绝访问的问题使用cnpm会报错的问题降低cnpm版本npm镜像 下载 NVM for Windows 下载地址:https://link.juejin.cn/?targethttps%3A%2F%2Fgithub.com%2Fcoreyb…

java学习网站_Java程序员必看的学习网站

哔哩哔哩 B 站动力节点官方视频 https://space.bilibili.com/76542346?spm_id_from333.337.0.0 超多视频免费白嫖 专注 java 培训的动力节点 毕业学员业内高薪就业,逐渐得到了业界广大的好评,被业界誉为 “口口相传的 Java 黄埔军校 “。 网址&#x…

【计算机网络】【常考问题总结】

1. ping 127.0.0.1 后会发生什么? ping 127.0.0.1 ;ping 0.0.0.0 ; ping localhost 面试官问:断网了,还能ping通 127.0.0.1 吗?为什么?_kevin_tech的博客-CSDN博客 2. MTU,MMU是…

某多多商品平台数据采集

某多多商品平台数据采集 声明逆向目标寻找加密位置代码分析补环境补充内容声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者 无关,若有侵权,请私信我立即删除! 逆向目标 Anti-Content参数 寻找加密位置 先在控制台全局搜…