selenium+pyqt5自动化工具总结
说明:本工具是,操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的,
工具在后面
1. 代码结构
pycharm打开的文件下,再写一个子文件,文件导入的时候把子文件名带上
这样就可以在 外层使用命令 pyinstaller -F -w selenium_tool\main.py (-w是不要黑窗口)

2. 项目思路
1. 路径下放一个resource目录,目录下又有 ui 文件夹, 和images文件夹。
2. qtdesigner设计中,设计ui文件。转成py文件放到 resources路径下
3. 内层的selenium_tool 路径下,放各自界面的逻辑文件,如caselist_window.py
4. 主文件main.py

3. 窗口show的逻辑

1 。用例列表的窗口 和 步骤列表窗口的show,写在main
这样做的可以有的好处就是,caselistwinow 和stepslistwindow 两个文件都是独立的
(比如:要升级一个窗口,单独去升级代码就行了,不影响 两一个窗口)

2. 【新增编辑步骤窗口的show逻辑】,是直接写到【步骤列表窗口】的逻辑代码中

4. caselist_winodow中,不引入 步骤窗口,如何打开步骤窗口
1. 用例窗口中,创建信号和发射信号

2 .外部文件中,用例窗口实例, 监听信号, 并做对应的槽函数

5. add或编辑步骤窗口的关闭(同上)
【新增或编辑步骤窗口】中自定义信号 和发射信号


6. add或编辑步骤窗口 的 提醒外部刷新 的信号
自定义信号和发射信号


7. 用例列表窗口中,防止按钮被多次点击
如下图,两个地方,需要防止多次点击

如第一个地方,原来的代码是(点击【编辑步骤】,打开另一个窗口):
elif action =="编辑步骤":current_test_case_id = self.tableWidget.item(row, 0).text()current_test_case_name = self.tableWidget.item(row, 1).text()# 发射信号,外部去监听,一收到就要代开另一个窗口self.show_stepswindow_signal.emit(current_test_case_id, current_test_case_name)
如果多次,点击 【编辑步骤】按钮, 就会打开多次窗口,存在bug

解决方法:
点击之后,就把按钮禁用,然后到try中去实现逻辑,finally,300毫秒后,再把按钮启用

8. 步骤列表窗口中,打开【add或编辑步骤窗口时】防止多次点击(基本同上)。
本来打开 【add或编辑步骤窗口时】是 edit_step 和 add_step()方法,解决方法就是再封装到另一个方法中,传如button, 一开始就禁用button

9. from functools import partial 的使用。
它是一个类似lambda的东西,用法如下:
在步骤列表stepslist_window中,有遍历数据,然后给每行数据加了按钮。
遍历中,有这行代码:
edit_button.clicked.connect(lambda : self.safe_edit_step(edit_button,row_index))
如果是这样写的,
edit_button,始终是最后一个。按钮置灰的也是最后一个才置灰,打开的也是最后一个步骤的内容 
如果改成这样写 ,就可以把每次遍历到的 edit_button 用起来,传到方法中。
edit_button.clicked.connect(partial(self.safe_edit_step, edit_button,row_index))

原因分析

10. 项目中多线程的使用

每次,start(),去完成执行方法时,他就是多线程。 代码中并且向外部发射信号,执行一步,就可以打印日志。

