使用slenium对不同元素进行定位实战篇~

单选框Radio定位:

单选框只能点击一个,并且点击之后并不会被取消,而多选框,能够点击多个,并且点击之后可以取消

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;public class Practice_web {@Testpublic void  getRadioElement() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://iviewui.com/view-ui-plus/component/form/radio");//实现逐个点击匹配到的元素List<WebElement> radioButtons = webDriver.findElements(By.xpath("//input[@class=\"ivu-radio-input\" and @type=\"radio\"]"));//我们也可通过指定i的下标从而实现点击任意个匹配到的元素for(int i=0; i<radioButtons.size(); i++){radioButtons.get(i).click();Thread.sleep(1000); // 等待1秒钟}//通过文本去定位某个元素webDriver.findElement(By.xpath("//span[text()=\"Android\"]")).click();Thread.sleep(2000);webDriver.findElement(By.xpath("//span[text()=\"Windows\"]")).click();Thread.sleep(2000);//根据同级父元素去定位元素webDriver.findElement(By.xpath("//span[text()=\"Android\"]/preceding-sibling::span/input"));Thread.sleep(2000);webDriver.quit();}
}

多选框CheckBox定位:

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;public class Practice_web {@Testpublic void getCheckBoxElement() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://iviewui.com/view-ui-plus/component/form/checkbox");//通过文本包含去定位到某个元素webDriver.findElement(By.xpath("//span[text()=\"香蕉\"]")).click();Thread.sleep(2000);webDriver.findElement(By.xpath("//span[text()=\"苹果\"]")).click();Thread.sleep(2000);webDriver.findElement(By.xpath("//span[text()=\"西瓜\"]")).click();Thread.sleep(2000);//先找到文本为"苹果"的span元素的前一个同级元素,然后再找到其下的input元素进行点击webDriver.findElement(By.xpath("//span[text()=\"苹果\"]/preceding-sibling::span/input")).click();webDriver.quit();}
}

Select下拉框定位:

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;import java.util.List;public class Practice_web {@Testpublic void getSelectElement() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/selectTest.htm");//通过select下拉表单的id属性选择其下拉表单第三个属性值Select select = new Select(webDriver.findElement(By.id("s1")));select.selectByIndex(3);//根据下拉表框里面的value值进行选择select.selectByValue("51");//根据下拉表框的text值进行选择select.selectByVisibleText("Fax");Thread.sleep(2000);webDriver.quit();}
}

但是类似于下述这种,它直接使用的框架,他并不是真正的下拉框,那么此时我们就不能使用Select方法进行选择

在这里插入图片描述

级联选择器:

先选择某个再选择另一个,类似于下面这种,要先通过选择器选择一个,才能去选择下一个

在这里插入图片描述

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;import java.util.List;public class Practice_web {@Testpublic void getCascader() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://iviewui.com/view-ui-plus/component/form/cascader");//通过select下拉表单的id属性选择其下拉表单第三个属性值//首先通过class属性找到我们的级联选择器webDriver.findElement(By.xpath("//input[@class=\"ivu-input ivu-input-default\"]")).click();Thread.sleep(1000);//再点击北京webDriver.findElement(By.xpath("//li[contains(text(),\"北京\")]")).click();Thread.sleep(1000);//随后点击王府井webDriver.findElement(By.xpath("//li[contains(text(),\"王府井\")]")).click();Thread.sleep(2000);webDriver.quit();}
}

注意:Select我们导入的是selenium包下的,不要导错了

时间选择器:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;import java.util.List;public class On_Date {public static void main(String[] args) throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://iviewui.com/view-ui-plus/component/form/time-picker");//在时间的选择框输入2023-7-18webDriver.findElement(By.xpath("//input[@class=\"ivu-input ivu-input-default ivu-input-with-suffix\"]")).sendKeys("2023-7-18");List<WebElement> webElements=webDriver.findElements(By.xpath("//input[@class=\"ivu-input ivu-input-default ivu-input-with-suffix\"]"));//对于第二个选择器直接输入一个区间预期值webElements.get(1).sendKeys("2023-10-1-2024-10-2");Thread.sleep(2000);webDriver.quit();}
}

三种弹框:(Alert,confirm,prompt)

Alert:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class On_Alert {public static void main(String[] args) throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/alertTest.htm");webDriver.findElement(By.name("b1")).click();//获取弹框的文字System.out.println(webDriver.switchTo().alert().getText());Thread.sleep(1000);//点击alert弹框的确定按钮webDriver.switchTo().alert().accept();Thread.sleep(2000);webDriver.quit();}
}

