《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇

news2024/11/28 10:54:42

软件测试微信群:https://bbs.csdn.net/topics/618423372 有兴趣的可以扫码加入 

1.简介

前边的三篇文章基本上对文件上传的知识介绍和讲解的差不多了,今天主要是来分享宏哥在文件上传的实际操作中发现的一个问题:input控件和非input控件的上传API对其都可以上传成功。废话不多说直接进入正题。

2.项目实战

宏哥之前在讲解和分享Java+selenium系列时,将其划分为非input控件上传文件,当时为了实现文件上传可是费了一番周折。我们接下来看看这个测试场景。

2.1测试场景

打开百度首页,搜索按钮左侧有一个照相机的图标,点击可以选择图片搜索,我们通过本地上传图片的过程来模拟文件自动化上传操作,上传成功后,百度识图会识别是不是百度搜索的图片,如果是,就会显示图片的信息,如果不是,就会识别失败,提示重新上传。准备条件,你在百度图片搜索一个图片,保存到你桌面,例如宏哥找到一个关于selenium的图片,然后保存在桌面的test文件夹,名称为北京宏哥的拼音首字母:bjhg.jpeg。首先宏哥按我们常规思路:非input控件上传文件。

3.非input控件上传文件

3.1代码设计

3.2参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-04-26
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    # 定位选择文件照相机按钮,并点击
    page.locator("//*/span[@class='soutu-btn']").click()
    page.wait_for_timeout(1000)
    with page.expect_file_chooser() as fc_info:
         page.locator("//*[@id='form']/div/div[2]/div[2]/input").click()  # 点击上传附件按钮
    file_chooser = fc_info.value
    file_chooser.set_files('E:/Desktop/test/bjhg.jpeg')  # 上传文件
    # 为了清楚看到上传后的图片,宏哥加大了等待时间
    page.wait_for_timeout(10000)
    print("browser will be close");
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
3.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

接下来,我们再按input控件上传文件,看看能不能成功,马上就是见证奇迹的时候了。

4.input控件上传文件

4.1代码设计

4.2参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-04-26
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    # 定位选择文件按钮
    page.locator("//*/span[@class='soutu-btn']").click()
    page.locator("//*[@id='form']/div/div[2]/div[2]/input").set_input_files('E:/Desktop/test/bjhg.jpeg')
    page.wait_for_timeout(3000)
    print("browser will be close")
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
4.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

5.总结分析

input控件API上传成功和非input控件API上传成功的原因是:宏哥刚好定位的是input控件,而且这个input控件点击后会弹出文件选择对话框事件,所有两种方法都可以。

5.1input控件API上传成功的原因

1.宏哥经过长时间的总结和分析,最后再一次偶然机会中,突然发现以上两种方法都可以上传的原因了:宏哥刚好将定位在input控件上了所以适用input的控件上传文件的API可以成功上传图片。如下图所示:

5.2input控件API上传成功的原因

从上边的原因得知宏哥定位在input控件上了怎么非input的控件方法也适用,将图片上传成功。因为这个input就是之前的“选择文件”的按钮,点击后,非input控件监听窗口弹出事件,然后就上传成功了,不信的话,宏哥将这个input控件加上文字“上传图片”,我们可以看到刚好就之前的“选择文件”的文字覆盖了。如下图所示:

6.验证

可能有的小伙伴或者童鞋们不信或者还是不明白,宏哥在这里再次验证一下。怎么验证???

第一步:首先宏哥定位到input控件然后点击看看会不会弹出文件选择对话框事件即可。这个就非常简单了。

6.1代码设计

6.2参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-04-26
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    # 定位选择文件照相机按钮,并点击
    page.locator("//*/span[@class='soutu-btn']").click()
    page.wait_for_timeout(1000)
    page.locator("//*[@id='form']/div/div[2]/div[2]/input").click()  # 点击上传附件按钮
    # 为了清楚看到上传后的图片,宏哥加大了等待时间
    page.wait_for_timeout(10000)
    print("browser will be close");
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
6.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

第二步:如果我们定位“选择文件”,点击的话,不会弹出文件选择对话框事件,filechooser监听不到弹出文件选择对话框事件,就会报错。

6.4代码设计

