自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 分析结论:AI程序员 PK 传统程序员

在AI时代,人类程序员和AI程序员可以进行更紧密的合作,共同解决复杂的问题。人类程序员可以利用人类的创造力和直觉来指导和优化AI系统,从而发挥双方的优势,实现更高水平的创新和发展。虽然他们可以基于已有的数据和规则生成新的解决方案,但在面对需要创新和突破传统思维框架的问题时,他们可能表现不佳。在开发涉及情感交互的应用程序时,人类程序员的角色仍然至关重要,因为他们能够更好地理解和满足用户的情感需求。他们需要不断更新自己的技能,学习新的编程语言、开发工具和人工智能技术,以适应行业的变化。

2024-03-27 10:33:03 409

原创 【Python难点答疑】2、为什么要有@classmethod和@staticmethod,有什么区别?

Python为了解决问题,採用classmethod修饰符的方式,这样定义出来的函数就能够在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。静态方法通常用于类的工具函数,它们与类相关,但不需要访问类或实例的任何属性。它们允许我们定义与类相关的方法,而不需要实例化类。与普通方法不同,类方法可以访问类的属性和调用其他类方法。综上所述,静态方法和类方法都是用来定义类中的方法的特殊装饰器,它们在不同的场景中发挥着不同的作用,但都有助于提高代码的组织性、可读性和复用性。

2024-03-20 17:46:05 522

原创 【Python难点答疑】1、为什么要引入类型提示(Type Hints)的特性

这样,即使其他开发人员传递了错误的参数类型,IDE 或静态类型检查工具也会立即提示错误,从而避免在运行时出现类型不匹配的问题。例如,在调用 calculate_area 函数时,IDE 就可以自动显示函数的参数和返回值类型,并提供相应的补全选项,让开发人员更加方便地编写代码。当函数的参数类型和返回值类型在代码中非常明确,并且不会发生变化时,可能不需要额外的类型提示。通过以上例子,可以看到类型提示可以提高代码的可读性、可靠性和可维护性,同时增强了集成开发环境的功能,有助于提高开发效率和代码质量。

2024-03-20 17:43:20 524

原创 【linux】SSH 连接失败: no matching host key type found. Their offer: ssh-rs

要查看 Linux 系统上 SSH 命令支持的算法,可以使用。这个问题经常出现在ssh 服务端版本和客户端版本不匹配。也可以加参数加到 ssh config file,

2024-03-19 11:03:37 828

原创 16、技巧之九: 修改参数,如何让表格翻页滚动到底部?【Selenium+Python3网页自动化总结】

offsetParent —— 是最接近的 CSS 定位的祖先,或者是 td,th,table,body。offsetLeft/offsetTop —— 是相对于 offsetParent 的左上角边缘的坐标。offsetWidth/offsetHeight —— 元素的“外部” width/height,边框(border)尺寸计算在内。clientLeft/clientTop —— 从元素左上角外角到左上角内角的距离。

2024-03-13 13:55:39 549

原创 15、技巧之八: 如何确认WebDriver支持哪个版本的Xpath?【Selenium+Python3网页自动化总结】

曾经想知道给定的WebDriver支持哪个版本的XPath吗?我们当然希望是2.0或3.0版本,但最可能的版本是1.0。正如Selenium维基所述,WebDriver在可能的情况下使用浏览器的原生XPath功能。当浏览器不支持XPath时(比如IE 6/7/8),Selenium会提供自己的实现,支持XPath 1.0版本。Firefox目前支持XPath 1.0版本,目前没有计划支持XPath 2.0版本。

2024-03-07 12:06:06 294

原创 9、for循环的新旧语法详解【robot framework】

同一个关键字的换行不需要以“\”开头,以下写法会报错:"Escaping empty cells with '\' before line continuation marker '...' is deprecated. Remove escaping before Robot Framework 3.2.在较短的项中缺少的值将使用 fill 选项指定的值填充,如果未使用 fill,则使用 None。FOR循环中使用的关键字位于接下来的行中,循环以END(区分大小写)在单独的行上结束。

