selenium语法进阶+常用API

news2024/12/25 10:35:20

目录

浏览器操作

浏览器回退,前进 与刷新

浏览器窗口设置大小 

浏览器设置宽高 

浏览器窗口最大化 

浏览器控制滚动条 

信息打印 

打印页面的标题和当前页面的URL

定位一组元素 

鼠标和键盘事件 

键盘 

鼠标 

下拉框操作 

通过索引定位(selectByIndex(索引值(从0开始)))

通过value属性定位(selectByValue)

通过文本内容定位(selectByVisibleText)

文件上传 

多级框架/窗口定位 (switchTo())

弹窗 

警告弹窗与确认弹窗

提示弹窗 

截图 

关闭页面(quit和close)


浏览器操作

浏览器回退,前进 与刷新

浏览器的回退指的是从当前页面退回上一个页面,如下图:

这里要注意页面和新建标签页的区别。

这里比如说我们打开百度搜索,然后搜索软件测试后进行回退:

    private static void test02() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
       WebElement element= webDriver.findElement(By.cssSelector("#kw"));
       element.sendKeys("软件测试");
       Thread.sleep(3000);
       webDriver.navigate().back();
       
    }

回退的时候需要使用驱动提供的navigate中的back方法,当然,如果想要回到回退前的页面则可以使用navigate下的forward方法:

    private static void test02() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
       WebElement element= webDriver.findElement(By.cssSelector("#kw"));
       element.sendKeys("软件测试");
       Thread.sleep(3000);
       webDriver.navigate().back();
        Thread.sleep(3000);
       webDriver.navigate().forward();

    }

当然,如果想刷新页面的话可以使用navigate下的refresh方法:

    private static void test02() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        WebElement element= webDriver.findElement(By.cssSelector("#kw"));
        element.sendKeys("软件测试");
        Thread.sleep(3000);
        webDriver.navigate().back();
        Thread.sleep(3000);
        webDriver.navigate().forward();
        Thread.sleep(3000);
        webDriver.navigate().refresh();
       

    }

浏览器窗口设置大小 

浏览器窗口可以设置大小,可以设置窗口的宽,高,也可以使得窗口最大化

浏览器设置宽高 

如点击百度搜索页面的新闻按钮后的窗口设置宽高 

webDriver.manage().window().setSize(new Dimension(200,500));

同时也可以最大化

浏览器窗口最大化 

 webDriver.manage().window().maximize();

 

浏览器控制滚动条 

浏览器滚动条的控制需要依靠js脚本才能实现 

如在前端页面中输入:

document.documentElement.scrollTop=9999

滚动条就会往下移动。那么我们在idea中如何实现:

((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=19999");

 

信息打印 

打印页面的标题和当前页面的URL

 获取百度搜索页面的标题:

 String title= webDriver.getTitle();

获取百度搜索页面的URL: 

String url=webDriver.getCurrentUrl();
    private static void test05() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        //获取当前页面的标题
       String title= webDriver.getTitle();
       //获取当前页面的URL
        String url=webDriver.getCurrentUrl();
        System.out.println("当前页面的标题为"+title);
        System.out.println("当前页面的url为"+url);
    }

定位一组元素 

定位一组元素,就比如一些选项,他有几种标签类型,我们需要选中所有input的标签中type值为context的选项:

    private static void test06() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("你要打开的页面");
        //获取所有的input标签
        List<WebElement> elements= webDriver.findElements(By.cssSelector("input"));
        //选中符合type的值为context的选项
        for (int i = 0; i <elements.size() ; i++) {
            if(elements.get(i).getAttribute("type").equals("context")){
                elements.get(i).click();
            }else {
                ;//什么也不干
            }

        }
    }

鼠标和键盘事件 

键盘 

比如我们在百度搜索框中输入软件测试后进行搜索,然后使用Ctrl+A选中搜索框中的软件测试,进行Ctrl+X,然后再Ctrl+V进行复制搜索

   private static void test07() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        //搜索软件测试
        //WebElement element=webDriver.findElement(By.cssSelector("#kw"));
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        sleep(3000);
        //webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
        //选中搜索框+ctrl+A
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");
        sleep(3000);
        //webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
        //ctrl+x
       webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");
        sleep(3000);
        //webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
        //ctrl+v
        webDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"V");
        //webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);
       sleep(3000);
    }

