自动化测试selenium篇(二)

1.  操作测试对象

1.1 普通操作

测试代码如下所示:

private static void Test03() throws InterruptedException {//创建一个驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到百度搜索输入框WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));//在输入框中输入软件测试search_input.sendKeys("沈梦瑶");//找到百度搜索输入框//清空百度搜索输入框里面的内容search_input.clear();//向百度搜索输入框中搜索前端search_input.sendKeys("袁一琦");//找到百度一下,进行点击webDriver.findElement(By.cssSelector("#su")).click();//校验结果是不是有前端int flag = 0;sleep(3000);List<WebElement> search_results = webDriver.findElements(By.cssSelector("a em"));for(int i = 0;i < search_results.size();i++){if(search_results.get(i).getText().equals("袁一琦")){flag = 1;break;}}if(flag == 1){System.out.println("测试通过");}else {System.out.println("测试不通过");}}

测试页面如下所示:

1、首先出现沈梦瑶在搜索框中,其次搜索框中被换为袁一琦,并进行百度搜索;

        同时idea显示结果如下所示:

1.2 click与submit 

        click:

 private static void TrueTest() {//创建一个驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到百度搜索输入框WebElement news_button = webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));news_button.click();}

        页面如下:

从百度首页进入到新闻链接的新闻页面;

        submit:

 private static void FalseTest() {//创建一个驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到百度搜索输入框WebElement news_button = webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));news_button.submit();webDriver.quit();}

        会出现报错,报错信息如下,我们要找的元素没有找到;

         

submit和click的区别:

        submit操作的元素需要放在form标签中,否则会报错;

        click则没有上面的限制,所以我们一般推荐使用click; 

1.3 添加等待

        添加强制等待sleep:

                sleep休眠 添加休眠非常简单,我们需要引入time 包,就可以在脚本中自由的添加休眠时间了,这里的休眠指固 定休眠

        添加智能等待:

        1、添加隐式等待

        通过添加implicitly_wait() 方法就可以方便的实现智能等待;implicitly_wait(30)的用法比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。代码如下:

private static void Test04() throws InterruptedException {//创建一个驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//找到百度搜索输入框WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));//在输入框中输入软件测试search_input.sendKeys("沈梦瑶");//找到百度搜索输入框//清空百度搜索输入框里面的内容search_input.clear();//向百度搜索输入框中搜索前端search_input.sendKeys("袁一琦");//找到百度一下,进行点击webDriver.findElement(By.cssSelector("#su")).click();//校验结果是不是有前端int flag = 0;webDriver.manage().timeouts().implicitlyWait(5, SECONDS);List<WebElement> search_results = webDriver.findElements(By.cssSelector("a em"));for(int i = 0;i < search_results.size();i++){if(search_results.get(i).getText().equals("袁一琦")){flag = 1;break;}}if(flag == 1){System.out.println("测试通过");}else {System.out.println("测试不通过");}}

        我们的驱动器在按照代码逻辑寻找需要寻找的定位元素,当找的时候不管等待时间是否满足,我们依旧继续参加下面的代码逻辑;如果过了相对设置的时间依旧没有找到定位元素,我们的idea就会就行报错预警; 

        2、添加显示等待

  private static void Test05() {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");//使用一下显示等待WebDriverWait wait = new WebDriverWait(webDriver,3);wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#s-top-left > a:nth-child(1)")));}

        验证当前的元素能否被点击;

        所谓显示等待就是判断我们当前要定位的元素是否已经被找到来判断是否应该继续等待;

1.4 getvalue()

getAttribute("value");

         该操作元素可以获取元素的属性值,其中value代表的是元素的属性,如果该元素没有属性值得话,此时的结果就是null;

1.5 打印信息

        1、获取title

private static void Test07() {WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 获取百度页面titleString title = webDriver.getTitle();// 如果获取到的title等于“百度一下,你就知道”,测试通过if(title.equals("百度一下,你就知道")) {System.out.println("测试通过");} else {// 否则测试不通过System.out.println("测试不通过");}webDriver.quit();}

        2、获取url

private static void Test08() {// 创建一个驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 获取当前页面的urlString url = webDriver.getCurrentUrl();// 如果获取到的url=https://www.baidu.com/,测试通过// 否则测试不通过if(url.equals("https://www.baidu.com/")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}// 关闭浏览器webDriver.quit();}

2. 浏览器的操作

2.1 浏览器最大化

        webdriver.manage().window().maximize();

  private static void Test09() throws InterruptedException {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");// 浏览器最大化webDriver.manage().window().maximize();sleep(3000);// 定位到换一换这个元素String expect_str = webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();// 如果换一换这个按钮存在,测试通过if(expect_str.equals("换一换")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}

2.2 设置浏览器大小

        webdriver.manage().window().setsize(new dimension(xxx,xxx));

private static void Test10() throws InterruptedException {// 创建一个驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 设置浏览器大小200*200webDriver.manage().window().setSize(new Dimension(200, 400));// 校验百度搜索输入框存不存在sleep(3000);WebElement webElement = webDriver.findElement(By.cssSelector("#kw"));// 如果存在,测试通过// 否则测试不通过if(webElement == null) {System.out.println("测试不通过");} else {System.out.println("测试通过");}}

2.3 操作浏览器的前进、后退

        浏览器后退:webDriver.navigate().back();

private static void Test11() 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);// 浏览器后退webDriver.navigate().back();sleep(3000);// 获取当前页面urlString url = webDriver.getCurrentUrl();System.out.println("当前的url等于" + url);// 如果当前url等于https://www.baidu.com/测试通过// 否则测试不通过if(url.equals("https://www.baidu.com/")) {System.out.println("测试通过");} else {System.out.println("测试不通过");}}

        浏览器前进:webDriver.navigate().forward(); 

private static void Test12() throws InterruptedException {// 创建一个浏览器驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页
//        webDriver.get("https://www.baidu.com/");webDriver.navigate().to("https://www.baidu.com/");// 输入张三,#kwwebDriver.findElement(By.cssSelector("#kw")).sendKeys("张三");sleep(3000);// 点击百度一下按钮,#suwebDriver.findElement(By.cssSelector("#su")).click();sleep(3000);// 浏览器后退webDriver.navigate().back();sleep(3000);// 浏览器在进行前进webDriver.navigate().forward();// 获取当前的urlsleep(3000);String cur_url =webDriver.getCurrentUrl();// 如果当前url不等于"https://www.baidu.com"测试通过// 否则测试不通过System.out.println("当前的url:" + cur_url);if(cur_url.equals("https://www.baidu.com/")) {System.out.println("测试不通过");} else {System.out.println("测试通过");}}

 

2.4 控制浏览器滚动条

  // 浏览器滚动条滑到最下面((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");// 浏览器滚动条滑到最上面((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=0");

        对于滚动条的操作我们需要使用js代码来控制,所以我们将webdriver强行转换为JavascriptExecutor类型,然后对该类型执行js语句;

private static void Test13() throws InterruptedException {// 创建一个驱动WebDriver webDriver = new ChromeDriver();// 打开百度首页webDriver.get("https://www.baidu.com/");// 输入鲜花webDriver.findElement(By.cssSelector("#kw")).sendKeys("沈梦瑶");// 点击百度一下按钮webDriver.findElement(By.cssSelector("#su")).click();// 等待3秒sleep(3000);// 浏览器滚动条滑到最下面((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");sleep(3000);// 浏览器滚动条滑到最上面((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=0");// 等待3秒sleep(3000);// 浏览器关闭webDriver.quit();}

ps:本次的内容就到这里了,如果对你有所帮助的话就请一键三连哦!!!

封面截图来自刘姝贤的毕业公演的pv;

url:【流水线的流水账】江西几日游_哔哩哔哩_bilibili

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

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

相关文章

通过AI技术克服自动化测试难点(下)

前面的文章里我们对可以应用到测试中的AI技术做了整体介绍&#xff0c;详细介绍了OpenCV技术、OCR技术和神经网络&#xff0c;本文我们继续为大家介绍卷积神经网络、数据集以及AI技术在其他方面和测试相关的创新。 卷积神经网络整体上的原理是这样的&#xff0c;首先在底层特征…

【linux系统】进程

文章目录 进程和PCBlinux与进程的相关命令PS linux下的PCB进程标识符父子进程fork 进程状态磁盘睡眠 -- D暂停和跟踪暂停 -- T和t僵尸进程 -- Z孤儿进程 进程优先级 进程地址空间再谈fork进程地址空间分布虚拟地址和页表mm_struct 进程控制进程终止进程退出码信号 进程等待进程…

【翻译】在 Python 应用程序中使用Qt Designer的UI文件

原文地址&#xff1a;Using a Designer UI File in Your Qt for Python Application 直接上图&#xff0c;上代码 将UI文件转为Python 为了演示&#xff0c;我们使用 Qt Widgets 简单示例说明。 这个应用程序由一个源文件 easing.py、一个 UI 文件 form.UI、一个资源文件 ea…

考研笔记之操作系统(四) - 文件管理

文件管理 1. 简介1.1 前情回顾1.2 文件的属性1.3 文件内部数据的组织方式1.4 操作系统向上提供的文件功能1.5 文件应如何放在外存 2. 文件的逻辑结构2.1 无结构文件2.2 有结构文件2.2.1 顺序文件2.2.2 索引文件2.2.3 索引顺序文件2.2.4 多级索引顺序文件 3. 文件目录3.1 基本概…

1422. 分割字符串的最大得分【字符串】

文章目录 1422. 分割字符串的最大得分解题思路Go代码 1422. 分割字符串的最大得分 1422. 分割字符串的最大得分 给你一个由若干 0 和 1 组成的字符串 s &#xff0c;请你计算并返回将该字符串分割成两个 非空 子字符串&#xff08;即 左 子字符串和 右 子字符串&#xff09;所…

使用3080ti运行blip2的

使用3080ti运行blip2的案例 注意&#xff01;blip2很吃显存&#xff0c;需要大于80GB显存的卡。我最后安装的所有包的版本信息&#xff08;python 3.9 &#xff09;以供参考&#xff1a; 首先&#xff0c;我在运行blip2的demo的时候显存用了80G以上&#xff0c;所以大家卡的显存…

moectf-Web题解

1、弗拉格之地的入口 2、垫刀之路01: MoeCTF&#xff1f;启动&#xff01; 3、ez_http 4、ProveYourLove 5、弗拉格之地的挑战 6、ImageCloud前置 7、垫刀之路02: 普通的文件上传 8、垫刀之路03: 这是一个图床 9、垫刀之路05: 登陆网站 10、垫刀之路06: pop base mini …

Java值传递、序列化详解

Java 值传递详解 说到参数&#xff0c;我们先来搞懂一下这两个概念 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数&#xff08;有参的方法&#xff09;&#xff0c;参数在程序语言中分为&#xff1a; 实参&#xff08;实际参数&#xff0c;…

QT实现Opencv图像处理

案例 基于QT的人脸识别 pro文件需要加以下代码 INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv INCLUDEPATH E:/opencv/opencv3.4-qt-intall/install/include/opencv2 LIBS E:/opencv/o…

D34【python 接口自动化学习】- python基础之输入输出与文件操作

day34 文件关闭 学习日期&#xff1a;20241011 学习目标&#xff1a;输入输出与文件操作&#xfe63;-46 常见常新&#xff1a;文件的关闭 学习笔记&#xff1a; 文件关闭的内部工作过程 close&#xff08;&#xff09;函数 with语句 常用的打开关闭文件 # 文件关闭 # 方式…

值类型和引用类型的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){/****值类型****/bool test;//必须赋值,否则报错test true;Console.WriteLin…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例&#xff0c;异常数…

Observability:使用 OpenTelemetry 自动检测 Go 应用程序

作者&#xff1a;来自 Elastic Damien Mathieu 使用 OpenTelemetry 检测 Go 应用程序可以深入了解应用程序的性能、依赖项和错误。我们将向你展示如何使用 Docker 自动检测 Go 应用程序&#xff0c;而无需更改应用程序代码。 在快节奏的软件开发领域&#xff0c;尤其是在云原生…

【每日刷题】Day137

【每日刷题】Day137 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 2. 495. 提莫攻击 - 力扣&#xf…

vrrp实验

配置Trunk和Access [SW3]int e0/0/1 [SW3-Ethernet0/0/1]p l a [SW3-Ethernet0/0/1]p d v 10 [SW3-Ethernet0/0/1]int e0/0/2 [SW3-Ethernet0/0/2]p l a [SW3-Ethernet0/0/2]p d v 10 [SW3-Ethernet0/0/2]int e0/0/3 [SW3-Ethernet0/0/3]p l a [SW3-Ethernet0/0/3]p d v 20 [S…

Linux——软件包管理

目录 rpm 包管理 基本介绍 rpm 包的查询指令 ​编辑 rpm 包的卸载和安装 yum rpm 包管理 基本介绍 rpm 包的查询指令 rpm 包的卸载和安装 yum

STM32F407寄存器操作(DMA+SPI)

1.前言 前面看B站中有些小伙伴吐槽F4的SPIDMA没有硬件可控的CS引脚&#xff0c;那么今天我就来攻破这个问题 我这边暂时没有SPI的从机芯片&#xff0c;并且接收的过程与发送的过程类似&#xff0c;所以这里我就以发送的过程为例了。 2.理论 手册上给出了如下的描述 我们关注…

【动手学深度学习】5.2 参数管理(个人向笔记+代码注释)

之前的课程中&#xff0c;我们只是通过深度学习框架完成训练的工作&#xff0c;而忽略了操作参数的具体细节。所以我们我们介绍的内容有&#xff1a; 访问参数&#xff0c;用于调试&#xff0c;诊断和可视化参数初始化在不同的模型组件间共享参数 下面是一个有单隐藏层的多层感…

如何把视频变成自己的原创?提升视频原创度的7个技巧

在短视频平台发布作品时&#xff0c;时常因为原创问题&#xff0c;而被限流。如何在海量视频中脱颖而出&#xff0c;让自己的作品具有独特性和原创性&#xff0c;是每位创作者都需要思考的问题。本文将详细介绍如何通过一系列前期准备和后期处理技巧&#xff0c;将视频素材转化…

模版进阶 非类型模版参数

一.模板参数分类类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使用。 #i…