自动化测试常用函数
自动化测试常用函数
- 前言
- 1. 元素的定位
- 1.1 cssSelector
- 1.2 xpath
- 1.2.1 获取 HTML 页面所有的节点
- 1.2.2 获取 HTML 页面指定的节点
- 1.2.3 获取一个节点中的直接子节点
- 1.2.4 获取一个节点的父节点
- 1.2.5 实现节点属性的匹配
- 1.2.6 使用指定索引的方式获取对应的节点内容
- 2. 操作测试对象
- 2.1 点击/提交对象
- 2.2 模拟按键输入
- 2.3 清除文本内容
- 2.4 获取文本信息
- 2.5 获取当前页面标题
- 2.6 获取当前页面 URL
- 3. 窗口
- 3.1 切换窗口
- 3.2 窗口设置大小
- 3.3 屏幕截图
- 3.4 关闭窗口
- 4. 弹窗
- 4.1 警告弹窗 + 确认弹窗
- 4.2 提示弹窗
- 5. 等待
- 5.1 强制等待
- 5.2 隐式等待
- 5.3 显式等待
- 6. 浏览器导航
- 7. 文件上传
- 8. 浏览器参数设置
前言
本节主要以代码为主代码
代码地址:https://gitee.com/hu_yuchen/code/tree/master/python-autoTest/aotoTest-01
1. 元素的定位
Web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。
常见的元素定位方式非常多,如 id
,classname
,tagname
,xpath
,cssSelector
。常用的主要由 cssSelector
和 xpath
。
1.1 cssSelector
选择器的功能:选中页面中指定的标签元素。
选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过 id
选择器和子类选择器来进行定位。
- 定位百度首页的“百度热搜”元素,可以使用通过
id
选择器和子类选择器进行定位:- “搜索输入框元素”:
#kw
- “百度一下按钮”:
#su
- “搜索输入框元素”:
1.2 xpath
XML路径语言,不仅可以在 XML 文件中查找信息,还可以在 HTML 中选取节点。
XPath 使用路径表达式来选择 XML 文档中的节点。
1.2.1 获取 HTML 页面所有的节点
//*
1.2.2 获取 HTML 页面指定的节点
//[指定节点]
//ul
:获取 HTML 页面所有的ul
节点//input
:获取 HTML 页面所有的input
节点
1.2.3 获取一个节点中的直接子节点
/
//span/input
1.2.4 获取一个节点的父节点
..
//input/..
:获取input
节点的父节点
1.2.5 实现节点属性的匹配
[@...]
//*[@id='kw']
:匹配 HTML 页面中id
属性为kw
的节点
1.2.6 使用指定索引的方式获取对应的节点内容
注意:XPath 的索引是从 1 开始的。
- 百度首页通过:
//div/ul/li[3]
定位到第三个百度热搜标签
更便捷的生成 selector/xpath 的方式:右键选择复制“Copy selector/xpath”。
案例:如果想要匹配到百度首页指定的新闻文本或者节点集,直接使用 #hotsearch-contentwrapper > li
能够满足吗?
问题:既然可以手动复制 selector/xpath 的方式,为什么还要了解语法?
- 手动复制的 selector/xpath 表达式并不一定满足上面的唯一性要求,有时候也需要手动的进行修改表达式。
案例:百度首页(需要登录百度账号)右侧的热搜,复制 li
标签下的 a
标签,复制好的 selector 为:#title-content
,xpath 为://*[@id="title-content"]
,同学们可以手动操作一下,手动复制的表达式是否唯一呢?
2. 操作测试对象
获取到了页面的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输入、清除、获取文本。
2.1 点击/提交对象
click()
driver.find_element(By.CSS_SELECTOR, "#su").click();
2.2 模拟按键输入
send_keys("")
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴");
2.3 清除文本内容
输入文本后又想换一个新的关键词,这里就需要用到 clear()
。
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("迪丽热巴");
time.sleep(1);
driver.find_element(By.CSS_SELECTOR, "#kw").clear();
time.sleep(1);
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("古力娜扎");
2.4 获取文本信息
如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下。
- 获取文本信息:
text
text = driver.find_element(By.XPATH, '//*[@id="hotsearch-contentwrapper"]/li[1]/a/span[2]').text; print(f"text:{text}");
问题:是否可以通过 text
获取到“百度一下按钮”上的文字“百度一下”呢?尝试一下。
注意:文本和属性值不要混淆了。获取属性值需要使用方法 get_attribute("属性名称")
。
2.5 获取当前页面标题
title
title = driver.title;
2.6 获取当前页面 URL
current_url
url = driver.current_url;
3. 窗口
打开一个新页面之后获取到的 title
和 URL
仍然还是前一个页面的?
当我们手工测试的时候,我们可以通过眼睛来判断当前的窗口是什么,但对于程序来说它是不知道当前最新的窗口应该是哪一个。对于程序来说它怎么来识别每一个窗口呢?每个浏览器窗口都有一个**唯一的属性句柄(handle)**来表示,我们就可以通过句柄来切换。
3.1 切换窗口
- 获取当前页面句柄:
driver.current_window_handle;
- 获取所有页面句柄:
driver.window_handles;
- 切换当前句柄为最新页面:
curWindow = driver.current_window_handle; allWindows = driver.window_handles; for (window in allWindows) {if (window != curWindow) {driver.switch_to.window(window);} }
注意:执行了 driver.close()
之前需要切换到未被关闭的窗口。
3.2 窗口设置大小
- 窗口的大小设置:
// 窗口最大化 driver.maximize_window(); // 窗口最小化 driver.minimize_window(); // 窗口全屏 driver.fullscreen_window(); // 手动设置窗口大小 driver.set_window_size(1024, 768);
3.3 屏幕截图
我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景。
driver.save_screenshot('../images/image.png');
代码演示:
- 简单版本:
driver.save_screenshot('../images/image.png');
- 高阶版本:
filename = "autotest-" + datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + '.png'; driver.save_screenshot('../images/' + filename);
3.4 关闭窗口
driver.close();
注意:窗口关闭后 driver
要重新定义。
4. 弹窗
弹窗是在页面是找不到任何元素的,这种情况怎么处理?使用 Selenium 提供的 Alert
接口。
4.1 警告弹窗 + 确认弹窗
alert = driver.switchTo().alert();
// 确认
alert.accept();
// 取消
alert.dismiss();
4.2 提示弹窗
alert = driver.switchTo().alert();
alert.send_keys("hello");
alert.accept();
alert.dismiss();
5. 等待
通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用 Selenium 中提供的三种等待方法:
5.1 强制等待
time.sleep()
- 优点:使用简单,调试的时候比较有效。
- 缺点:影响运行效率,浪费大量的时间。
5.2 隐式等待
隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。
implicitly_wait()
参数:秒// 隐式等待 5 秒 driver.implicitly_wait(5);
隐式等待作用域是整个脚本的所有元素。即只要 driver
对象没有被释放掉(driver.quit()
),隐式等待就一直生效。
- 优点:智能等待,作用于全局。
5.3 显式等待
显式等待也是一种智能等待,在指定超时时间范围内只要满足操作
的条件就会继续执行后续代码。
WebDriverWait(driver, sec).until(functions);
functions
:涉及到 selenium.support.ui.ExpectedConditions
包下的 ExpectedConditions
类。
示例:
from selenium.webdriver.support import expected_conditions as EC;
wait = WebDriverWait(driver, 2);
wait.until(EC.invisibility_of_element((By.XPATH, '//*[@id="2"]/div/div/div[3]/div[1]/div[1]/div')));
ExpectedConditions 预定义方法的一些示例:
方法 | 说明 |
---|---|
title_is(title) | 检查页面标题的期望值 |
title_contains(title) | 检查标题是否包含区分大小写的子字符串的期望值 |
visibility_of_element_located(locator, str]) | 检查元素是否存在于页面的 DOM 上并且可见的期望值 |
presence_of_element_located(locator, str]) | 用于检查元素是否存在于页面的 DOM 上的期望值 |
visibility_of(element) | 检查已知存在于页面 DOM 上的元素是否可见的期望 |
alert_is_present() | 检查是否出现弹窗 |
- 优点:显式等待是智能等待,可以自定义显式等待的条件,操作灵活。
- 缺点:写法复杂。
隐式等待和显式等待一起使用效果如何呢?
- 测试一下:
// 隐式等待设置为 10s,显式等待设置为 15s,那么结果会是 5+10=15s 吗? driver.implicitly_wait(10); wait = WebDriverWait(driver, 15); start = time.time(); try {res = wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="2"]/div/div/div[3]/div[1]/div[1]/div/div/div'))); } catch {end = time.time();print("no such element");driver.quit();print(end - start); }
- 结果:重试多次,设置 10 秒的隐式等待和 15 秒的显式等待导致 20 秒后发生超时。
💡 小提示:
- 不要混合隐式和显式等待,可能会导致不可预测的等待时间。
6. 浏览器导航
常见操作:
- 打开网站
driver.get("https://tool.lu/");
- 浏览器的前进、后退、刷新
driver.back(); driver.forward(); driver.refresh();
案例:百度首页测试 https://tool.lu/ 标签入口。
7. 文件上传
点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
Selenium 无法识别非 web 的控件,上传文件窗口为系统自带,无法识别窗口元素。
但是可以使用 sendkeys
来上传指定路径的文件,达到的效果是一样的。
driver.get("file:///D:/file/%E6%AF%94%E7%89%B9%E6%95%99%E5%8A%A1/%E6%B5%8B%E8%AF%95/selenium4html/selenium-html/upload.html");
ele = driver.find_element(By.CSS_SELECTOR, "body > div > div > input[type=file]");
ele.send_keys("D:\\file\\test.txt");
8. 浏览器参数设置
-
设置无头模式
options = webdriver.ChromeOptions(); options.add_argument("-headless"); driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options);
-
页面加载策略
options.page_load_strategy = '加载方式';
页面加载方式主要有三种类型:
策略 说明 normal
默认值,等待所有资源下载 eager
DOM 访问已准备就绪,但诸如图像的其他资源可能仍在加载 none
完全不会阻塞 WebDriver options = webdriver.ChromeOptions(); options.page_load_strategy = 'eager'; driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options);
相关文章:
自动化测试常用函数
自动化测试常用函数 前言1. 元素的定位1.1 cssSelector1.2 xpath1.2.1 获取 HTML 页面所有的节点1.2.2 获取 HTML 页面指定的节点1.2.3 获取一个节点中的直接子节点1.2.4 获取一个节点的父节点1.2.5 实现节点属性的匹配1.2.6 使用指定索引的方式获取对应的节点内容 2. 操作测试…...
OpengGL教程(七)---摄像机
本章参考官方教程:摄像机 本系列历史文 OpengGL教程(一)—OpenGL环境的配置(GLFW3,GLAD) OpengGL教程(二)—渲染一个简单的窗体 OpengGL教程(三)—使用VAO和VBO方式绘制三角形 OpengGL教程(四)—使用EBO方式绘制矩形 OpengGL教程(五)—纹理的应用 OpengGL教程(六)—…...
springboot禁用静态资源
使用 application.properties 在 application.properties 中添加如下配置: spring.web.resources.add-mappingsfalse使用 application.yml 在 application.yml 中添加如下配置: spring:web:resources:add-mappings: false配置解释 spring.web.resou…...
猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新
前情提要 家里养了三只猫咪,其中一只布偶猫经常出入厕所。但因为平时忙于学业,没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关,频繁如厕可能是泌尿问题,停留过久也可能是便秘或不适。为了更科学地了解牠的…...
ViewModel和AndroidViewModel的主要区别
ViewModel和AndroidViewModel的主要区别在于它们的继承关系、构造函数以及使用场景。 继承关系与构造函数: ViewModel:ViewModel是一个抽象类,位于androidx.lifecycle包中。它是所有ViewModel类的基类,构造函数较为…...
myeclise导入项目并运行
1、把项目复制到myeclise工作目录 2、导入项目:将项目导入到myeclise工作目录 3、配置jre 4、把项目放到tomcat 5、运行项目 配置数据库后运行...
XSS 防御转义规则笔记
一、转义规则概述 核心目标:防止用户输入被浏览器解析为可执行代码,确保输入始终被视为数据而非代码。 关键策略:根据数据嵌入的上下文环境(HTML、JavaScript、CSS 等),对特殊字符进行转义或编码。 二、不…...
【2025年认证杯数学中国数学建模网络挑战赛】C题 完整论文 全三问模型+求解+代码
目录 【2025年认证杯数学建模挑战赛】C题数据预处理与全三问求解一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 三、数据预处理及分析四、问题一五、问题二5.1 基于互相关函数的反应延时识别5.2 反应过程延时结果分析5.3 基于BP神经网络的不合格产物预测5.4…...
iOS应用开发指南
开发一款iOS应用是一个系统化的过程,涵盖从环境搭建、界面设计、编码实现到测试发布的各个环节。以下是一份面向初学者的iOS移动应用开发指南,帮助你从零开始构建自己的App。 一、准备工作:开发环境与工具 必备设备 Mac电脑:iO…...
小刚说C语言刷题——第21讲 一维数组
在日常生活中,我们经常输入一组数据。例如输入一个班30名学生的语文成绩,或者输入一组商品的价格。这个时候,我们如何输入一组类型相同的数据呢?这里我们就要用到数组。 1.数组的概念 所谓数组就是一组相同类型数据的集合。数组中…...
苍穹外卖2
根据id查询员工 调用顺序:Controller—>Service—>ServiceImpl—>Mapper—>xml 1.controller层一个tab秒了(ai生成) 由于result泛型中希望返回一个employee对象,所以定义一个employee来接受Service的getbyid方法,在…...
C语言之双层for循环
一、第一小题引入 循环次数用 外层循环内层循环 这一题即是: 3412(次) 外循环一次 内循环一趟(可以形象理解为 时针和 分针) 运行结果如下: 一、第二小题引入 请阅读下列代码: 执行程序.程序执行的循环次数为多少? 答案:20次 这一题 外层循环 从5开始到i结束 中间的i是…...
第8课:多智能体系统评估与迭代
多智能体系统评估与迭代:从指标设计到持续优化的全流程指南 一、引言:当智能体协作出现“磨合期”:评估与迭代为何是必经之路? 在多智能体系统(MAS)的实际运行中,即使架构设计合理,也可能面临“协作效率下降”“资源浪费”等问题: 任务完成率突然从95%降至70%,却找…...
HTTP:三.HTTP报文
报文流 http报文是以一种类似的流的方式来发送数据的,所以报文流讲述了http报文的一些客观状态,相关术语:流入、流出形容事务处理。http报文任何时候是从上游向下游流入的!其中进过的节点既可能是上游,有可能是下游,如果从某个节点流出,那么相对于此节点流入的那个节点…...
.NET MAUI教程1-入门并发布apk包安装到真机
由于本人水平有限,如有写得不对的地方往指出,由于是使用公司的电脑,电脑的操作系统是英文的,没有权限修改,所以本文截图中的vs是英文版的 以发布android为例进行讲解 测试环境: window 11 vs2022 步骤如…...
你所拨打的电话是空号?手机状态查询API
一、引言 在当今数字化营销时代,电话销售仍然是许多企业获取客户的重要手段之一。然而,电销过程中常常遇到空号、风险号和沉默号等问题,这不仅降低了营销效率,还增加了企业的运营成本。例如,频繁拨打空号浪费了大量时…...
C++顺序栈的实现
顺序栈详细介绍 定义与特点 顺序栈(Sequential Stack)是一种基于数组实现的栈结构,利用数组的连续内存空间存储元素,遵循后进先出(LIFO)原则。其核心特点包括: 固定或动态容量:初始…...
element-ui 中的 select 组件如何 remote-method 函数中传参
在 select 组件中我们使用其 change 事件可以传参,请查看:el-select 中change 事件传参问题。 在我们使用 select 组件的远程搜索时,我们如何给 remote-method 这个方法添加自定义参数呢? 代码实现如下: <el-sel…...
浅谈解释型语言的运用
不得不说,程序不需要编译,程序在运行时才翻译成机器语言,每执行一次,都要翻译一次,因此效率比较低。在运行程序时才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译,…...
云手机哪个平台最好用?云手机性能、服务、技术等多维度测评分析
在云手机市场日渐繁荣的当下,面对琳琅满目的云手机平台,用户往往难以抉择云手机哪个平台最好。下面我们就从从性能、价格等多维度分析,云手机平台哪家强,队国内好用的云手机平台进行排行盘点。 好用的云手机平台排行盘点 第一&…...
idea版的cursor:Windsurf Wave 7
在企业环境中,Visual Studio Code和JetBrains系列是最常用的开发工具,覆盖了全球绝大多数开发者。这两类IDE各有优势,但JetBrains系列凭借其针对特定语言和企业场景的深度优化,使得用户很难轻易更换工具。 虽然Windsurf编辑器是基…...
【IDEA】创建 SpringBoot 项目连接 MySQL
前言 IntelliJ IDEA 作为一款专业的 Java 开发工具,在创建和管理 Spring Boot 项目方面具有显著优势。它深度集成了 Spring Boot 的开发流程,从项目初始化到最终部署都提供了高效的支持。IDEA 内置的 Spring Initializr 工具让项目创建变得极其简单&…...
使用 IntelliJ IDEA 进行远程调试
1. 前言 今天线上出现了个 Bug ,而且比较坑的是涉及到k8s环境相关的东西不能线下调试。传统方式是在代码中各种的日志 log 埋点然后重新部署进行调试,再根据 log 中的信息进行分析。如果你的 log 埋点不合理,就要不停的修改代码、不停的打包…...
Linux操作系统--进程状态
目录 1.运行、阻塞、挂起 1.1运行 1.2阻塞 1.3挂起(了解一下即可,基本不会出现这种情况) 2.进程状态 2.1进程状态查看 2.2 Z-僵尸进程 2.3孤儿进程 1.运行、阻塞、挂起 1.1运行 运行状态: 进程正在占用CPU执行指令。此时进程对系统资源ÿ…...
【端到端】端到端自动驾驶依赖Occupancy进行运动规划?还是可以具有生成局部地图来规划?
端到端自动驾驶系统的架构设计,目前主流做法实际上已经出现两种路径,我们来拆解一下: 🚘 一、Occupancy 是否用于运动规划? 一种趋势是使用 Occupancy 表示作为 中间表征,用于: 运动规划&…...
HarmonyOS-ArkUIV2装饰器-@Param:组件外部输入
上文我们了解了@Local装饰器 ,讲明了Local装饰器不允许外部传入值对其进行初始化。详见: HarmonyOS-ArkUI V2装饰器@Local装饰器:组件内部状态-CSDN博客。 但总有场景是需要外部组件传值过来,然后本组件接收这个值这种场景的。而且很多情况下,一个状态变量的作用范围会是…...
报错 ImportError: cannot import name ‘packaging‘ from ‘pkg_resources‘
解决方法一 (推荐) 先检查setuptools是否为70.0.0版本 pip list | grep setuptools再降低版本 python -m pip install setuptools69.5.1或者: 解决方法二 上述的报错信息表明:在安装 mmcv 时出现了 pkg_resources 模块的问题…...
Ollama调用多GPU实现负载均衡
文章目录 📊 背景说明🛠️ 修改 systemd 服务配置1. 配置文件路径2. 编辑服务文件2. 重新加载配置并重启服务3. 验证配置是否成功 📈 应用效果示例1. 调用单个70b模型2. 调用多个模型(70b和32b模型) 总结📌…...
Next.js 简介
Next.js 是一个由 Vercel 开发的基于 React 的 Web 开发框架,旨在简化 React 应用的开发流程,提供更好的性能和开发体验。 🌟 Next.js 的核心特点 1. 文件系统路由(File-system Routing) 在 pages/ 目录中创建文件就…...
使用Apache POI(Java)创建docx文档和表格
1、引入poi 依赖组件 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version> </dependency> <dependency><groupId>org.apache.poi</groupId>&…...
Dynamics365 ExportPdfTemplateExportWordTemplate两个Action调用的body构造
这两天在用ExportPdfTemplate做pdf导出功能时,遇到了如下问题InnerException : Microsoft.OData.ODataException: An unexpected StartArray node was found when reading from the JSON reader. A PrimitiveValue node was expected. 我的场景是使用power automate…...
《算法笔记》3.3小节——入门模拟->图形输出
1036 跟奥巴马一起编程 #include <iostream> #include <cmath> using namespace std;int main() {int n,m;char c;cin>>n>>c;for (int i 0; i < n; i) {cout<<c;}cout<<endl;m round(1.0*n/2)-2;//round里面不能直接写n/2,…...
iOS 上的内存管理是如何处理的?
iOS主要通过自动引用计数(ARC)和内存管理模型来处理内存。以下是对这两者的详细介绍以及在实际工作中的应用场景: 1. 自动引用计数(ARC) ARC是iOS和macOS中的内存管理机制。它能自动跟踪和管理应用程序的内存使用情况…...
河北工程大学e2e平台,python
题目,选择题包100分! 题目,选择题包100分! 题目,选择题包100分! 联系🛰:18039589633...
【Qt】spdlog日志模块的使用
版本 spdlog版本:1.5.0 采用1.5.0版本主要基于以下考虑:兼容Qt5.9.X版本和兼容C11。 spdlog 1.5.0下载地址:https://github.com/gabime/spdlog/releases/tag/v1.5.0 摘要 在Qt应用程序开发中,良好的日志系统至关重要。本文将介…...
python相关面试题
python相关面试题 1.上下文管理器需要实现哪两种方法以及相关应用 2.对比一下进程,线程和协程 3.魔法函数有哪些 4.什么是闭包和装饰器,装饰器缺点是什么 5.什么是浅拷贝和深拷贝 6.什么是GIL锁和互斥锁 7.init和new有什么区别,new方法的返回…...
swift菜鸟教程11-12(数组与字典)
一个朴实无华的目录 今日学习内容:1.Swift 数组1.1创建数组1.2访问数组1.3修改数组使用 append() 方法或者赋值运算符 在数组末尾添加元素通过索引修改数组元素的值: 1.4遍历数组 使用for-in循环同时需要每个数据项的值和索引值 1.5合并数组1.6count 属…...
.NET WPF 控件类分层结构
.NET WPF 控件类分层结构 在 WPF 中,类的层级结构设计是为了实现线程安全、依赖属性、可视化渲染、布局和交互等功能。以下是 WPF 核心基类的逐级说明,从最底层到最顶层: 1 DispatcherObject 作用: 提供与 WPF 线程模型…...
基于ImGui+FFmpeg实现播放器
基于ImGuiFFmpeg实现播放器 演示: ImGui播放器 继续研究FFmpeg,之前做了一个SDL的播放器,发现SDL的可视化UI界面的功能稍微差了点,所以今天我们换了一个新的工具,也就是ImGui。 ImGui官方文档:https://g…...
【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书
【Docker】快速部署 Certbot 并为 Nginx 服务器配置 SSL/TLS 证书 引言 Certbot 是一个免费的开源工具,用于自动化管理和获取 SSL/TLS 证书,主要用于与 Let’s Encrypt 证书颁发机构交互。 步骤 Nginx 挂载 certbot 文件夹。 docker run -d \--name…...
MATLAB编写的机械臂控制仿真程序,它主要实现了对一个二连杆机械臂的运动控制仿真,比较了PID控制和非线性模型预测控制两种方法在机械臂轨迹跟踪任务中的性能
clc; clear; close all;%% 机械臂参数 l1 0.5; l2 0.4; Ts 0.02; sim_time 60; t 0:Ts:sim_time;%% 物理参数 m1 1.0; m2 0.8; g 9.81;%% 直线轨迹参数 start_point [0.3; 0.1]; end_point [0.7; 0.3]; progress t/sim_time; xd start_point(1) (end_point(1) - s…...
python办公自动化------word文件的操作
一、 word文件的创建 需要安装包:python-docx 例1:创建word文件 from docx import Document# 创建doc对象 doc Document()# 指定路径下创建一个docx文件 doc.save(./dataFile/test1_doc.docx) 运行结果: 例2:word中添加内容 …...
Python小程序 - 文件处理3:正则表达式
正则表达式:文本年鉴表。遗留的问题很多。。。用AI再想想 需求:读入txt文件,过滤文件有关年记录 0)读入txt文件 1)以“。”,中文句号,为界区分一句,最小统计单位 2)年格…...
JAVA中正则表达式的入门与使用
JAVA中正则表达式的入门与使用 一,基础概念 正则表达式(Regex) 用于匹配字符串中的特定模式,Java 中通过 java.util.regex 包实现,核心类为: Pattern:编译后的正则表达式对象。 Matcher&#…...
智慧能源管理平台:驱动电网数字化转型,引领绿色能源新时代
安科瑞 华楠18706163979 一、引言 在全球能源转型和"双碳"目标的推动下,微电网作为分布式能源系统的重要组成部分,正迎来快速发展期。安科瑞电气股份有限公司推出的微电网智慧能源管理平台(EMS 3.0),通过整…...
OpenCV 图形API(30)图像滤波-----腐蚀操作函数erode()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 使用特定的结构元素腐蚀图像。 cv::gapi::erode 是 OpenCV 的 G-API 模块中用于执行图像腐蚀操作的函数。腐蚀是一种基本的形态学操作࿰…...
02-MySQL 面试题-mk
1.如何定位慢查询? 什么是慢查询? 页面加载过慢、接口压测响应时间过长(超过1s) 慢查询出现的情况有哪些? 聚合查询多表查询表数据量过大查询深度分页查询如何定位慢查询? 方案一:开源工具 调试工具:Arthas运维工具:Prometheus、Skywalking**Arthas:**可以使用命令的…...
利用安固软件实现电脑屏幕录像:四种实用方法分享
在日常工作中,有时我们需要录制电脑屏幕以进行教学演示、软件操作记录或重要会议的存档。安固软件终端安全管理系统提供了强大的屏幕录像功能,可以满足这些需求。 接下来,本文将介绍如何使用安固软件设置电脑实时画面录像,并分享…...
Gitee DevSecOps 以 CBB 驱动军工研发范式革新:平台化管理构件实践
随着军工软件向智能化、标准化与集约化发展,传统研发模式在效率、质量及协同方面面临显著瓶颈。项目规模扩大与系统复杂度的提升,亟需一种创新研发范式。Gitee DevSecOps 平台基于 CBB(通用构件库)理念,通过模块化、标…...
spring:xml方式调用构造方法创建Bean,调用set方法配置字段
如题: 要创建的Bean类UserServiceImpl02 : package com.itheima.service.impl;import com.itheima.dao.interfaces.InterfaceUserDao; import com.itheima.service.interfaces.InterfaceUserService;/*** copyright 2003-2024* author qiao wei* da…...