使用键盘输入使用的是sendKeys中的参数keys调用相关的按键(如SHIFT,CONTROL等等)+对应的按键(需要用双引号)  

鼠标 

比如我们在搜索软件测试后在图片处进行右击:


    private static void test08() throws InterruptedException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //将鼠标移动到图片位置进行右击
     WebElement element=  webDriver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-pic_p4Uej.s-tab-pic"));
        //借助Actions
        Actions actions=new Actions(webDriver);
        //进行右击并展示
        actions.moveToElement(element).contextClick().perform();
    }

使用鼠标进行点击的时候需要借助Actions对象,使用时候使用perform来展示出效果。

常用的鼠标操作还有:

 

下拉框操作 

下拉框的操作需要借助Select的对象进行操作

通过索引定位(selectByIndex(索引值(从0开始)))

    private static void test09() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
        WebElement element=webDriver.findElement(By.cssSelector("下拉框的css标志位"));
        //借助Select对象
        Select select=new Select(element);
        select.selectByIndex(0);
    }

通过value属性定位(selectByValue)

 

    private static void test09() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
        WebElement element=webDriver.findElement(By.cssSelector("下拉框的css标志位"));
        //借助Select对象
        Select select=new Select(element);
        //select.selectByIndex(0);
        select.selectByValue("下拉框的value属性对应的值");
    }

通过文本内容定位(selectByVisibleText)

 

    private static void test09() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
        WebElement element=webDriver.findElement(By.cssSelector("下拉框的css标志位"));
        //借助Select对象
        Select select=new Select(element);
        //select.selectByIndex(0);
        //select.selectByValue("下拉框的value属性对应的值");
        select.selectByVisibleText("C");
    }

文件上传 

文件上传就是选择文件上传的按钮的文章,使用sendKeys将文件所在的路径导入进行上传文件

    private static void test10() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
        WebElement element=webDriver.findElement(By.cssSelector("文件上传框的css标志位"));
        element.sendKeys("文件路径,如E://xxx.xxx");
    }

多级框架/窗口定位 (switchTo())

由于我们直接使用选择器进行定位是在div下进行的,对于一些在frame下的标签我们是无法获得定位的,所以就要用到了多级框架和窗口定位, 对于frame使用:

    private static void test11() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
        webDriver.switchTo().frame("frame的id");
        //找到标志所在的frame之后就可以正常使用了
        webDriver.findElement(By.cssSelector("选中元素的css标志位")).click();
    }

多级窗口定位与框架相似,使用 switchTo().window。

弹窗 

警告弹窗与确认弹窗

需要使用Alert对象,dismiss为取消,accept为确认

    private static void test12() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
       Alert alert= webDriver.switchTo().alert();
       //取消弹窗
        alert.dismiss();
        //确认弹窗
        alert.accept();
        //提示弹窗中输入内容
        alert.sendKeys("输入的内容");
        //进行确认
        alert.accept();
    }

提示弹窗 

需要我们输入内容后点击确认:

    private static void test12() {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("需要访问的网址");
       Alert alert= webDriver.switchTo().alert();
       //取消弹窗
        alert.dismiss();
        //确认弹窗
        alert.accept();
        //提示弹窗中输入内容
        alert.sendKeys("输入的内容");
        //进行确认
        alert.accept();
    }

截图 

对于测试的结果,我们有的需要使用截图来进行查看,使用自动化截图首先要在maven仓库中使用相关的依赖,在maven仓库搜索common-io

 

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

导入到pom.xml中

 在百度搜索软件测试并进行截图保存:


    private static void test13() throws InterruptedException, IOException {
        WebDriver webDriver=new ChromeDriver();
        webDriver.get("https://www.baidu.com/");
        webDriver.findElement(By.cssSelector("#kw")).sendKeys("软件测试");
        webDriver.findElement(By.cssSelector("#su")).click();
        sleep(3000);
        //对搜索结果进行截图
       File file=((TakesScreenshot)(webDriver)).getScreenshotAs(OutputType.FILE);
       //将文件放到硬盘
        FileUtils.copyFile(file,new File("C:\\Users\\ht\\2023-0816jietu.png"));

    }

