当前位置: 首页 > news >正文

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。

上传文件有两种场景:input控制上传和非input控件上传。

大多数情况都是input控件上传文件,只有非常少数的使用自定义的非input上传文件。

一、input控件上传文件

查看长传文件的页面元素标签,如果为input表明是通过input控件上传文件。我们可以直接采用WebElement.send_keys(‘文件地址’) 长传文件。

创建html文件,如下:

upload.html


<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><title>upload file</title></head><body><h3>upload file</h3><input type="file" name="file"/></body></html>

示例:长传C:\install.log文件。


from selenium import webdriverimport timedriver = webdriver.Chrome()driver.get(r'E:\XXXX\Html\upload.html') # 文件的地址driver.find_element_by_name('file').send_keys(r'C:\install.log') # 上传文件time.sleep(2)driver.quit()

二、非input控件上传文件

非input控件上传文件,我们要引入外部插件上传。也有两种方法一种通过pywin32上传,另一种是通过autoit上传。这里我们只会讲到autoit上传文件。

下载安装autoit,使用autoit Windows info 识别控件,获取输入框和打开按钮的Class,instance,Classname 3个属性。

autoit官网:https://www.autoitscript.com/site/

1、autoit简介

开始菜单如图:

AutoIt Windows Info 用于帮助我们识Windows控件信息。

Compile Script to.exe 用于将AutoIt生成 exe 执行文件。

Run Script 用于执行AutoIt脚本。

SciTE Script Editor 用于编写AutoIt脚本。

AutoIt开始菜单

2、autoit使用

第一步:使用AutoIT Window Info获取窗口的Title、class属性, 获取控件的ClassnameNN属性。如下图所示:

窗口的Title为‘打开’、class属性‘#32770’
文件名输入框的ClassnameNN属性为“Edit1”
打开按钮的ClassnameNN属性为“Button1”

文件名输入框 属性

打开按钮 属性

第二步:打开SciTE Script Editor编辑器,编写脚本,如下


$CmdLine[0] ; = 2 参数的总数量,不虚赋值$CmdLine[1] ; = 上传文件路径;在10秒内等待打开窗口出现WinWait("打开","",10);ControlFocus("title","text",ClassnameNN) 识别Window窗口ControlFocus("打开", "","");向“文件名”输入框内输入本地文件的路径ControlSetText("打开", "", "Edit1", $CmdLine[1])Sleep(2000);单击打开按钮ControlClick("打开", "","Button1");

代码解释:

表示注释
$CmdLine[0] 获取的是命令行参数的总数,在例中$CmdLine[0]=2,参数化时使用
$CmdLine[1]~$CmdLine[63] 获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数
WinWait(title,text,timeout)设置timeout秒钟用于等待窗口出现,其用法与WebDriver 所提供的implicitly_wait()类似。
ControlFocus("title","text",ClassnameNN) 方法用于识别Window窗口。3个参数窗口Title属性
ControlSetText("title","text", ClassnameNN, param)用于向“文件名”输入框内输入本地文件的路径。
Sleep(2000)表示固定休眠2000毫秒。
ControlClick("title","text", ClassnameNN)用于点击上传窗口中的“打开”按钮。

参数说明:
title 表示窗口的标题即窗口的title属性;
text 控件的文本属性可以使用""替代;
ClassnameNN 控件的ClassnameNN属性
param 需要传入的参数
timeout 时间秒

第三步:通过Aut2Exe(Compile Script to.exe)工具将脚本转成exe文件

生成exe可执行文件

生产exe文件后先通过命令行试试:

打开网页上传弹出窗口 --> cmd中执行该脚本如下

CMD>>>>  upfile.exe "D:\1.html"

可以使用python的os模块来调用改文件了,代码如下:


from selenium import webdriverimport osimport timedriver = webdriver.Chrome()driver.get(r'E:\code\Python\pythonDoc\自动化练习\Html\upload.html')driver.find_element_by_name('file').click()time.sleep(1)# 这里可以对传参进行参数化os.system(r'E:\upload.exe "C:\install.log"')time.sleep(3)driver.quit()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件&#xff0c;上传文件窗口为系统自带&#xff0c;无法识别窗口元素。 上传文件有两种场景&#xff1a;input控制上传和非input控件上传。 大多数情况都是input控件上传文件&#xff0c;只有非常少数的使用自定义的非input上传文件。 一、input控…...

C# Math.Round() 四舍六入五取偶

文章目录 1.重载列表2. 示例 Math.Round() 为四舍六入五取偶 1.重载列表 API说明Round(Double)将小数值舍入到最近的整数值Round(Double, Int32)将小数值按指定的小数位数舍入Round(Double, Int32, MidpointRounding)将小数值按指定的小数位数舍入&#xff0c;MidpointRoundin…...

springboot手动触发参数校验,service层调用参数校验

背景 入参校验一般是在控制层通过javax.validation.constraints包下的规则注解如NotNull结合Valid与Validated实现&#xff0c;但是有时候我们的方法不提供给controller调用&#xff0c;这时候就无法触发自动参数校验&#xff0c;为此我们可以在不更改校验代码的前提下手动触发…...

动手学深度学习4.10 实战Kaggle比赛:预测房价-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;实战 Kaggle 比赛&#xff1a;预测房价_哔哩哔哩_bilibili 本节教材地址&#xff1a;4.10. 实战Ka…...

1035 插入与归并(测试点6)

solution 类型判断&#xff1a;插入排序中已排序的部分有序&#xff0c;未排序的和原数组元素相同&#xff1b;否则为归并排序测试点6&#xff1a;对于归并排序的子序列长度&#xff0c;不能简单视为前k个有序则子序列长度就是k 例如该测试用例的归并排序的子序列长度应该为2&…...

什么情况下需要使用分布式事务,有哪些方案?

引言&#xff1a;在当今的分布式系统中&#xff0c;数据的一致性和事务的处理成为了关键问题。随着应用程序的规模不断扩大和复杂性的增加&#xff0c;单一数据库事务的能力已经无法满足需求。因此&#xff0c;引入了分布式事务的概念&#xff0c;以确保跨多个节点的操作能够保…...

Java加密体系结构参考指南-Java Cryptography Architecture

本文是从英文的官网摘了翻译的&#xff0c;用作自己的整理和记录。水平有限&#xff0c;欢迎指正。版本是&#xff1a;22 原文地址&#xff1a;https://docs.oracle.com/en/java/javase/22/security/java-cryptography-architecture-jca-reference-guide.html#GUID-815542FE-CF…...

C++中避免内存泄漏的方法

在C++中,内存泄漏是一个常见的问题,它发生在程序申请了一块内存后,没有正确地释放它。这会导致程序运行时间越长,内存占用越大,最终可能导致系统崩溃。为了避免内存泄漏,你可以遵循以下一些策略: 正确使用new和delete:当你使用new操作符动态分配内存时,确保在不再需要…...

5.1 实体完整性

一个表只能有一个主键约束&#xff0c;且主键约束不能取空值。 通过unique约束定义唯一性&#xff0c;为了保证一个表非主键列不输入重复值&#xff0c;可在该列定义unique约束。 primary key约束与unique约束主要区别如下。 (1)一个表只能创建一个primary key约束&#xff0…...

(学习笔记)数据基建-数据质量

数据基建-数据质量 数据质量数据质量保障措施如何推动上下游开展数据质量活动数据质量保障如何量化产出数据质量思考全链路数据质量保障项目 数据质量 概念&#xff1a;数据质量&#xff0c;意如其名&#xff0c;就是数据的准确性&#xff0c;他是数据仓库的基石&#xff0c;控…...

WINUI——Behavior(行为)小结

前言 在使用MVVM进行WINUI或WPF开发时&#xff0c;Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持&#xff0c;Behavior就是一种。在WPF中是有Behavior直接支持的&#xff0c;转到WINUI后&#xff0c;相对有一些麻烦&#xff0c;于是在此记录之…...

