【实测】vue/elementUI 的文件上传按钮,如何用selenium来自动化上传?(上)

简介: 【实测】vue/elementUI 的文件上传按钮,如何用selenium来自动化上传?(上)

 实测系列,均为一些现实中的行业内难题难点攻关,算是最干的最有营养的系列了,欢迎收看,一键三连~


   标题的这个问题在之前的学员中有人问过。如何用自动化的手段来实现。

   之前在windows的时候,大家尚且会用一些桌面自动化脚本如autoit等来解决那种 系统本身的文件选择框。

   而同样的问题出现在mac的时候,就完蛋了。mac几乎不允许任何软件可以自动的操作界面,所以要有什么办法来解决呢?


   【方案一】 模拟键盘操作

    既然无法自动化操作界面,那么selenium模仿物理键盘应该没问题吧?在打开的文件选择器上,纯用键盘来输入文件路径,粘贴,剪切,回车等来实现。但是这个方法有时候并不可靠,但却简单易懂。

image.png


   【方案二】直接用js或者模拟请求等来实现自动化。

   这个方法的难度较高,而且针对不同前端框架的写法也不同。属于要随机应变的,如果js和前端功底不够,不建议尝试。

   本节就拿最常见的Vue 和 ElementUI的组合来实现吧~


   (在传统的html编写中,上传文件代码的按钮元素为Input type="file" ,所以本质上来说,这个按钮还是一个输入框,所以那时候的人们是直接给这个元素进行send_keys('文件本地路径') 的方式来注入文件的。不过近年来,新的前端样式框架越来越多,上传文件按钮也变得五花八门,对我们selenium自动化来说是很致命的打击。本文便是以最新的时代眼光来解决这个陈年旧事~)


   为了更好的测试,我们需要自己新建一个vue项目,并且用elementUI做一个上传文件按钮的功能。


   在elementui中文件上传按钮组件为:el-upload

   

   我是直接在elementUI官网复制的demo

   代码如下:

image.png

大家注意,红圈部分 是本次的重点代码。


我们把代码复制到我们的pycharm中测试:

image.png

这里已经有了俩个默认展示用的 文件。

我试着上传第三个文件,点击上传按钮后:

image.png

果然弹出了文件选择器,然后我选了一个简历修改建议.docx


页面效果如下:

 

image.png

可以看到第三个文件也上去了。


这里要研究下,为什么前面俩个默认的展示用demo,不用我们上传也一开始就在那了呢?我们要做的自动化不就是想实现这个效果么?


原来,前两个文件在bom层的vue的data中一开始就写好了:

image.png


这个fileList是通过el-upload的 固有属性关联的。

image.png


那么我们现在来假设一下,假如我们可以让这个fileList 数据直接填充某个文件的名字和地址。那会不会就直接实现了上传文件了呢?


为了验证,我们来做个实验:


步骤一:

在bom层给vue实例加上一个可浏览器暴露的引用:

image.png

这样,我们就可以通过myData来在浏览器直接控制vue的内部data


步骤二:在浏览器的控制台console中输入下面命令,然后回车

image.png

这样我们就强行给vue的data中加入了这个目标上传文件-简历修改建议。


步骤三:观察dom层效果

image.png

可以发现,确实是增加了。


步骤四:再循环增加几个数据测试

image.png

效果如下:

image.png


所以我们这个猜想大致上是ok的。


但是这个问题还是没完全结束,毕竟在写selenium自动化中,我们要上传一段js命令,基本上是:

js = 'var q=document.getElementById(\"idddd\");q.style.xxx=(\"xxxx\");'
driver.execute_script(js)


这样的写法。


那么我们这里理论上的写法应该是先看页面的这些data内的变量名称。

然后:


js = 'myData._data.fileList.push({name: '简历修改建议', url: '/Users/wangzijia/Downloads/简历修改建议.docx'})'
driver.execute_script(js)


看起来很简单,也很容理解。

虽然elementUI还有其他几种上传方式,比如拖拽等等,但是归根结底都是在同步类似fileList这个变量,我们只要抓住这个变量,并让其随意变化即可。


但是新问题就来了,如果页面一开始并没有暴露vue实例中的data呢?

对于此问题,涉及的就是另一个领域的问题了。

本节内容够多了,这个问题我们下节再研究了。


相关文章
|
1月前
vue3+Ts 二次封装ElementUI form表单
【10月更文挑战第8天】
190 59
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
1月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
1月前
|
JavaScript API
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
53 1
vue尚品汇商城项目-day04【24.点击搜索按钮跳转后的页面商品列表、平台售卖属性动态展示(开发Search组件)】
|
1月前
|
JavaScript UED
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
【10月更文挑战第5天】本示例展示了如何在 Vue.js 中使用 Element UI 组件实现动态添加和删除嵌套表单项。该表单包含设备信息、设备部位及其对应的任务列表,支持用户动态添加设备部位和任务,并提供相应的表单验证规则。
122 0
Vue + ElementUI 实现动态添加和删除表单项的多层嵌套表单
|
2月前
|
JavaScript
Vue实现按钮级别权限
文章介绍了在Vue中实现按钮级别权限的两种方法:使用自定义Vue指令和使用v-if指令配合自定义方法。
25 4
Vue实现按钮级别权限
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
259 5
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
16天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
13 0
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。