截图完成。

关闭页面(quit和close)

对于测试后关闭页面使用driver.quit和driver.close

quit和close是有区别的,quit关闭页面后会清除掉缓存,而close则不清除缓存

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

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

相关文章

Vue-8.集成(.editorconfig、.eslintrc.js、.prettierrc)

介绍 同时使用 .editorconfig、.prettierrc 和 .eslintrc.js 是很常见的做法&#xff0c;因为它们可以在不同层面上帮助确保代码的格式一致性和质量。这种组合可以在开发过程中提供全面的代码维护和质量保证。然而&#xff0c;这也可能增加一些复杂性&#xff0c;需要谨慎配置…

详细记录在迅为iMX6开发板中运行可执行文件

本文主要为了记录通过在虚拟机Ubuntu系统编译生成的可执行文件canitf如何运行在迅为的iMX6开发板上&#xff0c;中间涉及到的一些操作相对来说比较固定&#xff0c;因此可以整理成参考步骤以便之后使用时来依照执行。 一、生成可执行文件 首先在Ubuntu系统对应目录终端运行如…

7-11 到底是不是太胖了

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材&#xff08;即 | 真实体重 − 标准体重 | < 标…

【深入了解PyTorch】PyTorch模型解释性和可解释性:探索决策过程与预测结果的奥秘

【深入了解PyTorch】PyTorch模型解释性和可解释性:探索决策过程与预测结果的奥秘 PyTorch模型解释性和可解释性:探索决策过程与预测结果的奥秘1. 引言2. 梯度可视化3. 特征重要性分析4. 结论PyTorch模型解释性和可解释性:探索决策过程与预测结果的奥秘 在机器学习和深度学习…

哈夫曼树(赫夫曼树、最优树)详解

目录 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 什么是哈夫曼树 构建哈夫曼树的过程 哈弗曼树中结点结构 构建哈弗曼树的算法实现 哈夫曼树&#xff08;赫夫曼树、最优树&#xff09;详解 哈夫曼树相关的几个名词 路径&#xff1a;…

“西游记“中的项目管理:如何驾驭你的“取经之路”

​1.​引言 自古以来&#xff0c;文学作品不仅仅是为了娱乐&#xff0c;它们也为我们提供了生活的智慧和经验。中国的古典文学巨著《西游记》便是其中的佼佼者&#xff0c;其中的故事和角色为我们提供了丰富的人生哲理和管理智慧。但你可能会问&#xff0c;一个古老的神话故事…

Windows11 Docker Desktop 启动 -wsl kernel version too low

系统环境&#xff1a;windows11 1&#xff1a;docker下载 Docker: Accelerated Container Application Development 下载后双击安装即可 安装后启动Docker提示&#xff1a;Docker Desktop -wsl kernel version too low 处理起来也是非常方便 1:管理员身份启动&#xff1a;…

Python 处理 Excel 表格的 14 个常用操作

目录 1. 安装依赖库 2. 导入库 3. 读取Excel文件 4. 写入Excel文件 5. 创建工作表 6. 访问工作表 7. 读取单元格数据 8. 写入单元格数据 9. 获取行数和列数 10. 过滤数据 11. 排序数据 12. 添加新行 13. 删除行或列 14. 计算汇总统计 总结 无论是数据分析师、财…

CoordAtt注意力网络结构

源码&#xff1a; import torch import torch.nn as nn import math import torch.nn.functional as Fclass h_sigmoid(nn.Module):def __init__(self, inplaceTrue):super(h_sigmoid, self).__init__()self.relu nn.ReLU6(inplaceinplace)def forward(self, x):return self.…

杂记 | 记录一次使用docker安装gitlab-runner的过程(馋哭了)

文章目录 01 前情提要02 编写docker-compose.yml03 启动与注册04 流水线部署 01 前情提要 前不久使用docker部署好了自己的gitlab服务&#xff0c;简直香惨了。 上集传送门&#xff1a;记录一次使用Docker安装gitlab-ce的过程&#xff08;含配置交换内存&#xff09; 现在&am…