工具
如下:仅学习使用、可私信我源码:
通过网盘分享的文件:main.exe
链接: https://pan.baidu.com/s/1v-q9sqNCv-a371Qg4LqtYQ?pwd=9yqd 提取码: 9yqd
要想实现qt界面中的浏览器操作,要使用js
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtCore import QUrl
import sys"""
如果你熟悉 JavaScript,就可以利用 PyQt 的 QWebEngineView 提供的 runJavaScript() 方法,在 Qt 界面中的浏览器中实现类似 Selenium 的操作。
通过 JavaScript,你可以操作网页中的 DOM 元素,模拟用户交互(如点击按钮、填写表单、提交请求等)。
"""class Window(QWidget):def __init__(self):super().__init__()self.setWindowTitle("控制 QWebEngineView 中的网页")self.resize(1000, 1000)self.set_ui()def set_ui(self):# 按钮self.btn = QPushButton("模拟输入和搜索", self)self.btn.move(10, 10)self.btn.clicked.connect(self.simulate_web_interaction)# 嵌入 QWebEngineViewself.web_view = QWebEngineView(self)self.web_view.setGeometry(50, 50, 800, 600)self.web_view.load(QUrl("https://www.baidu.com"))def simulate_web_interaction(self):# 在 QWebEngineView 中执行 JavaScriptscript = """document.querySelector('input[name="wd"]').value = 'Python'; // 输入内容document.querySelector('form').submit(); // 提交表单"""self.web_view.page().runJavaScript(script)if __name__ == "__main__":app = QApplication(sys.argv)window = Window()window.show()sys.exit(app.exec_())
相关文章:
selenium+pyqt5自动化工具总结
说明:本工具是,操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的, 工具在后面 1. 代码结构 pycharm打开的文件下,再写一个子文件,文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…...
docker GPU安装
docker 离线安装 docker下载地址:https://download.docker.com/linux/static/stable/x86_64/ 解压: tar xzvf docker-24.0.6.tgz移动解压后的内容 sudo mv docker/* /usr/local/bin/创建 docker.service配置文件 sudo vim /etc/systemd/system/dock…...
hutool糊涂工具通过注解设置excel宽度
import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…...
Three.js教程015:全面讲解Three.js的UV与应用
文章目录 全面讲解UV与应用UV介绍代码演示完整代码全面讲解UV与应用 UV介绍 在 Three.js 中,UV 坐标(也称为纹理坐标)是用来定义纹理如何映射到三维模型上的一组二维坐标。UV 坐标的范围通常是 (0, 0) 到 (1, 1),其中: U 对应纹理的横向轴(类似于 X 轴)。V 对应纹理的…...
IOS界面传值-OC
1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 (1)ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...
阿里mod_asr3.0集成webrtc静音算法
alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码,编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…...
[Git] git pull --rebase / git rebase origin/master
1. git pull --rebase 这个命令是用来更新当前分支的,它会从远程仓库拉取更新,然后将你的本地提交重新应用到更新后的基础之上。它相当于先执行 git fetch,然后在当前分支上执行 git rebase origin/。使用 --rebase 而不是默认的 merge 可以…...
Leetcode3270:求出数字答案
题目描述: 给你三个 正 整数 num1 ,num2 和 num3 。 数字 num1 ,num2 和 num3 的数字答案 key 是一个四位数,定义如下: 一开始,如果有数字 少于 四位数,给它补 前导 0 。答案 key 的第 i 个数…...
第十一章 施工监测
11 施工监测 11.1 施工监测主要内容、常用仪器与方法 11.1.1 主要内容 1.目的和意义 及时掌握工程自身及周边环境风险动态、通过分析和预测工程结构及周边环境的安全状态与发展趋势,优化调整设计参数和施工参数提供数据支撑。为今后同类工程施工提供类比资料 2…...
Python爬虫应用领域
Python爬虫作为一种强大的数据获取工具,在多个领域发挥着重要作用。以下是Python爬虫在不同领域的应用情况: 一、数据采集与分析 (一)市场调研 产品信息收集:爬取电商平台的产品详情、价格、销量、用户评价等数据&am…...
软件架构考试基础知识 002:进程的状态与其切换
进程状态转换的说明 在操作系统中,进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明: 1. 三态模型(Three-state Model) 三态模型是最基础的进程状态模…...
新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
首次突破月交付2万辆规模的小鹏汽车,稳吗? 本周,高工智能汽车研究院发布的最新监测数据显示,2024年11月,小鹏汽车在国内市场(不含出口)交付量(上险口径,下同)…...
VideoPlayer插件的功能和用法
文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…...
.NET体系架构
引言 .NET是由微软开发的一个广泛应用的开发平台,旨在帮助开发者构建各种类型的应用程序,包括桌面应用、Web应用、移动应用和云服务。最初,.NET平台的构建主要集中在Windows环境上,但随着.NET Core和随后.NET 5及以上版本的推出&…...
QT中引入OpenCV库总结(qmake方式和cmake方式)
文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境,写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...
matlab系列专栏-快捷键速查手册
目录 1在命令窗口(Command Window)中 2. 在编辑器(Editor)(m文件)中 1在命令窗口(Command Window)中 1)【↑、↓】——切换到之前、之后运行过的命令,可以重复按多次来达到想要的命令。 2)【Tab】——自动补全。在Command窗口,…...
对于 NestJS + TypeORM 查询构造器分页功能的简单二次封装
NestJS 作为 Node.js 领域备受欢迎的框架,其与 TypeORM 的结合为开发者提供了强大的 ORM 能力,简化了数据库操作。然而,在处理分页查询时,直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此,我们可以通过…...
Kafka消息队列出现消息堆积如何解决
Kafka消息队列出现消息堆积,通常是由于消息生产速度远大于消费速度,可能由消费者处理能力不足、网络问题、Kafka配置不合理等原因导致。以下从多个方面介绍应对消息堆积的方法: 消费者端优化 提升消费并行度 增加消费者实例数量:…...
LeetCode hot100-100
287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组…...
Vue.js:现代前端开发的灵活框架
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)
目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 编辑编辑 UDP的特征 socke函数 bind函数 recvfrom函数(接收函数) sendto函数(发送函数) 五、网络编程之 UDP 用…...
6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
