教你实现自动化测试

news2025/5/13 7:25:30

前言:

📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年!

📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。

😇😇😇有兴趣的话关注博主一起学习,一起进步吧!

一、webdriver API

1.1元素的定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。

注意:不管用那种方式,必须保证页面上该属性的唯一性

1.1.1XPath定位

通过控制台复制XPath路径:

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

1.1.1.1XPath基础语法

1.绝对路径:/html开头(效率低)

 2.相对路径:以 // 开头

(1.)相对路径+索引:

(2.)相对路径+属性值:

(3.)相对路径+通配符:

(4.)相对路径+文本匹配:

1.1.2CSS定位

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

 1.1.2.1CSS基础语法

  • id选择器:#id

  • 类选择器:.class

  •  后代选择器:父级选择器 子级选择器

  •  标签选择器:标签名


二、操作测试对象

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

public static void test02() throws InterruptedException {
        ChromeOptions options=new ChromeOptions();
        //允许所有请求:--remote-allow-origins=*
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://baidu.com");
        sleep(3000);
        //找到百度输入框
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("Java107");
        //如果点击的元素放在form标签中,此时使用submit实现效果和click相同;如果点击的元素在非form标签中
        // ,此时使用submit会报错
        webDriver.findElement(By.cssSelector("#su")).submit();
        /*webDriver.findElement(By.cssSelector("#su")).click();*/
        sleep(3000);
        //清空输入框中的数据
        webDriver.findElement(By.cssSelector("#kw")).clear();
    }

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

public static void test03(){
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("http://baidu.com");
        webDriver.findElement(By.xpath("/html/body/div[2]/div[2]/div[2]/a[1]"));
    }

2.2getAttribute获取文本属性

public static void test04(){
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("http://baidu.com");
        //隐式等待:等待三天
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
        //百度一下通过该方式获取不到,因为不是位于标签的中间
        String buttonValue=webDriver.findElement(By.cssSelector("#su")).getAttribute("百度一下");
        System.out.println(buttonValue);
        if(buttonValue.equals("百度一下")){
            System.out.println("测试通过");
        }
        else{
            System.out.println("测试不通过");
        }
    }

 2.3打印信息:打印title+打印url

public static void test05(){
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("http://baidu.com");
        String url=webDriver.getCurrentUrl();
        String title= webDriver.getTitle();
        if(url.equals("https://www.baidu.com/")&& title.equals("百度一下,你就知道")){
            System.out.println("测试通过");
        }
        else{
            System.out.println("测试不通过");
        }
    }

 2.4添加等待

2.4.1sleep休眠

public static void test02() throws InterruptedException {
        ChromeOptions options=new ChromeOptions();
        //允许所有请求:--remote-allow-origins=*
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("https://baidu.com");
        sleep(3000);
        //找到百度输入框
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("Java107");
        //如果点击的元素放在form标签中,此时使用submit实现效果和click相同;如果点击的元素在非form标签中
        // ,此时使用submit会报错
        webDriver.findElement(By.cssSelector("#su")).submit();
        /*webDriver.findElement(By.cssSelector("#su")).click();*/
        sleep(3000);
        //清空输入框中的数据
        webDriver.findElement(By.cssSelector("#kw")).clear();
    }

2.4.2隐式等待

通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30)的用法time.sleep()更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长

public static void test04(){
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("http://baidu.com");
        //隐式等待:等待三天
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.DAYS);
        //百度一下通过该方式获取不到,因为不是位于标签的中间
        String buttonValue=webDriver.findElement(By.cssSelector("#su")).getAttribute("百度一下");
        System.out.println(buttonValue);
        if(buttonValue.equals("百度一下")){
            System.out.println("测试通过");
        }
        else{
            System.out.println("测试不通过");
        }
    }

2.4.3显示等待

public static void test06(){
        //显示等待
        ChromeOptions options=new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriver webDriver=new ChromeDriver(options);
        //打开百度首页
        webDriver.get("http://baidu.com");
        //判断元素是否可以被点击
        WebDriverWait wait=new WebDriverWait(webDriver,3000);
        wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#bottom_layer > div > p:nth-child(7) > a")));
    }

面试题:隐式等待和显示等待的区别

在Selenium中,隐式等待和显示等待都是用来等待页面加载的。它们的区别在于:

  • 隐式等待:设置一个超时时间,在这个时间内会去不断寻找某个元素,如果找到了就返回该元素,如果没有找到则抛出异常。
  • 显示等待:设置一个等待时间,如果在这个时间内找到了某个元素,则返回该元素,否则抛出异常。

简单来说,隐式等待是在查找元素时进行等待,而显示等待是在查找元素之前进行等待。

 

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

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

相关文章

视频云存储/安防监控/AI视频智能分析平台新功能:人员倒地检测详解

人工智能技术已经越来越多地融入到视频监控领域中,近期我们也发布了基于AI智能视频云存储/安防监控视频智能分析平台的众多新功能,该平台内置多种AI算法,可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍,支持口罩佩戴检测…

