UI界面自动化测试-Selenium

news2025/1/10 12:02:46

Selenium工作原理

image.png
image.png

SeleniumAPI

定位元素

image.png

Selenium操作对象

**send_keys 在对象上模拟按键输入 **
image.png
clear 清除对象输入的文本内容 **
image.png
click 点击对象(无限制)
image.png
submit 提交(用于form表单) **
image.png
getText() 用于获取元素的文本信息
image.png
g
etAttribute() 用于获取属性的值

image.png
quit 关闭游览器(quit关闭会将token cookie等删除 推荐)
close 关闭游览器(不推荐)
image.png
隐式等待 selenium.webdriver.remote.webdriver.implicitly_wait(time_to_wait)
image.png
使用案例:

public static void main(String[] args) throws InterruptedException {
        //创建一个游览器驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度网页
        webDriver.get("https://www.baidu.com");
        //找到搜索框
        WebElement cearch_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入软件测试
        cearch_input.sendKeys("软件测试");
        //清空搜索框中内容
        cearch_input.clear();
        //输入前端
        cearch_input.sendKeys("前端");
        //找到百度一下,点击
        WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));
        baidu_button.click();
        //隐式等待
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        //显示等待
        //WebDriverWait wait = new WebDriverWait(webDriver, 3);
        //wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#su")));
        //查看是否有前端相关内容
        List<WebElement> search_result = webDriver.findElements(By.xpath("//font[@color=\"#CC0000\"]"));
        for (int i = 0; i < search_result.size(); i++) {
            if(search_result.get(i).getText().equals("前端")) {
                System.out.println("成功");
            }else{
                System.out.println("失败");
            }
        }
        //关闭游览器 quit关闭会将token cookie等删除 推荐
        webDriver.quit();
    }

打印信息

获取title getTitle()
获取url getCurrentUrl()
image.png

游览器操作

游览器最大化 webDriver.manage.windows.maximize()
image.png
设置游览器大小 webDriver.manage().window().setSize(new Dimension(x, y))
image.png
游览器前进后退 webDriver.navigate().back() / forward()
image.png
操作游览器滚动 ((JavascriptExecutor)webDriver).executeScrpt(“document.documentElement.scrollTop=x”)
image.png

键盘事件

键盘按键用法和键盘组合用法:
image.png

鼠标事件

移动和右键:

public static void main(String[] args) {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://baidu.com/");
        //先创建一个Actions
        Actions actions = new Actions(webDriver);
        WebElement element = webDriver.findElement(By.xpath("//a[@target=\"_blank\"]"));
        //鼠标移动到这个按钮上且右键
        actions.moveToElement(element).contextClick().perform();
    }

特殊操作

切换窗口

image.png

//切换窗口句柄
    public static void main10(String[] args) throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://baidu.com/");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
        sleep(3000);
        //获取当前窗口句柄
        String cur_handle = webDriver.getWindowHandle();
        System.out.println(cur_handle);
        //获取游览器全部窗口的句柄
        Set<String> all_handle = webDriver.getWindowHandles();
        for (String str : all_handle) {
            if (!str.equals(cur_handle)) {
                //将句柄切换到当前窗口句柄
                webDriver.switchTo().window(str);
            }
        }
        webDriver.findElement(By.cssSelector("#ww")).sendKeys("测试");
        webDriver.findElement(By.cssSelector("#s_btn_wr")).click();
        sleep(3000);
        List<WebElement> webElements = webDriver.findElements(By.cssSelector("#\\32  > div > h3 > a > em"));
        System.out.println(webElements.toString());
        for (int i = 0; i < webElements.size(); i++) {
            if(webElements.get(i).getText().equals("测试")) {
                System.out.println("测试成功");
            } else {
                System.out.println("测试失败");
            }
        }

截图

引入依赖:

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.16.0</version>
</dependency>

image.png

public static void main(String[] args) throws IOException {
    WebDriver webDriver = new ChromeDriver();
    webDriver.get("https://baidu.com/");
    //截图 把截下来的图放到File临时变量中
    File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
    //把File保存在磁盘中
    FileUtils.copyFile(file, new File("D:/测试.png"));
}

选择一组元素

public static void main(String[] args) {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("");
        List<WebElement> webElements = webDriver.findElements(By.cssSelector(""));
        for(int i = 0; i < webElements.size(); i++) {
            if (webElements.get(i).getAttribute("").equals("")) {
                webElements.get(i).click();
            }
        }
    }

定位iframe下标签

image.png

 private static void Page02() throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/Test01/Page/test02.html?_ijt=hsrkct8hrvk081crvik4rmae0k&_ij_reload=RELOAD_ON_SAVE");
        webDriver.switchTo().frame("f1");
        sleep(3000);
        webDriver.findElement(By.cssSelector("body > div > div > a")).click();
    }

定位下拉框选项

image.png

