Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【测试篇】探秘自动化测试函数:解锁高效测试新路径

【测试篇】探秘自动化测试函数:解锁高效测试新路径

作者头像
用户11288949
发布于 2025-03-26 06:10:54
发布于 2025-03-26 06:10:54
5800
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

📚️1.操作选择元素

🚀1.1点击提交

此时我们在浏览器进行选择点击元素后,可以使用一下代码进行模拟点击的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.findElement(By.cssSelector("#su")).click();

这里使用click进行点击事件模拟;

🚀1.2模拟输入

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  driver.findElement(By.cssSelector("#kw")).sendKeys("雷霆万钧");

这里使用sendKeys进行输入事件模拟;

🚀1.3清除内容

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱学习");

这里使用clear进行清除输入框的事件模拟;

🚀1.4 获取文本信息

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 System.out.println(driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1)")).getText());

这里使用getText进行获取文本的操作;

当然如果这里的元素是一个属性那么就要使用:getAttribute("属性名称")进行获取属性的操作;

🚀1.5获取标题,URL

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void getUrlAndTitle(){
        createDriver();
        System.out.println(driver.getCurrentUrl());
        System.out.println(driver.getTitle());
        driver.quit();
    }

获取这里的URL是getCurrentUrl,然后获取标题为getTitle;

📚️2.窗口的操作

🚀2.1句柄的操作

提示:在每个页面都有一个drive对应的句柄,如果跳转另一个页面后(打开了两个页面),那么就要操作句柄的转换;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 //句柄的操作
    void getHandle(){
        //这里要点击进入另一个页面
        createDriver();
        driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(1) > a")).click();
        //此时进入了另一个页面,更换driver句柄
        //获取当前句柄
        String concurrentDriver = driver.getWindowHandle();
        //获取所有页面句柄
        Set<String> allDrivers = driver.getWindowHandles();
        for(String handle : allDrivers){
            if(handle != concurrentDriver){
                 driver.switchTo().window(handle);
            }
        }

注意:我们要获取当前页面的drive句柄,然后再次获取全部页面的句柄;最后如果过当前页面不为之前获取的页面,那么就要使用if语句进行句柄的转换;

🚀2.2窗口的调整

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void changeWindow() throws InterruptedException {
        createDriver();
        driver.manage().window().minimize();
        Thread.sleep(3000);
        driver.manage().window().maximize();
        Thread.sleep(3000);
        //全屏窗⼝
        driver.manage().window().fullscreen();
        Thread.sleep(3000);
        //⼿动设置窗⼝⼤⼩
        driver.manage().window().setSize(new Dimension(1024,768));
        driver.quit();
    }

解释:第一个minize即最小化,然后就是最大化,全屏,最后规定尺寸大小;

3.3屏幕截图

我们这里首先要进行依赖的引入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File(filename));

注意:copyFile中第一个file是我们截图的文件,然后后面就是我们保存文件的路径;

🚀2.3关闭窗口

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.close();

但是如果存在两个close,关闭两个页面,那么注意:将这里的driver转化,close会将对应的句柄进行释放,所以必须进行句柄修改;

📚️3.等待

🚀3.1强制等待

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Thread.sleep(1000);

这里的1000指的就是1000ms,那么所以就是直接强制等待1s;(等待的主要的作用就是在等待渲染,防止在查找元素时,元素本来存在,但是由于没有渲染出来,导致找不到元素)

🚀3.2隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执⾏,直到超时没找到元素才会报错。 implicitlyWait() 参数:Duration类中提供的毫秒、秒、分钟等⽅法

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));

注意:隐式等待的作用域是全局中;

🚀3.3显示等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new WebDriverWait(driver, Duration.ofSeconds(3)).
                until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#\\31  > div > div > div > div > div > div.header-wrapper_3m6nI > div.cos-row.row-text_1L24W.row_4WY55 > div > div > div.cos-flex.cos-items-center > div.title-wrapper_XLSiK > a > div > p > span > span")));