Confirm:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class On_Confirm {public static void main(String[] args) throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/confirmTest.htm");webDriver.findElement(By.name("b1")).click();//获取弹框的文字System.out.println(webDriver.switchTo().alert().getText());Thread.sleep(1000);//点击弹框中的确定按钮webDriver.switchTo().alert().accept();//点击弹框中的取消按钮webDriver.switchTo().alert().dismiss();Thread.sleep(2000);webDriver.quit();}
}

Prompt:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class On_Prompt {public static void main(String[] args) throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/promptTest.htm");webDriver.findElement(By.name("b1")).click();//将"测试alert"最终输入到弹框或者不输入到弹框,取决于我们最后调用的事accept还是dismisswebDriver.switchTo().alert().sendKeys("测试alert");Thread.sleep(1000);//将弹框中的文字输入到文字框webDriver.switchTo().alert().accept();//将弹框中的文字不输入到文字框webDriver.switchTo().alert().dismiss();Thread.sleep(2000);webDriver.quit();}
}

upload:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class On_UploadFile {public static void main(String[] args) throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/php/fileUpload.htm");//获取input文件上传元素WebElement upload = webDriver.findElement(By.id("file"));//将我们选择的图片的文件名输出到浏览器,表示我们选择当前这个图片//如果当前的文件不在我们当前项目路径下,就会报错upload.sendKeys("D:\\Xmind+博客项目\\aliyun\\src\\main\\resources\\public\\logo.jpg");//将logo.jpg提交webDriver.findElement(By.name("submit")).click();Thread.sleep(1000);webDriver.quit();}
}

iframe:

frame是网页开发中常见应用。例如页面布局、局部刷新,页面分割,都是frame的用途表现,使用frame会给用户带来非常舒适的使用感受frame包括(frameset标签、frame标签、iframe标签)frameset和frame结合一起使用,可以对页面进行分割。例如sahitest的Frames Test。对页面进行上下切割,并嵌套html页面iframe 是个内联框架,是在页面里生成个内部框架。可以嵌套多个html页面。大多网页使用的是iframe框架。比如163邮箱。

在这里插入图片描述