//定位下拉框选项
    public static void main3(String[] args) throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("http://localhost:63342/measurement/page/a.html?_ijt=fpqtishuhhavpgqi7lpf6mti4p&_ij_reload=RELOAD_ON_SAVE");
        WebElement webElement = webDriver.findElement(By.cssSelector("#ShippingMethod"));
        //创建一个Select对象
        Select select = new Select(webElement);
        //第一种方式 通过序号选中选项, 下标从0开始
        select.selectByIndex(2);
        sleep(3000);
        select.selectByValue("12.51");
    }

定位弹窗

image.png

//定位弹窗
    public static void main4(String[] args) throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("file:///D:/code/java-ee/code/measurement/src/main/java/page/b.html");
        webDriver.findElement(By.cssSelector("body > button")).click();
        //弹框里输入啊哈哈哈哈哈哈
        webDriver.switchTo().alert().sendKeys("啊哈哈哈哈哈哈");
        sleep(3000);
        //弹框确定
        webDriver.switchTo().alert().accept();
        /*弹框取消
        webDriver.switchTo().alert().dismiss();*/
        String txt = webDriver.findElement(By.cssSelector("body > div")).getText();
        if(txt.equals("啊哈哈哈哈哈哈")) {
            System.out.println("测试成功");
        }else {
            System.out.println("测试失败");
        }
    }

上传文件

image.png

//上传文件
    public static void main(String[] args) throws InterruptedException {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("file:///D:/code/java-ee/code/measurement/src/main/java/page/c.html");
        sleep(3000);
        //上传文件
        webDriver.findElement(By.cssSelector("body > input[type=file]")).sendKeys("D:\\brower\\网络原理2.png");
    }

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

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

相关文章

【奥顺苹果CMS二开泛目录4.X版】PHP站群程序新增首页堆砌关键词新增四套seo模板

演示站&#xff08;赠送四套模板&#xff09;&#xff1a; https://macfan.qdwantong.com https://macfan2.qdwantong.com https://macfan3.qdwantong.com https://macfan4.qdwantong.com 4.X版程序特色功能&#xff1a; 后台除了可以设置干扰码、转码、插入符号和拼音这…

[Bugku] web-CTF-矛盾

1.开启环境 2.根据内容得知&#xff0c;get一个num&#xff0c;若num不是数字&#xff0c;出一次num的值&#xff0c;后若num1出flag&#xff1b;若num为数字则不进行任何操作所以要输出flag&#xff0c;首先要num不是数字&#xff0c;然后又要num1这显然是矛盾的&#xff0c;对…

transform详解

参考&#xff1a;https://zhuanlan.zhihu.com/p/690055241 https://zhuanlan.zhihu.com/p/685724799 https://zhuanlan.zhihu.com/p/609523552 cnn是通过卷积核的方式实现权重偏置的计算&#xff0c;ywkb&#xff0c;激活&#xff0c;前馈神经网络&#xff0c;反向传播。 trans…

P31结构体初阶

结构体的声明 结构体的基础知识 结构是一些值的集合&#xff0c;这些值成为成员变量。结构的每个成员可以是不同类型的变量。 结构体的声明 结构成员的类型 结构的成员可以是标量、数组、指针&#xff0c;甚至是其他结构体 结构体变量的定义和初始化 结构体成员的访问 结构…

AI技能提升学习-免费24年最新甲骨文(OCI)开卷AI证书(有答案)+代码调用OCI生成式AI服务教程

之前好多小伙伴和我反馈错过了24年甲骨文的AI专家级证书免费考试&#xff0c;这次小李哥就给大家带来了24年最新的OCI另外一门AI基础级考试&#xff0c;主要目的是帮助大家提升AI/ML的基础知识和技能&#xff0c;给大家带来免费的学习福利&#xff0c;赶紧关注小李哥不要再错过…

大数据技术原理-spark编程与应用

摘要 本实验总结了在"大数据技术原理"课程中进行的Spark编程实验。实验环境基于Apache Spark&#xff0c;旨在通过实践加深对Spark数据处理能力的理解。实验的主要内容包括开启Spark shell、导入必要的包、读入数据集、数据预处理、聚类模型训练、确定数据模型的中心…

STM32内部Flash存贮数据的应用(STM32F446)

目录 概述 1 STM32内部Flash介绍 1.1 MCU简介 1.2 存储空间 1.3 主要特性 1.4 嵌入式闪存 2 库函数介绍 2.1 编程接口函数 2.2 锁和解锁函数 3 功能实现 3.1 写数据函数&#xff1a;FlashDrv_Write 3.2 读数据函数&#xff1a; FlashDrv_read 3.3 源代码 4 测试…

carla unreal engine源码:如何自定义开发传感器

文章目录 前言一、目标二、代码内容三、工程搭建1、更改点总览2、工程修改1&#xff09;代码文件拷贝至目标路径2&#xff09;SafeDistanceSensor.cpp 修改3&#xff09;SafeDistanceSerializer.h 修改4&#xff09;SafeDistanceEvent.h 修改5&#xff09;Sensor.h 修改6&#…

