selenium语法进阶+常用API

目录

浏览器操作

浏览器回退,前进 与刷新

浏览器窗口设置大小 

浏览器设置宽高 

浏览器窗口最大化 

浏览器控制滚动条 

信息打印 

打印页面的标题和当前页面的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();//获取当前页面的URLString 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+AwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"A");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+xwebDriver.findElement(By.cssSelector("#kw")).sendKeys(Keys.CONTROL,"X");sleep(3000);//webDriver.manage().timeouts().implicitlyWait(1, TimeUnit.DAYS);//ctrl+vwebDriver.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"));//借助ActionsActions 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.hqwc.cn/news/69393.html

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

相关文章

NPM与外部服务的集成(下)

目录 1、撤消访问令牌 2、在CI/CD工作流中使用私有包 2.1 创建新的访问令牌 持续整合 持续部署 交互式工作流 CIDR白名单 2.2 将令牌设置为CI/CD服务器上的环境变量 2.3 创建并签入特定于项目的.npmrc文件 2.4 令牌安全 3、Docker和私有模块 3.1 背景&#xff1a;运…

PyQt5编写可视化程序GB/T 34986-2017 产品加速试验方法(B 5.5 湿度试验)

GB/T 34986-2017 产品加速试验方法&#xff08;B 5.5 湿度试验&#xff09; 阿伦纽斯模型-温度&#xff08;Arrhenius Mode) 温度公式 AF exp{(Ea/K)[(1/Tu)-(1-Tt)]} 举例 AF exp{[0.68/(8.61738510e-5)][[1/(27325)]-[1/(273105)]]} ≈271.9518 AF 为加速因子 RHs 施加应力…

机器学习笔记 - 基于PyTorch + 类似ResNet的单目标检测

一、获取并了解数据 我们将处理年龄相关性黄斑变性 (AMD) 患者的眼部图像。 数据集下载地址,从下面的地址中,找到iChallenge-AMD,然后下载。 Baidu Research Open-Access Dataset - DownloadDownload Baidu Research Open-Access Datasethttps://ai.baidu.com/bro…

【FPGA零基础学习之旅#10】按键消抖模块设计与验证(一段式状态机实现)

&#x1f389;欢迎来到FPGA专栏~按键消抖模块设计与验证 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大…

日志采集分析ELK

这里的 ELK其实对应三种不同组件 1.ElasticSearch&#xff1a;基于Java&#xff0c;一个开源的分布式搜索引擎。 2.LogStash&#xff1a;基于Java&#xff0c;开源的用于收集&#xff0c;分析和存储日志的工具。&#xff08;它和Beats有重叠的功能&#xff0c;Beats出现之后&a…

无人机跟随一维高度避障场景--逻辑分析

无人机跟随一维高度避障场景--逻辑分析 1. 源由2. 视频3. 问题3.1 思维发散3.2 问题收敛 4. 图示4.1 水平模式4.2 下坡模式4.3 上坡模式4.4 碰撞分析 5. 总结5.1 一维高度避障场景5.2 业界跟随产品5.3 APM集成跟随 6. 参考资料7. 补充资料 - 大疆智能跟随7.1 炸机7.2 成功 1. 源…

安卓:网络框架okhttp

目录 一、okhttp介绍 1. OkHttpClient类&#xff1a; 常用方法&#xff1a; 2. Request类&#xff1a; 常用方法&#xff1a; 3. Response类&#xff1a; 常用方法&#xff1a; 4. Call类&#xff1a; 常用方法&#xff1a; 5. Interceptor接口&#xff1a; 常用方法&…

如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

问题描述# 上图示例展示了用户通过 IOS 客户端发送请求时&#xff0c;对应后端接口接收到的 Request 内容。从请求内容的整体结果&#xff0c;我们可以看出这是一个 multipart/form-data 的数据格式&#xff0c;由于这种数据是由多个 multipart section 组成&#xff0c;所以我…

Reis过期删除策略

介绍 在Redis中&#xff0c;我们可以为键值对设置有效期&#xff0c;现在面临一个问题&#xff0c;如果一个键值对过期了&#xff0c;那么我们应该怎么删除呢&#xff1f; 我们目前有三种方案&#xff1a; 定时删除&#xff1a;在设置键的过期时间的同时&#xff0c;为此键设…

山西电力市场日前价格预测【2023-08-17】

日前价格预测 预测明日&#xff08;2023-08-17&#xff09;山西电力市场全天平均日前电价为376.70元/MWh。其中&#xff0c;最高日前电价为431.75元/MWh&#xff0c;预计出现在19: 45。最低日前电价为339.25元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a; 实…

WSL2 Ubuntu子系统安装OpenCV

文章目录 前言一、&#xfeff;基本概念二、操作步骤1.下载源码2.安装依赖3.运行编译4.配置路径 前言 OpenCV用C语言编写&#xff0c;它的主要接口也是C语言&#xff0c;但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语…

【JavaEE基础学习打卡02】是时候了解Java EE了!

目录 前言一、为什么要学习Java EE二、Java EE规范介绍1.什么是规范&#xff1f;2.什么是Java EE规范&#xff1f;3.Java EE版本 三、Java EE应用程序模型1.模型前置说明2.模型具体说明 总结 前言 &#x1f4dc; 本系列教程适用于 Java Web 初学者、爱好者&#xff0c;小白白。…