Ruoyi5.x RuoYi-Vue-Plus新建Translation翻译类

若依框架&#xff08;RuoYi&#xff09;中的Translation翻译类主要作用在于实现字段值的转换或翻译功能&#xff0c;以提高数据展示的准确性和友好性。以下是其具体作用的一些关键点&#xff1a; 字段值转换&#xff1a;若依框架在处理数据时&#xff0c;有时需要将某些字段的…...

类加载的奥秘

一、类的加载过程将类的字节码文件加载到Java虚拟机中进行执行。 1.通过一个类的全限定名来获取定义此类的二进制流字节码文件(如zip 包、网络、运算生成、JSP 生成、数据库读取等)。 2.将这个字节流所代表的静态存储结构&#xff08;如常量池、字段、方法等&#xff09;转化为…...

Spring知识点总结

1. 简介一下Spring框架。 答&#xff1a;Spring框架是一个开源的容器性质的轻量级框架。主要有三大特点&#xff1a;容器、IOC&#xff08;控制反转&#xff09;、AOP&#xff08;面向切面编程&#xff09;。 2. Spring框架有哪些优点&#xff1f;谈谈你的看法。 答&#xff…...

STM32Cube系列教程11:STM32 AES加解密模块性能测试

文章目录 本次测试环境本次测试所使用的系统时钟为48MHz本次测试主要测试对大量数据进行加解密所需的时间&#xff0c;本次为不严谨测试&#xff0c;忽略了程序调用耗时&#xff0c;结果仅供参考。 AES算法与数据加解密加密与解密对称加解密AES算法AES-ECBAES-CBC 填充算法PKCS…...

Vue2基础:.sync修饰符的使用,认识,作用,本质案例演示,实现父子之间的通信。

.sync的作用&#xff1a; 可以实现子组件与父组件数据的双向绑定&#xff0c;简化代码。 与v-model的不同点,prop属性名可以自定义&#xff0c;不要一定要用value. .sync的本质&#xff1a; 就是&#xff1a;属性名和update&#xff1a;属性名合写。 下面我们进行代码演示…...

【数据结构与算法】使用单链表实现队列:原理、步骤与应用

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 &#x1f384;队列的概念 &#x1f384;为什么要用单链表实现队列 二、单…...

DHCP服务

文章目录 一、DHCP介绍二、DHCP应用场景三、DHCP工作原理3.1&#xff09;工作方式3.2&#xff09;工作原理解析3.3)计算机获得IP的时间点3.4&#xff09;租约更新阶段 四、DHCP服务器部署4.1&#xff09;DHCP安装4.2&#xff09;DHCP配置文件详解4.3&#xff09;DHCP启动 五、D…...

C++笔试-剑指offer

