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, expectdef 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("/span[@class='soutu-btn']").click() page.locator("/span[@class='soutu-btn']").click() page.wait_for_timeout(1000) 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.小结
这一篇主要是介绍一下宏哥在文件上传的实践过程中遇到的一个小插曲,以及为啥会出现这个小插曲的原因。其实搞明白了也很简单的。 好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。下一篇介绍文件下载。