postgresql的在windows下的安装

postgresql的在windows下的安装 下载安装步骤超级用户设置密码本地化设置安装信息安装完成 查看postgresql服务pgAdmin的使用打开命令 行工具查询数据库版本 创建数据库 下载 官网地址 https://www.postgresql.org/ 下载页面 https://www.postgresql.org/download/ windows下…

Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理

大家都知道&#xff0c;AOP 底层是动态代理&#xff0c;而 Java 中的动态代理有两种实现方式&#xff1a; 基于 JDK 的动态代理 基于 Cglib 的动态代理 这两者最大的区别在于基于 JDK 的动态代理需要被代理的对象有接口&#xff0c;而基于 Cglib 的动态代理并不需要被代理对…

TiDB数据库从入门到精通系列之六:使用 TiCDC 将 TiDB 的数据同步到 Apache Kafka

TiDB数据库从入门到精通系列之六&#xff1a;使用 TiCDC 将 TiDB 的数据同步到 Apache Kafka 一、技术流程二、搭建环境三、创建Kafka changefeed四、写入数据以产生变更日志五、配置 Flink 消费 Kafka 数据 一、技术流程 快速搭建 TiCDC 集群、Kafka 集群和 Flink 集群创建 c…

离谱的Bug

离谱的 Bug Bug 情况发现 Bug修改 Bug其他感受历史 Bug火星Spirit号Mars Global Surveyor任务 Bug 情况 有一次&#xff0c;我在开发一个网页应用程序时&#xff0c;遇到了一个令人目瞪口呆的Bug。这个Bug出现在一个特定的页面上&#xff0c;当用户点击某个按钮时&#xff0c;…

07微服务的事务管理机制

一句话导读 在单体应用程序中&#xff0c;事务通常是在单个数据库或单个操作系统中管理的&#xff0c;而在微服务架构中&#xff0c;事务需要跨越多个服务和数据库&#xff0c;这就使得事务管理变得更加复杂和困难。 目录 一句话导读 一、微服务事务管理的定义和意义 二、微…

ORCA优化器浅析——CDXLScalar Base class for representing scalar DXL operators

CDXLScalar类作为Base class for representing scalar DXL operators&#xff0c;该类只是定义一些接口&#xff0c;其中实现了GetDXLOperatorType函数&#xff0c;其返回EdxloptypeScalar&#xff0c;代表scalar DXL operators。 class CDXLScalar : public CDXLOperator{ pr…

迅捷视频工具箱:多功能音视频处理软件

这是一款以视频剪辑、视频转换、屏幕录像等特色功能为主&#xff0c;同时附带有视频压缩、视频分割、视频合并等常用视频处理功能为主的视频编辑软件。该软件操作简单易用&#xff0c;即使没有视频处理经验的用户也可以轻松上手。将视频添加到工具箱对应功能后&#xff0c;简单…

01- vdom 和模板编译源码

组件渲染的过程 template --> ast --> render --> vDom --> 真实的Dom --> 页面 Runtime-Compiler和Runtime-Only的区别 - 简书 编译步骤 模板编译是Vue中比较核心的一部分。关于 Vue 编译原理这块的整体逻辑主要分三个部分&#xff0c;也可以说是分三步&am…

sklearn机器学习库(二)sklearn中的随机森林

sklearn机器学习库(二)sklearn中的随机森林 集成算法会考虑多个评估器的建模结果&#xff0c;汇总之后得到一个综合的结果&#xff0c;以此来获取比单个模型更好的回归或分类表现。 多个模型集成成为的模型叫做集成评估器&#xff08;ensemble estimator&#xff09;&#xf…

RabbitMq-1基础概念

RabbitMq-----分布式中的一种通信手段 1. MQ的基本概念&#xff08;message queue,消息队列&#xff09; mq:消息队列&#xff0c;存储消息的中间件 分布式系统通信的两种方式&#xff1a;直接远程调用&#xff0c;借助第三方完成间接通信 消息的发送方是生产者&#xff0c…