YOLOv8教程系列:四、使用yolov8仓库训练自己的图像分类数据集(含推理预测)

YOLOv8教程系列:四、使用yolov8仓库训练自己的图像分类数据集(含推理预测) 0.引言 Yolov8是最新一代的You Only Look Once目标检测模型,它由Ultralytics研究团队在2022年开发。相比于之前的Yolo版本,Yolov8在速度和精度上都有很大的提升。 …

ARM开发,stm32mp157a-A7核SPI总线实验(实现数码管的显示)

1.目标: a.数码管显示相同的值 0000 1111 ......9999; b.数码管显示不同的值 1234; 2.分析m74hc595芯片内部框图; 真值表: 3.代码; ---spi.h头文件--- #ifndef __SPI_H__ #define __SPI_H__#include &quo…

Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

湘潭大学 湘大 XTU OJ 1271 Color 题解(非常详细)

链接 1271 题面 题目描述 Alice在玩一个游戏,她在一个mn的格子里,随机涂黑k个格子。然后她每次可以把一行或者一列的格子染成红色,但是这一行中不能有黑色的格子。 请问她最多能把多少个格子涂成红色? 输入 第一行是一个整数…

低代码平台:开发应用程序的新革命

一、前言 在传统的软件开发交付链中,需求经过多次传递,往往造成需求失真和功能返工。然而,随着业务的不断变化,低代码开发作为软件开发的新兴分支,呈现出高效、灵活和稳定的特点,为企业提供了解决方案。 在…

MAC电脑外放没有声音解决方案

烦人呐,我的mac外接显示屏幕,显示器没有音频输出,需要mac笔记本的音频输出,但是经常打开后,mac没有声音输出,需要重启电脑才能生效。亲测一下方法有效,请参考: 文章目录 一、短期方案…

Java的类加载顺序

加载、验证、准备、解析和初始化。 加载 “加载”(Loading)阶段是“类加载”(Class Loading)过程的第一个阶段,在此阶段,虚拟机需要完成以下三件事情: 通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构…

CentOS8中使用yum命令出现错误提示:为仓库 ‘appstream‘ 下载元数据失败

需求 最近安装了虚拟机并配置了CentOS8,然后打算继续安装WEB服务环境 科普 yum是一个命令行工具,可以在Linux系统下帮助我们方便地管理软件包(包括安装、卸载、检查更新等操作),yum install命令的作用是在系统上安装…

很干的 Nginx

🎨 前言 本篇文章有些概念性的东西,是结合自己的理解表达出来的,可能有些理解不到位的地方。希望多多指教,谢谢大家。 红包献上 🧧🧧🧧🧧🧧🧧🧧…

解决idea登录github copilot报错问题

试了好多方案都没用,但是这个有用, 打开idea-help-edit custonm vm options 然后在这个文件里面输入 -Dcopilot.agent.disabledtrue再打开 https://github.com/settings/copilot 把这个设置成allow,然后重新尝试登录copilot就行就行 解决方…

【java安全】JNDI注入概述

文章目录 【java安全】JNDI注入概述什么是JNDI?JDNI的结构InitialContext - 上下文Reference - 引用 JNDI注入JNDI & RMI利用版本:JNDI注入使用Reference 【java安全】JNDI注入概述 什么是JNDI? JNDI(Java Naming and Directory Interf…

开源许可证解析:从MIT到GPL

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

kafka复习:(11)auto.offset.reset的默认值

在ConsumerConfig这个类中定义了这个属性的默认值,如下图 也就是默认值为latest,它的含义是:如果没有客户端提交过offset的话,当新的客户端消费时,把最新的offset设置为当前消费的offset. 默认是自动提交位移的,每5秒…

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果:5…

5个产品经理必看的交互软件,高保真原型必备

今天本文将给大家分享5个产品小白也能轻松上手使用的交互软件,帮助大家更快地做出具有高保真效果的原型图,一起来看看吧! 1、即时设计 即时设计是一个来自国内的交互软件,因此无论是在设计过程,还是使用体验方面&…

基于swing的图书借阅系统java jsp书店进销存mysql源代码

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅系统 系统有2权限:管…

GPS坐标转换并实时显示轨迹

文章目录 下载数据集创建功能包主要代码使用 下载数据集 链接: https://pan.baidu.com/s/1zSXyNhMNQdaFlDFziDse1Q 密码: 6j6u 其中话题/gps/fix和/imu_correct分别为sensor_msgs/NavSatFix类型的gps数据和sensor_msgs/Imu类型的imu数据 查看相关话题信息 创建功能包 cat…

MySQL 8.0 的工具日志配置管理

文章目录 日志分类设置错误日志设置错误日志等级生效时间 二进制日志(binlog)作用配置 慢日志(slow_log)作用 general_log 业务sql 日志分类 error log : 错误日志 genernal log : 普通日志 binlog &#…