6.5参考代码
# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2024-04-26
@author: 北京-宏哥
公众号:北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: 《最新出炉》系列入门篇-Python+Playwright自动化测试-57- 上传文件 - 番外篇
'''

# 3.导入模块

from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.baidu.com/")
    # 定位选择文件照相机按钮,并点击
    page.locator("//*/span[@class='soutu-btn']").click()
    page.wait_for_timeout(1000)
    # 定位 选择文件
    context = page.get_by_text("选择文件")
    # 确定一下是否定位到,并打印定位到的文本内容
    print(context.inner_text())
    context.click()
    # 为了清楚看到上传后的图片,宏哥加大了等待时间
    page.wait_for_timeout(1000)
    print("browser will be close");
    page.close()
    context.close()
    browser.close()
with sync_playwright() as playwright:
    run(playwright)
6.6运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作。如下图所示:

从上边我们可以看到尝试点击多次都不行,最后报错,如果定位到这个“选择文件”应用非input的API,最后filechooser监听不到弹出文件选择对话框事件,就会报错。宏哥这里就不做演示了,有兴趣的可以自己实践一下。

7.小结

 这一篇主要是介绍一下宏哥在文件上传的实践过程中遇到的一个小插曲,以及为啥会出现这个小插曲的原因。其实搞明白了也很简单的。 好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。下一篇介绍文件下载。

 每天学习一点,今后必成大神-

往期推荐(由于跳转参数丢失了,所有建议选中要访问的右键,在新标签页中打开链接即可访问)或者微信搜索: 北京宏哥  公众号提前解锁更多干货。

Appium自动化系列,耗时80天打造的从搭建环境到实际应用精品教程测试

Python接口自动化测试教程,熬夜87天整理出这一份上万字的超全学习指南

Python+Selenium自动化系列,通宵700天从无到有搭建一个自动化测试框架

Java+Selenium自动化系列,仿照Python趁热打铁呕心沥血317天搭建价值好几K的自动化测试框架

Jmeter工具从基础->进阶->高级,费时2年多整理出这一份全网超详细的入门到精通教程

Fiddler工具从基础->进阶->高级,费时100多天吐血整理出这一份全网超详细的入门到精通教程

Pycharm工具基础使用教程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打破技术壁垒,加速企业数字化转型:低代码平台如何降低开发门槛

科技飞速发展,企业数字化转型趋势不可逆转。数字化转型不仅能够优化内部运营流程,提升管理效率,还能通过数据驱动决策,增强市场竞争力。传统开发模式因技术门槛、周期长,限制了企业创新与响应速度。 低代码平台应运而生…

Android进阶之NDK开发,保姆级教程

目录 前言NDK下载CMake文件创建指定ABI架构编写CMake文件编写JNI方法Java调用CC调用Java 生成JNI头文件实现对应C方法编译so文件编写demo验证运行效果总结 前言 作为Android应用开发从业者来说,掌握NDK开发是必备技能之一,本文将从NDK环境下载&#xff…

Spring源码-xml配置文件如何加载解析默认标签变为BeanDefinition

1.创建Environment new StandardEnvironment() createEnvironment:346, AbstractApplicationContext (org.springframework.context.support) getEnvironment:332, AbstractApplicationContext (org.springframework.context.support) resolvePath:131, AbstractRefreshable…

通俗易懂理解提示词工程、RAG和微调

在当今的人工智能领域,提示工程、RAG(检索增强生成)和微调是三个重要的概念。本文将通过简单易懂的方式,帮助大家理解这三者之间的关系和应用。 大模型的训练过程 📊 在当今的人工智能领域,大模型的训练是…

如何使用 Flask 或 Django 创建 Web 应用

Flask和Django是Python中最受欢迎的两个Web框架,它们各有优点,适用于不同的应用场景。 一、使用Flask创建Web应用 1.1 Flask简介 Flask是一个轻量级的Web框架,以其简洁、易用和灵活著称。它遵循“微框架”的设计理念,只提供核心…

批量输出文件夹内所有文件名和文件——vba实现

导出一个文件夹下所有文件名,可用vba插件实现,如图 如下图,已在桌面生成一个txt文本,但此方法只可输出一级目录下的文件,若输出所有文件,则需修改插件代码 (若想导出硬盘下所有文件和文件夹&…

Windows10+VS2019编译Faiss

先放上我编译好的静态库,要配合OpenBLAS使用 通过百度网盘分享的文件:3rdparty.zip 链接:https://pan.baidu.com/s/1yPys-CX_EdmnJzj66g_KlQ?pwdh6ff 提取码:h6ff –来自百度网盘超级会员V1的分享 1.源码下载 首先下载Faiss地…

C++ STL inner_product 用法

一&#xff1a;功能 求内积&#xff0c; 给定两个向量x&#xff0c;y&#xff0c;内积公式如下&#xff1a; 二&#xff1a;用法 #include <iostream> #include <vector> #include <numeric>int main() {std::vector<int> height…

量子®膜高端服务门店品牌膜天轮全膜服务中心再添新成员 南京膜天轮量子®膜全膜中心(东麟路店)盛大启幕!

7月26日上午&#xff0c;膜天轮量子膜南京全膜中心&#xff08;东麟路店&#xff09;盛大开业&#xff0c;正式成为膜天轮品牌的第二十家门店。 圣戈班舒热佳特殊镀膜有限公司亚太区总裁陈剑超先生、圣戈班舒热佳特殊镀膜有限公司亚太区商务总监李振华先生、圣戈班舒热佳特殊镀…

FlashAttention解析——大预言模型核心组建

论文名称&#xff1a;FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness 论文地址&#xff1a;https://arxiv.org/abs/2205.14135 一、研究FlashAttention的Motivate FlashAttention技术在现在的主流大语言模型中均有应用&#x…

2024靠这份软件测试面试题宝典已成功上岸,跳槽成功

上月很多朋友靠这份面试宝典拿到大厂的office&#xff0c;跳槽成功&#xff0c;面试找工作的小白和要跳槽进阶都很适合&#xff0c;没有一点准备怎么能上岸成功呢&#xff1f; 这份面试题宝库&#xff0c;包含了很多部分&#xff1a;测试理论&#xff0c;Linux基础&#xff0c…

Java中级

IDAE介绍 IDEA&#xff0c;全称为IntelliJ IDEA&#xff0c;是一款由JetBrains公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java开发&#xff0c;但也支持多种其他编程语言和框架&#xff0c;如Kotlin、Scala、Groovy、Android、Spring、Hibernate…

SpringBoot Mysql->达梦8 activiti6.0.0 项目迁移

全部源码&#xff1a;公众号搜索资小库&#xff0c;回复dm获取源码 1.整合达梦 1.1 达梦驱动下载 MyBatis-Plus 框架 | 达梦技术文档 (dameng.com) 1.2 数据迁移 怎么安装数据库&#xff0c;很多大佬有帖子&#xff0c;搜一下达梦先建立用户&#xff0c;使用DM管理工具 链…

【进阶篇-Day13:JAVA中IO流之字节缓冲流的介绍】

目录 1、IO流介绍2、IO流体系结构2.1 FileOutputStream 字节输出流&#xff08;1&#xff09;字节输出流操作方法&#xff1a;&#xff08;2&#xff09; 标准的关流代码&#xff1a; 2.2 FileInputStream 字节输入流&#xff08;1&#xff09;字节输入流操作方法&#xff1a; …

Glove-词向量

文章目录 共现矩阵共线概率共线概率比词向量训练总结词向量存在的问题 上一篇文章词的向量化介绍了词的向量化&#xff0c;词向量的训练方式可以基于语言模型、基于窗口的CBOW和SKipGram的这几种方法。今天介绍的Glove也是一种训练词向量的一种方法&#xff0c;他是基于共现概率…

【每日一题】【回溯+二进制优化】[USACO1.5] 八皇后 Checker Challenge C\C++\Java\Python3

P1219 [USACO1.5] 八皇后 Checker Challenge [USACO1.5] 八皇后 Checker Challenge 题目描述 一个如下的 6 6 6 \times 6 66 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线&#xff08;包括两条主对角线的…

Python设置Excel单元格中的部分文本颜色

文章目录 一、概述二、效果三、示例 一、概述 openpyxl &#xff08;目前&#xff09;不支持设置单元格内部分字体颜色 xlsxwriter 支持设置单元格内部分字体颜色&#xff08;创建新的Excel&#xff09; 二、效果 三、示例 """ Python设置Excel单元格中的部分…

昇思 25 天学习打卡营第 24 天 | MindSpore Pix2Pix 实现图像转换

1. 背景&#xff1a; 使用 MindSpore 学习神经网络&#xff0c;打卡第 24 天&#xff1b;主要内容也依据 mindspore 的学习记录。 2. PixPix 介绍&#xff1a; MindSpore 的 Pix2Pix 图像转换 介绍 Pix2Pix是基于条件生成对抗网络&#xff08;cGAN, Condition Generative Ad…

Oracle如何跨越incarnation进行数据恢复

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG、Mongodb数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享…

Skywalking 入门与实战

一 什么是 Skywalking? Skywalking 时一个开源的分布式追踪系统&#xff0c;用于检测、诊断和优化分布式系统的功能。它可以帮助开发者和运维人员深入了解分布式系统中各个组件之间的调用关系、性能瓶颈以及异常情况&#xff0c;从而提供系统级的性能优化和故障排查。 1.1 为…