2024-01-30 10:54:35 846

原创 7、Json文件的操作总结【robot framework】

在上述例子中,我们使用 Update Value In Json 关键字将 JSON 数据中键为 age 的值从 30 更新为 31。在上述例子中,我们使用 Set Value In Json 关键字设置了 JSON 数据中键为 age 的值为 30。在上述例子中,我们通过 Get Value From Json 关键字获取了 JSON 数据中键为 name 的值。在上述例子中,我们使用 Remove Member From Json 关键字删除了 JSON 数据中的键 age。

2024-01-29 22:20:55 906

原创 8、Robot 递归 Keyword dryrun error: Maximum limit of started keywords exceeded【robot framework】

Run Keyword 和 Call Method 都会将关键字的调用委托给Robot Framework的执行上下文,从而允许在执行关键字时控制递归深度。这样可以确保递归关键字在运行时不会超出递归深度限制,从而避免因此导致的错误。因此,为了在递归关键字中控制递归深度并避免超出Python的默认限制,推荐使用 Run Keyword 或 Call Method 来调用自身。在Robot Framework中,递归关键字通常使用 Run Keyword 或。

2024-01-29 22:15:30 228

原创 【linux】history命令显示时间的例子

表示时间(时:分:秒)。命令查看命令历史时,将会显示每个命令执行的具体时间,按照你设置的时间格式。如果使用其他编辑器,请按照相应的步骤保存文件。环境变量来显示命令的执行时间。命令中时间的显示格式。在文件的末尾添加以下行,或者修改已存在的。)编辑用户的shell配置文件,通常是。你可以根据自己的需求组合这些格式。在Linux中,你可以通过设置。表示日期(年-月-日),

2024-01-12 23:14:26 916

原创 【linux】利用echo命令实现不换行的倒计时

