首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月29日 16:05

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.小结

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

From:https://www.cnblogs.com/du-hong/p/18136140
本文地址: http://shuzixingkong.net/article/563
0评论
提交 加载更多评论
其他文章 编译期链接时共享库搜索路径优先级实验
目录前言实验环境目录说明准备工作单独测试不配置路径默认路径LIBRARY_PATH-L优先级测试默认路径和LIBRARY_PATH-L和默认路径DEBUG模式编译器配置详细信息链接器详细信息DEBUG总结验证默认路径>LIBRARY_PATH原因附录库文件源码主程序源码makefile 前言
编译期链接时共享库搜索路径优先级实验 编译期链接时共享库搜索路径优先级实验 编译期链接时共享库搜索路径优先级实验
ComfyUI插件:ComfyUI Impact 节点(三)
前言: 学习ComfyUI是一场持久战,而 ComfyUI Impact 是一个庞大的模块节点库,内置许多非常实用且强大的功能节点 ,例如检测器、细节强化器、预览桥、通配符、Hook、图片发送器、图片接收器等等。通过这些节点的组合运用,我们可以实现的工作有很多,例如自动人脸检测和优化修复、区域增强、
ComfyUI插件:ComfyUI Impact 节点(三) ComfyUI插件:ComfyUI Impact 节点(三) ComfyUI插件:ComfyUI Impact 节点(三)
我用Awesome-Graphs看论文:解读Pregel
上次向大家分享了论文图谱项目Awesome-Graphs的介绍文章,这次我们就拿图计算系统的奠基文章Pregel开篇,沿着论文图谱的主线,对图计算系统的论文内容进行解读。
我用Awesome-Graphs看论文:解读Pregel 我用Awesome-Graphs看论文:解读Pregel 我用Awesome-Graphs看论文:解读Pregel
c# 多线程环境下控制对共享资源访问的办法
Monitor: 定义:Monitor 是 C# 中最基本的同步机制,通过 Enter 和 Exit 方法来控制对共享资源的访问。它提供了排他锁的功能,确保在任何时刻只有一个线程可以访问共享资源。 优点:简单易用,适合对临界区进行粗粒度的同步控制。
c# 多线程环境下控制对共享资源访问的办法 c# 多线程环境下控制对共享资源访问的办法 c# 多线程环境下控制对共享资源访问的办法
支付宝退款和结果查询接口简单实现(.Net 7.0)
〇、前言 支付宝对 .Net 的支持还是比较充分的,在每个接口文档中都有关于 C# 语言的示例,这样就大大降低了对接的难度,很容易上手。 官方接口文档地址:退款-alipay.trade.refund 退款状态查询-alipay.trade.fastpay.refund.query 本文就简单实现下
支付宝退款和结果查询接口简单实现(.Net 7.0) 支付宝退款和结果查询接口简单实现(.Net 7.0)
从DDPM到DDIM(四) 预测噪声与后处理
从DDPM到DDIM(四) 预测噪声与后处理 前情回顾 下图展示了DDPM的双向马尔可夫模型。 训练目标。最大化证据下界等价于最小化以下损失函数: \[\boldsymbol{\theta}^*=\underset{\boldsymbol{\theta}}{\operatorname{argmin}
从DDPM到DDIM(四) 预测噪声与后处理
安全可信,Solon v2.8.6 发布
Java “纯血国产”应用开发框架:更快、更小、更简单。 并发高 2~ 3 倍;内存省 50%;调试重启可快至 10 倍;打包最多缩小 90%;同时支持 java8 ~ java22, graalvm native image 运行时。
C++命名空间、标准输入输出、引用
1、简述C++中命名空间的作用。 答:避免重复定义全局变量的问题。 2、定义两个命名空间A 和 B 分别在A中和B中定义变量value。在main函数中将两个空间的value打印出来。 #include "iostream" using namespace std; namesp