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

news2024/11/24 8:45:57

单选框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 {
    @Test
    public 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 {
    @Test
    public 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 {
    @Test
    public 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 {
    @Test
    public 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-18
        webDriver.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还是dismiss
        webDriver.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 {
    @Test
    public 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();
        //在文本框中输入666
        webDriver.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();
    }
    @Test
    public 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();
    }

    @Test
    public 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样式定位到某个iframe
        WebElement 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();
    }
}
@Test
    public 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样式定位到某个iframe
        WebElement element=webDriver.findElement(By.cssSelector("body>iframe"));
        webDriver.switchTo().frame(element);
        //退出iframe
        webDriver.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.coloradmin.cn/o/1879324.html

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

相关文章

基于python和opencv实现边缘检测程序

引言 图像处理是计算机视觉中的一个重要领域&#xff0c;它在许多应用中扮演着关键角色&#xff0c;如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一&#xff0c;它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

intellij idea安装R包ggplot2报错问题求解

1、intellij idea安装R包ggplot2问题 在我上次解决图形显示问题后&#xff0c;发现安装ggplot2包时出现了问题&#xff0c;这在之前高版本中并没有出现问题&#xff0c; install.packages(ggplot2) ERROR: lazy loading failed for package lifecycle * removing C:/Users/V…

Android 10.0 关于定制自适应AdaptiveIconDrawable类型的动态时钟图标的功能实现系列二(拖动到文件夹部分功能实现)

1.前言 在10.0的系统rom定制化开发中,在关于定制动态时钟图标中,原系统是不支持动态时钟图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态时钟 图标的背景图形也跟着改变,本篇实现在拖…

HBuilder X 小白日记02-布局和网页背景颜色

html&#xff1a; 例子1&#xff1a; 整个&#xff1a; css案例&#xff1a; 1.首先右键&#xff0c;创建css文件 2.在html文件的头部分&#xff0c;引用css&#xff0c;快捷方式&#xff1a;linkTab键 <link rel"stylesheet" href" "> 3.先在css…

操作系统精选题(二)(综合模拟题一)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;操作系统 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 前言 简答题 一、进程由计算和IO操作组…

论文阅读之旋转目标检测ARC:《Adaptive Rotated Convolution for Rotated Object Detection》

论文link&#xff1a;link code&#xff1a;code ARC是一个改进的backbone&#xff0c;相比于ResNet&#xff0c;最后的几层有一些改变。 Introduction ARC自适应地旋转以调整每个输入的条件参数&#xff0c;其中旋转角度由路由函数以数据相关的方式预测。此外&#xff0c;还采…

【Unity】Timeline的倒播和修改速度(无需协程)

unity timeline倒播 一、核心&#xff1a; 通过playableDirector.playableGraph.GetRootPlayable(i).SetSpeed(speed)接口&#xff0c;设置PlayableDirector的速度。 二、playableGraph报空 若playableDirector不勾选Play On Awake&#xff0c;则默认没有PlayableGraph&…

Redis基础教程(三):redis命令

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

oj E : 投资项目的方案

Description 有n种基础的投资项目&#xff0c;每一种的单位收益率为profitn&#xff0c;存在m种投资组合&#xff0c;限制每一种的投资总额不能超过invest_summ 每种投资组合中项目所需的单位投入是不同的&#xff0c;为costmn 求&#xff1a;使得收益率之和最高的每种项目投…

Meven

目录 1.简介2.Maven项目目录结构2.1 约定目录结构的意义2.2 约定大于配置 3. POM.XML介绍3.2 依赖引用3.3 属性管理 4 Maven生命周期4.1 经常遇到的生命周期4.1 全部生命周期 5.依赖范围&#xff08;Scope&#xff09;6. 依赖传递6.1 依赖冲突6.2 解决依赖冲突6.2.1 最近依赖者…

1、线性回归模型

1、主要解决问题类型 1.1 预测分析(Prediction) 线性回归可以用来预测一个变量(通常称为因变量或响应变量)的值,基于一个或多个输入变量(自变量或预测变量)。例如,根据房屋的面积、位置等因素预测房价。 1.2 异常检测(Outlier Detection) 线性回归可以帮助识别数…

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定…

量产工具一一显示系统(一)

目录 前言 一、项目介绍和应用 1.简单易用 2.软件可配置、易扩展 3.纯 C 语言编程 4.类似界面应用 二、项目总体框架 三、显示系统 1.显示系统数据结构抽象 &#xff08;1&#xff09;common.h &#xff08;2&#xff09;disp_manager.h 2.Framebuffer编程 &#x…

Conformal Prediction

1 A Gentle Introduction to Conformal Prediction and Distribution-Free Uncertainty Quantification 2 Language Models with Conformal Factuality Guarantees

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子

grpc学习golang版( 一、基本概念与安装 )

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 第七章 客户端流式传输 第八章 双向流示例 文章目录 一、基本介绍1.1 什么是rpc1.2 什么是grpc1.3 grpc的作用1.4 grp…

Django之邮箱注册

目录 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 二、封装工具类 三、发送邮件接口开发 四、用户调用发送邮件接口 4.1、Fetch API 4.1.1、GET请求 4.1.2、POST请求 五、完成注册功能 一、邮箱验证-环境搭建 1.1、注册流程 1.2、环境搭建 创建项目 django-a…

4 快速傅里叶变换(fast Fourier transform,FFT)

目录 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 抽样算法 DFT与FFT运算次数公式 基2FFT的基本原理&#xff0c;蝶形运算符 第L级旋转因子的计算公式 4点与8点鲽形图 确定输入x(n)的顺序 倒序算法 1…

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范

Java开发-实际工作经验和技巧-0003-容易被忽视的Git提交代码规范 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

C# Benchmark

创建控制台项目&#xff08;或修改现有项目的Main方法代码&#xff09;&#xff0c;Nget导入Benchmark0.13.12&#xff0c;创建测试类&#xff1a; public class StringBenchMark{int[] numbers;public StringBenchMark() {numbers Enumerable.Range(1, 20000).ToArray();}[Be…