这个脚本会从5小时开始,每秒更新一次,以时:分:秒的格式显示倒计时,实现一个从5小时倒计时到0的功能。echo -ne "\r"会将光标移动到当前行的开头,实现不断更新同一行的效果。\nnn 插入nnn(八进制)所代表的ASCII字符;-n:取消行末之换行符号(与 -e 选项下的 \c 字符同意。\f 换行但光标仍旧停留在原来的位置;-E:关闭反斜线控制字符的转换(预设如此)\n 换行且光标移至行首;-e:启用反斜线控制字符的转换。2、实现“时:分:秒”格式的倒计时。\b 删除前一个字符;

2024-01-12 23:00:33 673

原创 【linux】echo命令踩坑详解

想用echo 命令把修改完的一段字符写入文件,发现换行符被当作正常字符处理了。一查发现默认是特殊字符是不转义的。在shell脚本中,echo常用于显示消息或输出其他命令的结果。echo命令的语法echo[-neE] [参数]echo命令示例。

2024-01-02 17:12:09 1083

原创 4、APScheduler: 详解Scheduler种类用法、常见错误与解决方法【Python3测试任务管理总结】

在APScheduler中,有七种类型的调度器(Scheduler)可供选择,每种调度器适用于不同的应用场景。总体来说,当使用APScheduler的调度器时,要注意选择适合你应用需求的调度器类型,并确保正确导入和配置。这些调度器通常在特定框架或库的上下文中使用,因此在使用时应确保你的应用程序使用了相应的框架。适用于大部分场景,是常用的调度器类型。总体而言,在选择和配置这些特定场景下的调度器时,理解和遵循相关框架的异步编程规范,以及阅读APScheduler文档中的相关章节是非常重要的。

2023-12-15 17:19:05 1150

原创 3、APScheduler: 详解Trigger种类和用法【Python3测试任务管理总结】

在创建触发器时,确保选择了正确的触发器类型,并使用了正确的参数。在使用时,根据任务执行的时间规律和频率,选择合适的触发器来配置任务。总的来说,在使用APScheduler的触发器时,仔细阅读文档并确保正确设置参数是避免错误的关键。确保设置的值在合理的范围内。SimpleTrigger 是一个简单的触发器,允许你设置任务的开始时间、结束时间、间隔次数等。在使用APScheduler的触发器(Trigger)时,有些常见的错误可能会出现。确保你在创建任务时使用了有效的触发器,并且触发器的参数设置正确。

2023-12-15 14:51:36 809

原创 2、APScheduler分布式任务调度、监听器的用法【Python3测试任务管理总结】

添加任务时,确保任务可以在所有节点上执行。APScheduler提供了分布式任务调度的支持,允许你在多个节点上执行任务。这对于需要横向扩展和分布式部署的应用程序来说非常有用。在上述例子中,监听器将在任务执行成功('job_executed')和任务执行失败('job_error')时被调用。分布式任务调度和监听器是APScheduler中的两个强大功能,使得在大规模和分布式的应用中更容易管理和监控任务。监听器允许你监控和响应任务执行的各个阶段,如任务开始前、任务执行时、任务执行完成等。

2023-12-15 14:01:00 505

原创 1、APScheduler介绍,用法和常见问题解决【Python3测试任务管理总结】

是一个强大的Python库,用于在指定时间执行定时任务。它基于触发器(trigger)和调度器(scheduler)的概念,允许你在程序中轻松地设置和管理各种定时任务。无论是周期性任务、一次性任务,还是固定时间执行的任务,APScheduler都提供了简单而灵活的解决方案。APScheduler支持将任务存储到数据库中,以便在应用重启后恢复。为了捕获任务执行过程中的异常,你可以通过try-except块包裹任务函数的调用,并在except块中处理异常。3. 添加触发器和任务。

2023-12-15 13:57:06 503

原创 6、详解日期计算、时间计算及格式转换【robot framework】

在这个例子中,${current_time} 是当前时分秒,${time_to_add} 是要添加的时分秒,${time_to_subtract} 是要减去的时分秒。在使用这些格式选项时,需要使用 time_format 参数指定待转换或格式化的时间的格式。在这个例子中,首先使用Get Current Date获取当前日期,然后使用Add Time To Date和Subtract Time From Date分别进行加和减操作,最后使用Log To Console输出结果。计算两个日期相差多少时分秒。

2023-12-11 15:48:01 1336

原创 14、技巧之七: expected_conditions的用法详解【Selenium+Python3网页自动化总结】

程序运行时,先把入参赋值:locator=(by, locator), 然后在使用参数前加一个"*"号把元组解包出来变成by, locator两个参数传给driver.find_element, 就变成了driver.find_element(by,locator),比如这样:driver.find_element(By.ID, "xxx")的形式了。页面元素过期了,无法引用元素。presence_of_all_elements_located(locator) (具有指定定位器的元素都出现)

2023-12-11 11:21:33 1345

原创 5、修改列表中的字典字段【robot framework】

例子二:修改frame_structure_list中的frame列表的第一个元素(对应List中的下标是0)例子一:修改List2中的List1的第三个元素(对应List中的下标是2)

2023-12-08 23:56:38 415

原创 4、读字典中的字典,或列表中的字典 【robot framework】

【代码】4、读字典中的字典,或列表中的字典 【robot framework】

2023-12-08 23:51:05 633

原创 1、案例一:语音合成,支持中英文字转语音【Python人工智能】

它是 pyttsx 的升级版本,具有更好的兼容性和一些新功能。pyttsx3 是基于 ESpeak 引擎的封装,可以在不同的操作系统上运行,并提供简单而直观的 API 来进行文本到语音的合成。pyttsx3 是一个简单易用的库,适用于快速实现基本的文本到语音功能。如果你需要更高级的 TTS 功能,例如更多语音效果、更多语音引擎的选择,可能需要考虑其他更专业的 TTS 库。

2023-12-05 10:11:25 580

原创 13、技巧之六:Remote Webdriver和Selenium Grid的应用实例【Selenium+Python3网页自动化总结】

在这个例子中,我们使用 webdriver.Remote 创建了一个远程 WebDriver 实例,指定了远程 Selenium Server 的地址(remote_url)和浏览器的期望配置(capabilities)。为了将 Selenium 测试定向到远程计算机,你需要使用一个 Remote WebDriver 类,并传递包含该计算机上 Grid 端口的 URL。接下来,使用 Python 编写一个测试脚本,连接到远程的 Selenium Server,然后在远程浏览器中执行测试。

2023-12-04 16:38:11 1145

原创 3、详解两种可变长参数的用法 【robot framework】

语法表示自由命名的可变长关键字参数。,这意味着它接受要执行的命令(command)、其参数作为可变数量的参数(*arguments),最后是可选的配置参数作为自由命名参数(**configuration)。关键字内部,我们使用 Log 关键字打印了接收到的关键字参数 ${kwargs},并使用 Get Length 关键字计算了参数的数量,并将结果打印出来。关键字内部,我们使用 Log 关键字打印了接收到的参数 ${args},并使用 Get Length 关键字计算了参数的数量,并将结果打印出来。

2023-12-04 16:05:21 466

原创 1、变量前面符号 ‘@‘ , ‘$‘, ‘&‘和‘%’的差异详解 【robot framework】

{my_list} 访问整个列表对象 my_list。你可以使用它来访问整个列表变量 my_list,或者使用 ${my_list}[index] 的语法来访问列表的特定项。@{my_list} 访问列表变量 my_list 的各个项。但是为什么我们可以使用 ${my_list} 和 @{my_list} 两种语法访问列表变量 my_list 呢?当你想要将列表变量拆分为其各个项时,必须使用 @{my_list} 语法。每当你想要访问列表变量的容器时,必须使用 ${my_list} 语法。

2023-11-30 10:25:13 1159

原创 12、技巧之五:菜单必杀技!从主菜单移到二级子菜单再点击鼠标 【Selenium+Python3网页自动化总结】

在这个例子中,我们首先创建一个 ActionChains 实例,然后使用 move_to_element 方法执行悬停动作,接着使用 drag_and_drop 方法执行拖放动作。最后,通过 perform 方法执行创建的所有动作。这样,可以模拟用户在网页上的鼠标悬停和拖放操作。在Selenium中,ActionChains 类允许你将一系列的动作链接在一起,以执行复杂的用户交互。这对于模拟用户在网页上的实际操作非常有用,特别是那些涉及到鼠标和键盘的操作。这对于执行更复杂的操作,如悬停和拖放,非常有用。

2023-11-27 17:20:43 545 1

原创 11、技巧之四:从 <ul> 里面读 <li> 列表内容【Selenium+Python3网页自动化总结】

【代码】11、技巧之四:从 <ul> 里面读 <li> 列表内容【Selenium+Python3网页自动化总结】

2023-11-27 17:13:50 846 1

原创 10、技巧之三:Windows11后台打开浏览器【Selenium+Python3网页自动化总结】

自从2018年开始,Windows下新版的浏览器也支持后台打开了,只要加一个参数。

2023-11-23 18:04:24 179 1

原创 grep命令:两种方法找不包含某个字符串的内容

有两种方式实现,对比看出正则表达式要慢一些:

2023-11-23 16:04:42 1258 1

原创 9、技巧之二:Firefox文件上传和自动下载 【Selenium+Python3网页自动化总结】

一、文件上传找到上传的标签,然后把本地文件路径发上去就可以了,可以是相对路径或绝对路径。二、文件自动下载Content-Type,内容类型,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。ContentType属性指定响应的 HTTP内容类型,如果未指定 ContentType,默认为TEXT/HTML。

2023-11-22 16:44:03 219

原创 8、技巧之一:操作滚动条 【Selenium+Python3网页自动化总结】

假如网页有一个class name叫"list_one"的列表,需要滚动这个列表。

2023-11-22 15:09:55 481

原创 7、设计模式介绍:网页对象 【Selenium+Python3网页自动化总结】

是为网页的每个部分创建一个对象,用面向对象的方式来操作网页元素。这种技术有助于在测试代码和实际与网页交互的代码之间建立分离。这种模式通常划分为三个类:Page,PageElements和Locators。将网页元素的定位信息都封装在一个类里面,建议每个网页定义一个Locator类。调用前面两个类,实现对每个网页的内容读取、点击等操作。实现对网页元素的读写通用操作。应用实例:一个测试用例。

2023-11-20 18:19:40 281 1

原创 6、动态网页元素的两种等待操作【Selenium+Python3网页自动化总结】

由于现在的网页大部分使用了AJAX技术,很多网页元素是动态加载的。当我们打开网页时,即使网页的onload方法已经执行完,有些元素还要一些时间才会全部加载出来。函数设置WebDriver在查找元素时最多要轮询多少秒。两个类来实现等待某个事件的发生。

2023-11-19 23:48:09 49

原创 5、查找定位网页元素【Selenium+Python3网页自动化总结】

详细介绍:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors。如果路径以斜杠 / 开始,那么它表示到所需元素的绝对路径。,如果路径以 // 开始,则查找文档中满足以下条件的所有元素。CSS选择器,用于告诉浏览器应选择哪些HTML元素,以便将CSS规则内的属性值应用于它们。6、用CSS Selector查找。5、用Class Name查找。3、用xpath查找。

2023-11-17 22:59:53 400

原创 4、cookie的导入导出【Selenium+Python3网页自动化总结】

操作过程就是:先用selenium打开一个网页,手动登录之后,再把cookie导出到一个文件,下次自动化访问网页就可以导入cookie文件, 不需要再手动登录了。一些网站需要用户登录后才能看内容,就要用到cookie把登录信息记下来。

2023-11-16 22:42:57 160

原创 3、网页基本操作<Selenium+Python3网页自动化总结>

注意:get函数是等网页的onload方法执行完就结束,如果有websocket或者ajax技术加载的内容很可能读不出来,要用后面文章的方法。#如果元素在form里面,可以用更方便的方法来提交表单数据。

2023-11-16 09:48:20 37 1

原创 2、Robot Framework实例: 写一个keyword返回两个的参数 【robot framework】

【代码】Robot Framework实例: 写一个keyword返回两个的参数。

2023-11-14 17:40:18 119

原创 2、如何写一个Web UI测试用例<Selenium+Python3网页自动化总结>

请注意,如果您的页面在加载时使用大量 AJAX,那么 WebDriver 可能不知道它何时已完全加载。quit 方法将退出整个浏览器,而 close 方法将关闭一个选项卡,但如果它是唯一打开的选项卡,默认情况下大多数浏览器将完全退出。方法是初始化的一部分。该方法将在您要在此测试用例类中编写的每个测试函数之前调用。本用例要实现的操作:打开百度网站,搜索”python“,验证搜索结果是否包含字符串"Welcome to"。该方法内的第一行创建对 setUp 方法中创建的驱动程序对象的本地引用。

2023-11-14 16:04:58 23

原创 PTP精密时钟同步的原理总结与问题分析

PTP精密时钟同步的原理总结

2023-11-11 23:55:22 680

原创 Windos10和Windos11 配置intel网卡vlan的方法

备注如果win10在配vlan的时候电脑重启,可以安装解决1. 安装 PROWinx64-25.2.exe2. 打开Intel PROset Adapter Configuration Utility3. 选择intel带型号的网卡:no ok:Intel PRO/1000 PT Dual Port server adapter (只是描述速率没有信号)

2023-11-03 18:17:54 5108 2

原创 1、安装<Selenium+Python3网页自动化总结>

Selenium+Python3.7网页自动化测试

2023-07-30 17:01:06 61 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除