iframe.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Home</title>
</head>
<body>
<h2>IFRAME Tests</h2>
<input type="text" id="checkRecord" value="verify me"/><br/>
<input type="button" value="Click me" onclick="document.getElementById('checkRecord').value='1111'"/><br/>
<br/>
<iframe id="iframe_id" name="iframe_name" src="https://www.bilibili.com/" height="300px" style="float:left;margin:20px;">
</iframe>
</body>
</html>
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class On_iframe {@Testpublic void getIndex_frame() throws InterruptedException {WebDriver webDriver=new ChromeDriver();webDriver.get("http://sahitest.com/demo/iframesTest.htm");//首先会清空id值为checkRecord中的内容webDriver.findElement(By.id("checkRecord")).clear();//在文本框中输入666webDriver.findElement(By.id("checkRecord")).sendKeys("666");//之所以需要将这里暂停一秒钟是因为,我们只有等待网页中的所有iframe加载完毕之后才可以进行后续操作Thread.sleep(1000);//它这里之所以会报错是因为我们需要进入iframe,我们可通过给frame中传递参数从而指定要访问第几个iframe//点击该网页第二个iframe框中的超链接webDriver.switchTo().frame(1);webDriver.findElement(By.cssSelector("a[href=\"showModal.htm\"]")).click();Thread.sleep(2000);webDriver.quit();}@Testpublic void getNameAndID_frame() throws InterruptedException {WebDriver webDriver=new ChromeDriver();//首先加载本地的html文件webDriver.get("这里需要更换为你的html文件的存放路径");webDriver.findElement(By.id("checkRecord")).clear();webDriver.findElement(By.id("checkRecord")).sendKeys("666");//通过iframe中的id对其进行操作webDriver.switchTo().frame("iframe_id");//通过iframe中的name对其进行操作webDriver.switchTo().frame("iframe_name");webDriver.findElement(By.xpath("//span[text()=\"番剧\"]")).click();Thread.sleep(2000);webDriver.quit();}@Testpublic void getElement_frame() throws InterruptedException {WebDriver webDriver=new ChromeDriver();//首先加载本地的html文件webDriver.get("http://sahitest.com/demo/iframesTest.htm");webDriver.findElement(By.id("checkRecord")).clear();webDriver.findElement(By.id("checkRecord")).sendKeys("666");//通过css样式定位到某个iframeWebElement element=webDriver.findElement(By.cssSelector("body>iframe"));webDriver.switchTo().frame(element);//点击id为open_self的元素webDriver.findElement(By.id("open-self")).click();Thread.sleep(2000);webDriver.quit();}
}
@Testpublic void exit_iframe() throws InterruptedException {WebDriver webDriver=new ChromeDriver();//首先加载本地的html文件webDriver.get("http://sahitest.com/demo/iframesTest.htm");webDriver.findElement(By.id("checkRecord")).clear();webDriver.findElement(By.id("checkRecord")).sendKeys("666");//通过css样式定位到某个iframeWebElement element=webDriver.findElement(By.cssSelector("body>iframe"));webDriver.switchTo().frame(element);//退出iframewebDriver.switchTo().parentFrame();//切换到主界面webDriver.switchTo().defaultContent();//由于我们已经进入到iframe里面,所以我们如果不先退出iframe,就找不到下面的点击按钮webDriver.findElement(By.id("checkRecord")).clear();webDriver.findElement(By.id("checkRecord")).sendKeys("777");Thread.sleep(2000);webDriver.quit();}

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

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

相关文章

FastAPI教程III

本文参考FastAPI教程https://fastapi.tiangolo.com/zh/tutorial 这部分暂无需求的没有记录&#xff0c;仅放置标题。 依赖项 安全性 中间件 你可以向FastAPI应用添加中间件。 ”中间件“是一个函数&#xff0c;它在每个请求被特定的路径操作处理之前&#xff0c;以及在每个…

PyCharm 2024.1 版本更新亮点:智能编程,高效协作

目录 1. 前言2. 更新内容2.1 智能编码体验2.1.1 Hugging Face 文档预览2.1.2 全行代码补全 2.2 提升编辑器体验2.2.1 粘性行功能2.2.2 编辑器内代码审查 2.3 全新终端体验&#xff08;测试版&#xff09;2.3.1 新终端 Beta 2.4 智能助手&#xff08;特定版本和专业用户&#xf…

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命&#xff1a;一站式解决策略&#xff01;短视频矩阵系统是一款专为企业营销设计的高效工具&#xff0c;旨在通过整合和优化众多短视频平台资源&#xff0c;为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…

小白学webgl合集-WebGL中给图片添加背景

一.实现效果 二.逻辑 为了在WebGL中给图片添加背景&#xff0c;主要的逻辑步骤包括初始化WebGL上下文、编写和编译着色器、创建和绑定缓冲区、加载和配置纹理以及绘制场景。以下是代码逻辑的详细说明&#xff1a; 1. 获取WebGL上下文 首先&#xff0c;通过获取<canvas>…

WEB与低代码:B/S架构在开发中的应用与优势

在互联网迅猛发展的今天&#xff0c;WEB应用已经成为人们日常生活和工作中不可或缺的一部分。随着技术的进步和需求的多样化&#xff0c;开发高效、灵活且易于维护的WEB应用变得尤为重要。B/S架构&#xff08;Browser/Server Architecture&#xff09;作为一种常见的WEB应用架构…

天天生鲜数据库设计

目录 1、用户表2、商品表SKU和SPU的概念区分3、商品表改进4、redis实现购物车模块&#xff0c;redis保存用户最近浏览记录5、订单表 设计表时&#xff0c;出现一对多的情况&#xff0c;可以将对应的“多”单独拿出来重新设计一个表 1、用户表 &#xff08;灰色的部分不存在表…

MySQL之如何处理超大分页

如何处理MySQL超发分页&#xff1f; 可以使用覆盖索引解决 【点击进入】 MySQL超大分页处理 在数据量较大时&#xff0c;如果使用limit分页查询&#xff0c;在查询时&#xff0c;越往后&#xff0c;分页查询效率会越低。 示例&#xff1a; select * from user limit 900000…

仓库管理系统带万字文档基于spingboot vue的前后端分离仓库管理系统java项目java课程设计java毕业设计

文章目录 仓库管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档&#xff08;9.9&#xffe5;带走&#xff09; 仓库管理系统 一、项目演示 仓库管理系统 二、项目介绍 基于spingboot和vue的前后端分离仓库管…

华测视频RTK,AR实景导航

华测导航视频测量RTK技术,通过融合卫星导航、惯导与视频摄影测量算法,让“所见即所测”成为现实,让测量工作变得更加智能、高效。 视频测量RTK:智能测绘的新里程碑 华测RTK的性能和广泛应用,在市场中获得了用户的认可,平均每10位用户中即有6位推荐。其视频测量功能通过引入自动…

如何用GPT开发一个基于 GPT 的应用?

原文发自博客&#xff1a;GPT应用开发小记 如何开发一个基于 GPT 的应用&#xff1f;答案就在问题里&#xff0c;那就是用 GPT 来开发基于 GPT 的应用。本文以笔者的一个开源项目 myGPTReader 为例&#xff0c;分享我是如何基于 GPT 去开发这个系统的&#xff0c;这个系统的功能…

【Django】网上蛋糕项目商城-关键字搜索,商品详情功能

概念 上文中已经实现热销和新品的商品列表功能&#xff0c;本文篇幅中实现关键字搜索商品&#xff0c;将商品加入购物车&#xff0c;以及查看商品的详情信息等功能 关键字搜索实现步骤 在head.html头部页面中&#xff0c;鼠标移动至搜索图标会显示隐藏的搜索框进行输入关键信…

吉利银河L6(官方小订送的3M) 对比 威固vk70+ks15

吉利送的号称价值2000的3M效果 撕膜重贴 威固vk70ks15 之后的效果 // 忘记测反射的热量了 可以验证金属膜是反射热而不是吸热 金属膜 手机GPS还能用吗 亲测 能用 太阳能总阻隔率 3M貌似20%出头 威固前档55% 侧后挡高一点不超过60% 夏天真实太阳发热能量 即阻隔率55%到60% …

使用Visual Studio Code记笔记

因为学习需要&#xff0c;记笔记是很有必要的&#xff0c;平常发CSDN&#xff08;都让CSDN是很棒的哈&#xff09;&#xff0c;后来使用VS Code的时候发现了很多插件&#xff0c;觉得做笔记还是相对不错的&#xff0c;主要用到的还是Markdown 主要设计的插件包括&#xff1a; …

PL/SQL入门到实践

一、什么是PL/SQL PL/SQL是Procedural Language/Structured Query Language的缩写。PL/SQL是一种过程化编程语言&#xff0c;运行于服务器端的编程语言。PL/SQL是对SQL语言的扩展。PL/SQL结合了SQL语句和过程性编程语言的特性&#xff0c;可以用于编写存储过程、触发器、函数等…

Hallo:分级音频驱动视觉合成肖像动画

团队&#xff1a;百度&#xff08;王井东大佬&#xff09;&#xff0c;复旦&#xff0c;瑞士ETH&#xff0c;南大 文章目录 概要介绍相关工作整体架构流程技术名词解释层次音频驱动的视觉合成训练和推理训练实验设置讨论社会风险和缓解措施小结 概要 肖像图像动画领域&#x…

如何修改PDF文档的作者名称?

要修改一个 PDF 文档的作者名称&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **使用 Adobe Acrobat**&#xff08;如果有&#xff09;&#xff1a; - Adobe Acrobat 是一个功能强大的 PDF 编辑工具&#xff0c;支持修改文档属性信息&#xff0c;包括作者名称。打开…

一个用于自动复制文本的小工具:Auto_Copy

自动复制工具 这是一个在 Windows 上用于自动复制选中文本到剪贴板的小工具。该工具还允许通过右键单击粘贴剪贴板内容。 灵感来源: 在使用Mobaxterm时,我注意到其软件中具备选中即自动复制和右键直接粘贴的功能。但是,这种选中自动复制的功能仅在软件内部有效。由于这一功能…

什么是无头浏览器?

简而言之&#xff0c;无头浏览器是没有图形用户界面 &#xff08;GUI&#xff09; 的 Web 浏览器。GUI 包括用户与之交互的数字元素&#xff0c;例如按钮、图标和窗口。但是&#xff0c;关于无头浏览器&#xff0c;您需要了解的还有很多。 在本文中&#xff0c;您将了解什么是…

Go语言环境安装 第一个Go程序

Go下载地址 哪个能用用哪个。 https://go.dev/ https://golang.google.cn/&#xff08;Golang官网的官方镜像&#xff09; Windows 使用.msi安装包安装 下载msi文件 安装 双击运行go1.22.4.windows-amd64.msi Next 勾选I accept the terms in the License Agreement&…

Webpack: 持久化缓存大幅提升构建性能

概述 缓存是一种应用非常广泛性能优化技术&#xff0c;在计算机领域几乎无处不在&#xff0c;例如&#xff1a;操作系统层面 CPU 高速缓存、磁盘缓存&#xff0c;网路世界中的 DNS 缓存、HTTP 缓存&#xff0c;以及业务应用中的数据库缓存、分布式缓存等等。 那自然而然的&am…