【实测】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呢?

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

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


相关文章
|
5天前
|
Web App开发 JavaScript 前端开发
《手把手教你》系列技巧篇(三十九)-java+ selenium自动化测试-JavaScript的调用执行-上篇(详解教程)
【5月更文挑战第3天】本文介绍了如何在Web自动化测试中使用JavaScript执行器(JavascriptExecutor)来完成Selenium API无法处理的任务。首先,需要将WebDriver转换为JavascriptExecutor对象,然后通过executeScript方法执行JavaScript代码。示例用法包括设置JS代码字符串并调用executeScript。文章提供了两个实战场景:一是当时间插件限制输入时,用JS去除元素的readonly属性;二是处理需滚动才能显示的元素,利用JS滚动页面。还给出了一个滚动到底部的代码示例,并提供了详细步骤和解释。
32 10
|
5天前
|
JavaScript 开发者 UED
Vue入门到关门之第三方框架elementui
ElementUI是一个基于Vue.js的组件库,包含丰富的UI组件如按钮、表格,强调易用性、响应式设计和可自定义主题。适用于快速构建现代化Web应用。官网:[Element.eleme.cn](https://element.eleme.cn/#/zh-CN)。安装使用时,需在项目中导入ElementUI和其样式文件。
17 0
|
5天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(<https://www.sojump.com/m/2792226.aspx/>)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
25 0
|
1天前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。
11 1
|
2天前
|
存储 JavaScript Java
《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
【5月更文挑战第11天】WebDriver 的 `isDisplayed()` 方法用于检查页面元素是否可见,如果元素存在于DOM中且可视,返回`true`,否则返回`false`。在自动化测试中,这个方法常用于验证元素是否真正显示在页面上。示例代码展示了如何使用 `isDisplayed()` 判断百度登录页面的特定错误提示文字是否出现。
13 1
|
3天前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)
【5月更文挑战第10天】本文介绍了使用Java和Selenium进行Web自动化测试的实践,以安居客网站为例。最后,提到了在浏览器开发者工具中调试和观察页面元素的方法。
14 2
|
4天前
|
资源调度 JavaScript 前端开发
将Elementui里的Table表格做成响应式并且和Pagination分页组件封装在一起(Vue实战系列)
将Elementui里的Table表格做成响应式并且和Pagination分页组件封装在一起(Vue实战系列)
|
4天前
|
Web App开发 JavaScript 测试技术
《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
【5月更文挑战第9天】本文介绍了在Appium中处理App自动化测试中遇到的Toast元素定位的方法。Toast在Web UI测试中也常见,通常作为轻量级反馈短暂显示。文章提供了两种定位Toast元素的技巧.
11 0
|
5天前
|
前端开发 Java 测试技术
selenium+python自动化测试--登录
selenium+python自动化测试--登录
13 2
|
5天前
|
Web App开发 缓存 前端开发
《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
【5月更文挑战第8天】这篇文档介绍了如何在IE、Chrome和Firefox浏览器中处理不信任证书的问题。作者北京-宏哥分享了如何通过编程方式跳过浏览器的证书警告,直接访问不受信任的HTTPS网站。文章分为几个部分,首先简要介绍了问题背景,然后详细讲解了在Chrome浏览器中的两种方法,包括代码设计和运行效果,并给出了其他浏览器的相关信息和参考资料。最后,作者总结了处理此类问题的一些通用技巧。
16 2