注意:

• elementToBeClickable(By locator) ‒ ⽤于检查元素的期望是可⻅的并已启⽤,以便您 可以单击它。 • textToBe(Bylocator,String str) - 检查元素。 • presenceOfElementLocated(Bylocator) ‒ 检查⻚⾯的 DOM 上是否存在元素。 • urlToBe(java.lang.String url) ‒ 检查当前⻚⾯的 URL 是⼀个特定的 URL;

当然这里还有其他的方法~~~

📚️4.浏览器导航

🚀4.1打开网站

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.navigate().to("https://selenium.dev");

driver.get("https://selenium.dev");

注意:这两种方法都是打开网站的操作,没有什么区别;

🚀4.2浏览器的前进后退域刷新

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();

对应的就是上述的按键;

📚️5.弹窗

具体的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Alert alert = driver.switchTo.alert();
//输入内容
alert.sendKeys("");
//确认
alert.accept();
//取消
alert.dismiss();

大致就是:点击进入弹框过后,出现了输入框,通过sendKey进行输入;

然后accept进行确认,然后dismiss进行取消;

📚️6.文件上传

点击⽂件上传的场景下会弹窗系统窗⼝,进⾏⽂件的选择。selenium⽆法识别⾮web的控件,上传⽂件窗⼝为系统⾃带,⽆法识别窗⼝元素但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的

文件上传代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WebElement ele = driver.findElement(By.cssSelector("body > div > div > 
input[type=file]"));
2 ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

📚️7.浏览器参数设置

🚀7.1无头模式设置

一般来说,我们启动浏览器后,直接就是可见式的看见浏览器的启动,但是设置无头模式后,直接在后台运行,就不用盯着浏览器看了;

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        WebDriverManager.chromedriver().setup();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        //设置无头模式
        options.addArguments("-headless");

        WebDriver driver = new ChromeDriver(options);

options.addArguments("--remote-allow-origins=*");设置网址访问权限; options.addArguments("-headless");设置无头模式;

🚀7.2浏览器加载策略

代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 void changePage(){
        WebDriverManager.chromedriver().setup();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        //options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
        //options.setPageLoadStrategy(PageLoadStrategy.NONE);
        //options.setPageLoadStrategy(PageLoadStrategy.EAGER);

        WebDriver driver = new ChromeDriver(options);
        driver.get("https://www.baidu.com/");
        driver.quit();
    }

options.setPageLoadStrategy(PageLoadStrategy.NORMAL):即默认加载,即全部数据进行加载;

options.setPageLoadStrategy(PageLoadStrategy.NONE):DOM访问已准备就绪,但是图像资源可能还在加载;

options.setPageLoadStrategy(PageLoadStrategy.EAGER):完全不会阻塞webdriver;会导致什么资源都没加载出来;

📚️8.总结

本期小编主要讲解了关于自动化测试的函数,涉及到操作元素,窗口的操作,等待,浏览器导航,弹窗操作,文件上传以及浏览器参数设置;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
福大大架构师每日一题
2023/06/08
2990
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
福大大架构师每日一题
2023/06/09
3130
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
福大大架构师每日一题
2023/04/06
3770
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
福大大架构师每日一题
2023/04/30
2440
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
福大大架构师每日一题
2023/06/08
3070
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
2022-04-24:用go语言重写ffmpeg的muxing.c示例。
总体上,本程序实现了将虚假音频和视频数据编码成指定格式并写入输出文件的功能。其中,步骤 2 的主要作用是为音频和视频流创建必要的对象和参数,以便后续进行编码和写入;步骤 3 和 4 则是生成虚假数据并进行编码和写入的具体实现。
福大大架构师每日一题
2023/04/24
3750
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
福大大架构师每日一题
2023/03/30
4520
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Inte
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Video 等)对视频进行解码,从而提高解码效率和性能。在进行硬件加速解码时,相较于 CPU 的软件解码方式,GPU 可以利用其并行处理能力和更高的带宽进行更高效的解码操作。请用go语言改写hw_decode.c文件。
福大大架构师每日一题
2023/06/09
7900
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Inte
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
福大大架构师每日一题
2023/06/08
2640
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。
2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。
福大大架构师每日一题
2023/05/04
2870
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。
福大大架构师每日一题
2023/06/08
7090
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
福大大架构师每日一题
2023/04/12
5140
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Vid
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Video 等)对视频进行解码,从而提高解码效率和性能。在进行硬件加速解码时,相较于 CPU 的软件解码方式,GPU 可以利用其并行处理能力和更高的带宽进行更高效的解码操作。请用go语言改写hw_decode.c文件。
福大大架构师每日一题
2023/04/18
9690
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Vid
2023-04-09:使用 Golang 重写的 ffmpeg 示例encode_video.c,实现视频编码并将编码后的数据封装为容器格式,最终写入输出文件。
2023-04-09:使用 Golang 重写的 ffmpeg 示例encode_video.c,实现视频编码并将编码后的数据封装为容器格式,最终写入输出文件。
福大大架构师每日一题
2023/04/09
4640
2023-04-09:使用 Golang 重写的 ffmpeg 示例encode_video.c,实现视频编码并将编码后的数据封装为容器格式,最终写入输出文件。
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
福大大架构师每日一题
2023/06/08
4980
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。
福大大架构师每日一题
2023/04/05
1.6K0
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。
2022-04-27:用go语言重写ffmpeg的remuxing.c示例。
ffmpeg的remuxing.c是一个用于将多媒体文件从一种容器格式转换为另一种容器格式的命令行工具。它可以将音频、视频和字幕等元素从源文件中提取出来,并按照用户指定的方式重新封装到目标文件中。在本篇文章中,我将对ffmpeg的remuxing.c进行介绍,并讨论其关键功能和技术实现。
福大大架构师每日一题
2023/04/27
3900
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
福大大架构师每日一题
2023/04/01
8000
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
如何使用libavfilter库给pcm音频采样数据添加音频滤镜?
  初始化音频滤镜的方法基本上和初始化视频滤镜的方法相同,不懂的可以看上篇博客,这里直接给出代码:
故乡的樱花开了
2023/10/22
3780
2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写。
2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写。
福大大架构师每日一题
2023/03/23
3760
2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写。
推荐阅读
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
2990
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
3130
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
3770
2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。
2440
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
3070
2022-04-24:用go语言重写ffmpeg的muxing.c示例。
3750
2023-03-30:用Go语言改写FFmpeg示例decode_audio.c,实现高效音频解码。
4520
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Inte
7900
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
2640
2023-05-04:用go语言重写ffmpeg的scaling_video.c示例,用于实现视频缩放(Scaling)功能。
2870
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频
7090
2023-04-12:使用 Go 重写 FFmpeg 的 extract_mvs.c 工具程序,提取视频中的运动矢量信息。
5140
2023-04-18:ffmpeg中的hw_decode.c的功能是通过使用显卡硬件加速器(如 NVIDIA CUDA、Intel Quick Sync Vid
9690
2023-04-09:使用 Golang 重写的 ffmpeg 示例encode_video.c,实现视频编码并将编码后的数据封装为容器格式,最终写入输出文件。
4640
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与
4980
2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。
1.6K0
2022-04-27:用go语言重写ffmpeg的remuxing.c示例。
3900
2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
8000
如何使用libavfilter库给pcm音频采样数据添加音频滤镜?
3780
2023-03-23:音视频解混合(demuxer)为PCM和YUV420P,用go语言编写。
3760
相关推荐
2023-04-06:拥抱Golang,优化FFmpeg音频编码器,探究encode_audio.c的内部结构。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验