软件测试|使用selenium实现文件上传

简介

文件上传是我们web自动化测试工作中经常使用的场景,selenium同样也是支持我们实现自动化的文件上传操作,本文就来给大家介绍一下selenium如何实现自动化文件上传。

input标签文件上传

一般情况下,文件上传的按钮是一个<input>标签,并且附带的type属性为file,这样的标签我们可以使用send_keys()方法来实现文件上传。

页面代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
</head>
<body>
<fieldset>
    <legend>文件上传</legend>
    <form action="">
        <input type="file" name="upfile" value="">
    </form>
</fieldset>
</fieldset>
</body>
</html>

我们实现文件上传的代码如下:

# 1.导入selenium
from selenium import webdriver
from time import sleep
import os
from selenium.webdriver.common.by import By

# 2.打开浏览器


driver = webdriver.Chrome()

# 3.打开页面
url = "file:///" + os.path.abspath("test555.html")
driver.get(url)
sleep(2)

# 4.上传文件
# 4.1 定位上传文件按钮
upfile = driver.find_element(By.NAME, 'upfile')

# 4.2 使用send_keys方法上传文件
upfile.send_keys(r"C:\Users\...\Desktop\测试文件.txt")
sleep(5)

# 5.关闭浏览器
driver.quit()

非input标签文件上传

对于非input标签的文件上传控件,我们需要先找到该控件的元素。这通常需要查看目标网页的HTML结构,以确定控件的选择器。例如,可能是一个<div>元素或<button>元素,点击它将触发文件选择对话框。

页面代码如下:

<!DOCTYPE html>
<html lang="zh-cn">
<meta charset="UTF-8">
<body>
    <div id="file-upload">
        <button id="upload-button">上传文件</button>
    </div>
</body>
</html>

在这个示例中,我们有一个<div>元素,其中包含一个按钮,用于触发文件上传操作。实现文件上传的代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# 设置WebDriver路径
driver = webdriver.Chrome(executable_path="path_to_chromedriver")

# 打开一个示例网页
driver.get("https://example.com")

# 找到上传按钮
upload_button = driver.find_element(By.ID,"upload-button")

# 点击上传按钮
upload_button.click()

# 模拟文件选择对话框
file_input = driver.switch_to.active_element
file_input.send_keys("path_to_your_file.txt")

# 提交文件
submit_button = driver.find_element(By.ID, "submit")
submit_button.click()

# 关闭浏览器
driver.quit()

在这个示例中,我们首先找到"上传文件"按钮,然后点击它。接下来,我们将焦点切换到当前活动的元素,这通常是文件选择对话框,然后使用send_keys方法发送文件的路径。最后,我们模拟点击提交按钮。

总结

本文主要介绍了使用selenium实现文件上传的步骤,对于input标签的文件上传,我们可以直接使用send_keys()来实现文件上传,对于非input标签的文件上传,我们可以使用Keys()操作来实现文件上传的操作,希望本文能帮助到大家。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

纯c++简易的迷宫小游戏

一个用c写的黑框框迷宫 适合新手入门学习 也适合大学生小作业 下面附上代码 总体思路 初始化游戏界面&#xff1a;设置迷宫的大小&#xff08;WIDTH和HEIGH&#xff09;&#xff0c;生成迷宫地图&#xff08;map&#xff09;&#xff0c;包括墙壁、空地、起点和终点。显示…

设计模式-委托模式

设计模式专栏 模式介绍模式特点应用场景委托模式在GUI编程场景的应用代码示例Java实现委托模式Python实现委托模式 委托模式在spring中的应用 模式介绍 委托模式是一种软件设计模式&#xff0c;其中一个对象&#xff08;委托对象&#xff09;将某些操作委托给另一个对象&#…

关于queue的两道编程题

在蓝桥网站上面的两道题 https://www.lanqiao.cn/problems/1113/learning/?page1&first_category_id1&problem_id1113 #include <bits/stdc.h> using namespace std; int main() {queue<string> V,N;int m;cin>>m;while(m--){string op;cin>>…

5文件操作

包含头文件<fstream> 操作文件三大类&#xff1a; ofstream : 写文件ifstream &#xff1a;读文件fstream : 读写文件 5.1文本文件 -文件以ascii的形式存储在计算机中 5.1.1写文件 步骤&#xff1a; 包含头文件 #include "fstream"创建流对象 ofs…

Edge浏览器入门

关于作者&#xff1a; CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP&#xff0c;带领团队单日营收超千万。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业化变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览…