大数据技术原理-NoSQL数据库的应用

摘要 本实验报告聚焦于"大数据技术原理"课程中的NoSQL数据库实验。实验环境包括MySQL、Redis、MongoDB、Java以及Hadoop。实验内容涉及Redis和MongoDB的安装、配置和基本操作&#xff0c;包括数据的插入、删除和查询。此外&#xff0c;实验还包括使用Java API对Mong…

【统计全为 1 的正方形子矩阵】python刷题记录

R3-分治篇 class Solution:def countSquares(self, matrix: List[List[int]]) -> int:rowlen(matrix)collen(matrix[0])dp[[0]*(col1) for _ in range(row1)]ret0for i in range(row):for j in range(col):if matrix[i][j]1:dp[i1][j1]min(dp[i][j1],dp[i1][j],dp[i][j])1re…

umi-request全局响应拦截器

文章目录 介绍思路实现方法1.直接修改 umi-request方法2.自定义 request 实例&#xff0c;通过 umi-request 库进行配置 介绍 后端设计统一返回比如BaseResponse对象&#xff0c;前端也需要接收这个对象&#xff0c;从data取出想要的返回值。 前端请求比如之前返回的是numbe…

windows子系统wsl完成本地化设置locale,LC_ALL

在 Windows 的子系统 Linux&#xff08;WSL&#xff09;环境中&#xff0c;解决本地化设置问题可以采取以下步骤&#xff1a; 1. **检查本地化设置**&#xff1a; 打开你的 WSL 终端&#xff08;比如 Ubuntu、Debian 等&#xff09;&#xff0c;运行以下命令来查看当前的本…

大数据技术基础编程、实验和案例----大数据课程综合实验案例

一、实验目的 (1&#xff09;熟悉Linux系统、MySQL、Hadoop、HBase、Hive、Sqoop、R、Eclipse等系统和软件的安装和使用&#xff1b; (2&#xff09;了解大数据处理的基本流程&#xff1b; (3&#xff09;熟悉数据预处理方法&#xff1b; (4&#xff09;熟悉在不同类型数据库之…

湖南(用户洞察)源点咨询 论用户画像于精准营销之意义作用

湖南源点市场调研咨询认为&#xff0c;精准描摹用户画像是实现有效获客的重要方法。 因为只有通过用户画像&#xff0c;我们才能够持续不断了解用户现阶段的需求&#xff0c;痛点以及偏好。 用户画像不是简单的理解为对人群打标签&#xff0c;而是要通过大量的数据采集和分析…

螺旋文字滚动特效源码解析

如图所示&#xff0c;今天看到一个很炫酷的双文字螺旋滚动特效&#xff0c;两行文字呈螺旋状变化&#xff0c;在网站中这样的效果对用户很有吸引力。本文将基于原网站解析如何实现这个炫酷的效果&#xff0c;基于这个动图可以分析出需要实现的要点&#xff1a; 文字呈螺旋状滚…

管理流创建schema流程源码解析

一、简析 schema是pulsar重要的功能之一&#xff0c;现在就一起从源码的视角看下管理流创建schema时客户端和服务端的表现 客户端 客户端主要经历以下四个步骤 创建Schema实例 根据数据类型创建相对应的实例&#xff0c;例如Avro创建AvroSchema、JSON创建JSONSchema等 获取…

1.1、centos stream 9安装Kubernetes v1.30集群 环境说明

最近正在学习kubernetes&#xff0c;买了一套《Kubernetes权威指南 从Docker到Kubernetes实践全接触(第六版)》这本书讲得很好&#xff0c;上下两册&#xff0c;书中k8s的版本是V1.29&#xff0c;目前官网最新版本是v1.30。强烈建议大家买一套看看。 Kubernetes官网地址&#x…

jenkins使用docker api配置自签证书 +发布项目

配置证书 1、创建目录/etc/docker/certs&#xff0c; 在该目录下执行下列命令 openssl genrsa -aes256 -out ca-key.pem 4096 openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pemopenssl genrsa -out server-key.pem 4096 \ openssl req -subj "/…

常见的应急救援设备有哪些_鼎跃安全

在我们的生活中&#xff0c;应急事件的发生常常是突如其来的&#xff0c;它们对人民的生命财产安全构成重大威胁&#xff0c;同时也对社会稳定提出严峻挑战。在这样的紧急情况下&#xff0c;迅速开展有效的救援工作显得尤为重要。而在整个救援过程中&#xff0c;应急设备的使用…

【简历】湘南某二本学院:前端简历指导,秋招面试通过率低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届二本同学的前端简历&#xff0c;但是这个简历&#xff0c;因为学校是个二本的专业&#xff0c;虽然说主体是在小公司&#x…