剑指offer 文章目录 剑指offer数组[数组中重复的数据 ](https://leetcode.cn/problems/find-all-duplicates-in-an-array/description/)将元素交换到对应的位置 二维数组中的查找二叉搜索树 旋转数组的最小数字二分查找 数组中出现次数超过一半的数字相互抵消 连续子数组的最大…...

Mac安装jadx并配置环境

jadx官网&#xff1a;GitHub - skylot/jadx: Dex to Java decompiler 第一种&#xff1a; 安装jadx命令&#xff1a; brew install jadx 启动jadx-gui命令&#xff1a; jadx-gui 可能遇到的问题&#xff1a; Downloading https://formulae.brew.sh/api/formula.jws.json** h…...

STM32 RTC硬件自检工具CheckRTC:轻量级实时时钟可信度验证

1. 项目概述CheckRTC 是一个面向 STM32 系列微控制器的轻量级 RTC&#xff08;实时时钟&#xff09;模块自检与功能验证程序。其核心目标并非提供通用 RTC 驱动&#xff0c;而是作为嵌入式底层开发中关键的硬件可信度验证工具——在系统启动早期、固件升级后、或长期运行出现时…...

Apache Sedona 使用教程

Apache Sedona 使用教程 项目介绍 Apache Sedona 是一个用于大规模空间数据处理的分布式计算系统。它基于 Apache Spark&#xff0c;提供了高效的空间数据处理能力&#xff0c;支持多种空间数据类型和操作。Sedona 旨在为大数据环境下的地理空间分析提供强大的支持&#xff0c;…...

终极指南:如何用Phosphor Icons创建自定义图标集合的完整教程

终极指南&#xff1a;如何用Phosphor Icons创建自定义图标集合的完整教程 【免费下载链接】homepage The homepage of Phosphor Icons, a flexible icon family for everyone 项目地址: https://gitcode.com/gh_mirrors/home/homepage Phosphor Icons是一个灵活的图标家…...

MVC / MVVM 和 Vue3、React18 到底啥关系?

MVC / MVVM 和 Vue3、React18 到底啥关系&#xff1f; 我用最直白、最贴合你日常写代码的方式讲清楚&#xff0c;保证你瞬间通透。一、先给结论&#xff08;最重要&#xff09; Vue3 标准的 MVVM 框架&#xff08;官方自己定义的&#xff09;React18 借鉴 MVVM 思想&#xff…...

Verilog进阶实战:独热码状态机设计序列检测器的核心技巧

1. 独热码状态机的设计哲学 第一次接触独热码(One-Hot)编码时&#xff0c;我盯着那串只有一个1的状态编码看了半天——这不就是硬件版的"单选题"吗&#xff1f;每个状态都有自己的专属VIP通道&#xff0c;这种设计理念在中小规模状态机中简直是降维打击。记得去年做电…...

深度学习道路提取代码更换数据集后 PyCharm 闪退问题全面解决指南

深度学习道路提取代码更换数据集后 PyCharm 闪退问题全面解决指南 摘要 在基于深度学习的道路提取任务中,更换数据集后常出现 PyCharm 闪退现象。这类问题涉及环境配置、数据加载、内存管理、模型适配等多个层面,往往难以快速定位。本文从 Ubuntu 操作系统、PyCharm IDE、C…...

别再乱用.pem和.key了!用ASN.1 Editor手把手拆解RSA私钥的PKCS#8格式(附OpenSSL 3.1验证)

从文件后缀到密钥本质&#xff1a;用ASN.1 Editor透视RSA私钥的PKCS#8结构 当你在终端输入openssl genpkey -algorithm RSA生成密钥对时&#xff0c;是否曾好奇过.pem文件里那些看似随机的字符究竟隐藏着什么秘密&#xff1f;面对invalid key format的错误提示&#xff0c;又是…...

MMC级联H桥仿真图解析:电压电流双闭环控制策略研究

MMC&#xff0c;级联H桥仿真图&#xff0c;电压电流双闭环。最近在搞MMC&#xff08;模块化多电平换流器&#xff09;的仿真&#xff0c;发现这玩意儿真是电力电子界的乐高——全靠子模块堆叠。特别是级联H桥的结构&#xff0c;玩电压合成比搭积木刺激多了。今天咱们就着电压电…...

XC泰山服务器麒麟V10系统安装全流程解析

1. 准备工作&#xff1a;了解XC泰山服务器与麒麟V10系统 在开始安装之前&#xff0c;我们需要先了解一下XC泰山服务器和麒麟V10操作系统的基本情况。XC泰山服务器是国内自主研发的高性能服务器&#xff0c;采用ARM架构处理器&#xff0c;具有高性能、低功耗的特点。而麒麟V10则…...

利用快马AI三分钟生成Python哈希表原型,快速验证数据存储方案

今天在做一个数据处理的小项目时&#xff0c;突然需要快速验证一个数据存储方案。想到哈希表这种高效的数据结构正好适合&#xff0c;但自己从头实现又太费时间。正好最近在用InsCode(快马)平台&#xff0c;发现它的AI辅助功能可以快速生成可运行的原型代码&#xff0c;于是尝试…...