软件测试比赛-学习
一、环境配置

二、浏览器适配
//1.设置浏览器的位置,google浏览器位置是默认且固定在电脑里的//2.设置浏览器驱动的位置,C:\Users\27743\AppData\Local\Google\Chrome\ApplicationSystem.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");//3.加载浏览器
// ChromeDriver chromeDriver = new ChromeDriver();WebDriver driver = new ChromeDriver();//4.通过chromeDriver打开浏览器
// chromeDriver.get("https://www.baidu.com/");driver.get("https://www.baidu.com/");
这里配置selenium环境,推荐这篇文章全国大学生软件测试大赛Web应用测试(二)Selenium功能测试环境配置_慕测平台的eclipse插件-CSDN博客
通过这篇文章来学习
02_浏览器适配_哔哩哔哩_bilibili 根据这个视频操作
设置自动补全功能


三、浏览器基本操作


package selenium;import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Navigation;
import org.openqa.selenium.WebDriver.Options;
import org.openqa.selenium.chrome.ChromeDriver;public class demo1 {public static void main(String[] args) {try {// TODO Auto-generated method stub//1.设置浏览器的位置,google浏览器位置是默认且固定在电脑里的//2.设置浏览器驱动的位置,C:\Users\27743\AppData\Local\Google\Chrome\ApplicationSystem.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");//3.加载浏览器
// ChromeDriver chromeDriver = new ChromeDriver();WebDriver driver = new ChromeDriver();//4.通过chromeDriver打开浏览器
// chromeDriver.get("https://www.baidu.com/");driver.get("https://www.baidu.com/");Thread.sleep(1500);//浏览器的操作//1.浏览器最大化driver.manage().window().maximize();
// Options manage = driver.manage();
// manage.window().maximize();Thread.sleep(1500);//2.获取导航类
// Navigation nat = driver.navigate();
// nat.to("https://www.baidu.com/s?wd=%E6%B8%85%E6%BE%88%E7%9A%84%E7%88%B1%E5%8F%AA%E4%B8%BA%E4%B8%AD%E5%9B%BD&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1");driver.navigate().to("https://www.baidu.com/s?wd=%E6%B8%85%E6%BE%88%E7%9A%84%E7%88%B1%E5%8F%AA%E4%B8%BA%E4%B8%AD%E5%9B%BD&sa=fyb_n_homepage&rsv_dl=fyb_n_homepage&from=super&cl=3&tn=baidutop10&fr=top1000&rsv_idx=2&hisfilter=1");Thread.sleep(1500);//2.1浏览器后退
// nat.back();driver.navigate().back();Thread.sleep(1500);//2.2浏览器前进
// nat.forward();driver.navigate().forward();Thread.sleep(1500);//2.3浏览器的刷新driver.navigate().refresh();Thread.sleep(1500);//3.获取当前标题和urlString title = driver.getTitle();System.out.println("title:"+ title);System.out.println("url:"+driver.getCurrentUrl());//3.1重新打开浏览器,我们看当前的标题和url地址driver.get("https://www.baidu.com/");driver.navigate().to("https://yiyan.baidu.com/");System.out.println("title:"+ driver.getTitle());System.out.println("url:"+driver.getCurrentUrl());//last:关闭浏览器driver.quit();//last:关闭标签
// driver.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}
四、元素的基本操作

package selenium;import java.util.List;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.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;public class demo2 {public static void main(String[] args) {// TODO Auto-generated method stubtry {//1.设置浏览器驱动的位置System.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");//2.加载浏览器WebDriver driver = new ChromeDriver();//3.打开浏览器driver.get("file:///D:/RuanJian/selenium/code/demo1/index.html");//4.元素的基本操作,先定位后操作//定位WebElement input_name = driver.findElement(By.xpath("//*[@id=\"user2\"]"));System.out.println(input_name.getAttribute("value"));//测试账号//清空input_name.clear();//输入input_name.sendKeys("李聪聪");Thread.sleep(1000);//获取value属性的内容String value = input_name.getAttribute("value");//李聪聪System.out.println(value);//输入密码driver.findElement(By.xpath("//*[@id=\"password\"]")).sendKeys("123456");Thread.sleep(1000);//单选框选择女driver.findElement(By.xpath("/html/body/table/tbody/tr[4]/td[2]/input[2]")).click();Thread.sleep(1000);//复选框选择唱歌driver.findElement(By.xpath("/html/body/table/tbody/tr[5]/td[2]/input[3]")).click();Thread.sleep(1000);//下拉表单选择陕西,这个比较特殊,先获取这个元素,然后加载成select,最后进行操作WebElement select_table = driver.findElement(By.xpath("/html/body/table/tbody/tr[6]/td[2]/select"));Select select = new Select(select_table);//下拉表单,获取其中的值List<WebElement> options = select.getOptions();//法一for (WebElement webElement : options) {String text = webElement.getText();System.out.println(text);}//法二for (int i = 0; i < options.size(); i++) {WebElement webElement = options.get(i);String text = webElement.getText();System.out.println("index"+text);}//通过顺序选择 0开始select.selectByIndex(4);//陕西Thread.sleep(1000);//通过文字选择select.selectByVisibleText("北京");Thread.sleep(1000);//点击超链接driver.findElement(By.xpath("/html/body/table/tbody/tr[8]/td[2]/a")).click();//要确定到超链接那里Thread.sleep(1000);driver.navigate().back();Thread.sleep(1000);//多行文本输入driver.findElement(By.xpath("/html/body/table/tbody/tr[9]/td[2]/textarea")).sendKeys("666666");Thread.sleep(1000);//5.关闭浏览器driver.quit();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}}


五、各种定位方式
六、xpath语法
七、二次定位和组识别
八、iframe操作
九、延迟调用
十、xpath案例
十一、上传文案
十二、截屏处理
十三、键盘模拟焦点切换
十四、悬停操作
十五、滚动加载
十六、日期设置
十七、切换标签
十八、自动登录
十九、模块适配
二十、数据参数读取
相关文章:
软件测试比赛-学习
一、环境配置 二、浏览器适配 //1.设置浏览器的位置,google浏览器位置是默认且固定在电脑里的//2.设置浏览器驱动的位置,C:\Users\27743\AppData\Local\Google\Chrome\ApplicationSystem.setProperty("webdriver.chrome.driver", "C:\\Users\\27743\\AppData\\…...
力扣LeetCode-链表中的循环与递归使用
标题做题的时候发现循环与递归的使用差别: 看两道题: 两道题都是不知道链表有多长,所以需要用到循环,用到循环就可以把整个过程分成多个循环体,就是每一次循环要执行的内容。 反转链表: 把null–>1…...
AFSim仿真系统 --- 系统简解_08 传感器与特征
传感器与特征 传感器是平台的一部分,为拥有该平台提供了探测其他平台及其组成部分的能力。 特征是平台的一种属性,用于确定特定传感器是否能够探测到特征所拥有的平台。 以下是用于探测平台的一些特征属性列表: 声学红外光学雷达 AFSIM …...
已经安装了qt,想添加mingw组件,包含gcc等
1、已经安装了qt,想添加mingw组件, 步骤1 双击打开MaintenanceTool.exe, 步骤2: 选择清华大学开源软件镜像网站,选择相应QT版本添加网址https://mirrors.tuna.tsinghua.edu.cn/qt/online/qtsdkrepository/windows_x8…...
数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
数据库管理250期 2024-10-09 数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)1 简介2 引擎构成3 引擎架构4 文件分布5 分布式MVCC6 限制/要求总结 数据库管理-第250期 深入浅出多主多活数据库技术…...
信号用wire类型还是reg类型定义
wire类型就是一根线,线有两端,一端发生改变,经过线传递的信号当然也会发生改变,reg类型则不同,可以把reg类型理解为存储数据的寄存器,当满足一定条件时,数值才被激活发生改变。 那么࿰…...
与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)
与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布, 且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新…...
数据驱动投资:AI在股票市场的应用
当ChatGPT首次亮相时,其卓越的语言处理能力立刻引起了许多行业的广泛关注,投资界也不例外。关于ChatGPT是否能应用于投资决策的问题,迅速成为热门讨论的焦点。 近期,加拿大多伦多大学和印度孟买理工学院的研究人员联合开展了一项…...
Tita使用小技巧:项目类型自定义,业务管理个性化
应用场景 某互联网企业,企业内部有研发部,有销售部 研发部通常需要管理各种技术研发类型项目,因此需要管理「研发型」项目,该类型项目需要明确「所属产品」、「级别管理:国家级/省市级」、「项目类别:创新…...
国药准字:您购药的可靠指南
益安宁丸为同溢堂药业有限公司所独家生产的一款中成药,在内地市场和港澳地区均有上市。 益安宁丸真品的唯一标准:无论港版还是内地版,包装盒必然有国药准字Z20063087标识,但凡没有国药准字标识的必为假药。...
Python类学习(2)——未完待续
函数和类的参数传递 实例方法 class House:# 类构造方法,也是实例方法def __init__(self, area, price):self.area areaself.price pricedef cls_func(self, arg):print(arg)my_house House(America, 330) # 实例化类对象,需要传入init中的两个参数 print(f…...
微前端框架 qiankun 全面解析到源码实现
微前端(Micro Frontends)是一种将大型前端应用拆分为多个独立模块的架构设计思想,旨在解决复杂应用开发与维护的难题。qiankun 是目前流行的微前端解决方案之一,基于 single-spa 进行封装,提供了一种简单且完整的微前端…...
初始化数据的正确方式?
关于这篇文章 https://proandroiddev.com/loading-initial-data-in-launchedeffect-vs-viewmodel-f1747c20ce62 pl的视频解读 当在viewmodel中需要进行数据的初始化的时候 viewmodel.initData() 放在哪里合适呢,大部分情况下可以放在 viewmodel的init{}模块&…...
Flutter平台嵌入器
When you build a Flutter app, it’s not just about the code you write in Dart and the Flutter framework. There’s also a crucial piece called the platform embedders that enable your Flutter app to run on different operating systems like Android, iOS, and s…...
微信小程序——婚礼邀请函
一、界面设计 首页: 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。温馨的欢迎语,如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。 邀请函详情页面: 顶部展示新人的照片…...
WebRTC Connection Negotiate解决
最近有个项目 ,部署之后一直显示,查了一些资料还是没有解决,无奈只有自己研究解决?经过排查,应该是内网穿透的问题 什么是内网穿透? 我们访问我们自己的官网产品页面,我们的服务器是一个单独…...
Redis面试篇1
1、为什么要用缓存? 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能&…...
Debezium系列之:Debezium 3.0.0.Final发布
Debezium系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标MariaDB连接器的更改版本 11.4.3 支持MongoDB连接器的更改MongoDB sink connectorMySQL连接器的改变MySQL 9MySQL向量数据类型Oracle连接…...
一文解决jQuery表格插件DataTable导出PDF中文乱码问题
原因是默认字体不支持中文,需要更换字体。 详情官网:pdfmake 官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件 以下是详细操作: 重要前提:电脑上需要已安装nodejs 点击进入官网下载安装即可&a…...
使用pytorch进行迁移学习的两个步骤
1. 步骤及代码 迁移学习一般都会使用两个步骤进行训练: 固定预训练模型的特征提取部分,只对最后一层进行训练,使其快速收敛;使用较小的学习率,对全部模型进行训练,并对每层的权重进行细微的调节。 impor…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
Python爬虫实战:研究Restkit库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...