亚马逊店飞飞ERP系统,跟卖+铺货+物流发货模式综合一体的ERP系统

跨境电商亚马逊&#xff0c;目前为止电商行业比较靠前的电商平台&#xff01;那么有人做电商&#xff0c;就会有人出单&#xff0c;有人出单就会有中转仓需求&#xff0c;代打包&#xff0c;代贴单&#xff01;那么这一切都是有一套逻辑完善的ERP来完成&#xff01;前端通过授权…

MySQL面试题 | 07.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

乡镇档案有必要进行档案数字化吗?

乡镇档案进行数字化是有必要的。数字化可以将纸质档案转化为电子文件&#xff0c;提高档案的存储和管理效率。以下是一些数字化档案的好处&#xff1a; 1. 提高存储效率&#xff1a;数字档案可以节省大量的物理空间&#xff0c;减少纸质档案的存储和维护成本。 2. 方便检索和共…

VS QT 创建新的QT类后,编译报错无法解析的外部符号 “public: virtual struct QMetaObject const *

问题描述&#xff1a; 新建QT的 Widgets 类&#xff0c;创建新的窗口 在编译的时候出现以下报错信息&#xff1a; 1>vfhclassifydialog.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl VfhClassifyDialog::metaObject…

【python入门】day27: 模拟高铁售票系统

界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…

Vue-路由-声明式导航

1. 导航链接 vue-router 提供了一个全局组件 router-link (取代 a 标签) 能跳转&#xff0c;配置 to 属性指定路径(必须) 。本质还是 a 标签 &#xff0c;to 无需 #能高亮&#xff0c;默认就会提供高亮类名&#xff0c;可以直接设置高亮样式 如&#xff1a; <div class&…

数据结构及其简单实现

栈 先进后出栈顶操作&#xff08;栈顶进&#xff0c;栈顶出&#xff09; class Strock {constructor() {this.data [] // 可以是对象this.count 0}push(item) {// 实现有三种// 1. this.data.push(item); // 2. this.data[this.data.length] item; this.count// 3this.dat…

五种嵌入式经典通信总线协议

一.先前知识 1.并行与串行 并行通信和串行通信是两种不同的数据传输方式&#xff1a; 并行通信&#xff1a;并行通信是指在同一时间使用多条并行传输的线路传输多个比特的数据。每个比特使用独立的线路进行传输&#xff0c;同时进行。这样可以在一个时钟周期内传输多个比特&…

Kafka入门基本概念(详细)

什么是kafka Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在现代网络上的许多社会功能的一个关键…

c语言-数据类型(下)

目录 4.实型变量 5.字符常量 直接常量&#xff1a; 转义字符&#xff1a; 6.字符变量 7.字符串常量 五、输出格式总结 整型&#xff1a; 浮点型&#xff1a; 字符及字符串&#xff1a; 指针&#xff08;地址&#xff09;&#xff1a; 六、typedef 七、sizeof一个问…

Lazada测评,掌控自养测评号补单技巧,实现销量提升

稳定的Lazada测评除了需要搭建稳定的国外网络环境外&#xff0c;对于养号下单技巧也非常重要。 1.Lazada店铺的listing优化需精心打磨。商品主图、标题、详情页等核心要素&#xff0c;均需细心雕琢&#xff0c;以吸引买家的目光。站在消费者的角度&#xff0c;洞察需求&#x…

LabVIEW编码器自动校准系统

简介 在工作中&#xff0c;精确的角度测量和校准对于保持设备精度至关重要。开发了一套自动化角度编码器校准系统&#xff0c;利用了LabVIEW的强大功能。该系统以全圆连续角度标准装置为基础&#xff0c;配合二维导轨装夹系统&#xff0c;实现了空心轴角度编码器的高效自动校…

数据库往年试卷

实体完整性规则是指关系中的元组在组成主码的属性上是不能为空值的 参照完整性规则指外码不允许参照不存在的相应的主码值,或外码为空值 用户自定义完整性规则是用户根据具体应用定义的 关系数据库有三种基本关系运算&#xff1a;1、选择&#xff1b;2、投影&#xff1b;3、连…

Robotframework自动化测试环境搭建

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 1、在2019年之前&#xff0c;robotframework-ride的版本一…

【HTML5】 canvas 绘制图形

文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签&#xff1a;可用于在网页上绘制图形&#xff08;使用 JavaScript 在网页上绘制图像&#xff09;画布是一个矩形区域&#xff0c…