UI自动化中上传与唤醒弹窗
本篇想谈的是在ui自动化中对上传的一些理解,干货满满。
一.是否有必要唤醒弹窗
以selenium为代表的库在进行文件上传时,是可以直接对输入框 “发送” 文件的,其send_keys()方法本身不光意味着输入内容,还包括上传文件哦。上传文件的页面元素通常是以 input 标签出现,对其输入文件路径即可。
其它的库也有类似的方法,如 playwright 也有这种方法。
但是,并不是每一个文件上传都可以使用 send_keys() 方法的。只是在没必要唤醒弹窗的时候就不唤醒,毕竟用 send_keys() 方法能省去很多麻烦。
二.必须唤醒弹窗
在遇到 send_keys() 方法无法对文件进行上传时,这时首先检查一下元素是否正确,若确定元素没问题还是唤不醒,说明对方的网站对输入框做了一些防爬工作,不过没关系,可以用 click() 进行唤醒。
几乎每个ui自动化库都有 click() 方法,对于它的使用我无需多言。需要注意的是,点击操作分为很多种,除了内置的 click() 外,还有对 js 操作的click(),通常表现为 execute_js("arguments[0].click();") 的形式,同样的,很多ui自动化库都有该方法,除此之外,还有鼠标方法 mouse_down() 也能实现点击,基于键盘的点击 ctrl+o 等等。
在实际工作中,基于 js 的点击和键盘的方法确实起到很大作用。但他们不是百分之百有效的,我还真的遇到过什么方法都用尽了,还是无法唤醒弹窗的情况,真的很头疼。
三.选对库很重要
尽管不少人吐槽selenium,但在ui自动化领域中它仍是最优选择,掌握它的一些封装很重要,这是你的程序稳定性的关键。
读过我之前博客的朋友知道seliky库是我对它的封装,个人还算满意的库,喜欢的话可以 pip install seliky 来安装它。
工作迫使我不停地追求更好的解决方案,百度谷歌早已翻了个底朝天,最后还是承认,还得是selenium,其次选择 clicknium 吧,除此之外,都没什么用。恕我直言,真没什么用。
selenium和clicknium能解决绝大多数ui自动化中的问题,其中肯定包括 上传无法唤醒弹窗 的问题,还有 臭名昭著的防selenium反爬 的问题,总之一切selenium被针对了的问题,用clicknium几乎都能搞定。
四.上传交互
除了原生的send_keys()方法外,上传只能通过唤醒窗口的方式进行。
基于windows的电脑对上传有相关的支持,其它的系统简直一言难尽,在此不便多述。
不少朋友知道 autoit 这个东西,它可以制作一个上传器,来为 唤醒的窗口 实现界面的上传交互。读过我之前博客的朋友知道我写过一个很nb的上传器,解决了谷歌浏览器、火狐浏览器的文件上传的各种问题。但是比较它是一个exe程序,不太pythonic,所以后来我换成了更优雅的方式。
所以,uploads库应运而生,这是我写得自认为比较满意的库,喜欢的朋友可以 pip install uploads 来安装。
这样,以windows为代表的上传交互 解决了,仿佛一切安好。
五.业务died
就在今天,我的某条自动化爬虫相关的子业务线死了。虽然它相对而言不算主业务,但我还是很伤心。
归其原因,是因为连clicknium也无法唤醒弹窗,这导致没法上传我们的海量资源到对方网站。除此之外的ui自动化技术已经没有可用的了,这也是职业生涯中脑细胞死得比较多的一次。像是行走到了神经的末梢,已然穷途末路,或许降维打击可以奏效,开辟新的十字路口才是全新的视角。如果产品能够与对方网站协调好,或许能复活业务,但是没法协调,所以业务只能死。
UI自动化中上传与唤醒弹窗的更多相关文章
- UI自动化处理文件上传
UI自动化处理文件上传 import win32guiimport win32con def set_uploader(self, file_path): sleep(2) self.file_pat ...
- UI自动化页面需要选择上传文件
UI自动化页面上传文件,百度查的时候说有4中方法,简便的方法是安装SendKeys,但是百度说这个只支持python2.7的 我的python版本是3.7的,目前还只碰到了非<input typ ...
- Python—UI自动化完整实战
实战项目 均来源于互联网 测试报告2017年11月29日优化后的测试报告:https://github.com/defnngj/HTMLTestRunner 1.项目概述: 本实战已126邮箱为例子进 ...
- Python UI自动化
Python3--Uiautomator2--Pytest--Alure使用 官方源码GitHub地址:https://github.com/openatx/uiautomator2 介绍 uiaut ...
- 手机APP自动化之uiautomator2 +python3 UI自动化
题记: 之前一直用APPium直到用安卓9.0 发现uiautomatorviewer不支持安卓 9.0,点击截屏按钮 一直报错,百度很久解决方法都不可以,偶然间看见有人推荐:uiautomator ...
- 开发基于vue前端框架下的系统的UI自动化,记录总结踩的坑
在使用了pytest完成了一个系统的UI自动化后,因为系统的前端框架,是 基于VUE写的,这就让我编写脚本的时候踩了些坑. 无法用JS 修改标签属性,从而进行的操作 比如上传图片,我们的上传是这样子的 ...
- appium Ui自动化调起应用点击
appium Ui自动化调起微信并点击登录按钮的java代码(对的,就这么一丢丢). public class testWX { public static void main(String[] ar ...
- ui自动化笔记 selenium_webdriver,ui自动化框架(web)
Selenium学习笔记 selenium webdriver是业界公认ui自动化测试的标准,其封装的api可以对浏览器的任何地方进行操作 selenium2.0和selenium3.0的区别? 3. ...
- UI自动化之三种等待
UI自动化中常用三种等待 目录 1.强制等待 2.隐式等待 3.显示等待 1.强制等待 执行到某一条语句后,然后sleep(3),等待3秒后,才会继续执行后面的语句 2.隐式等待 隐式等待只需要声明一 ...
- UI自动化和selenium相关以及八大定位
一.UI自动化相关 1. UI自动化的本质(重点) 定位元素→操作元素→模拟页面操作→断言→测试报告 2. 适合UI自动化的场景 UI自动化的前提条件 (1)需求不能频繁变动 (2)UI稳定(UI自动 ...
随机推荐
- linux deb系 apache 配置解析php文件
安装apache服务器和php服务 sudo apt-get install apache2 php 然后其实一般来说什么也不用安装了就可以成功解析php文件了 制作一个测试文件,test.php放到 ...
- 关于 python 的内存机制
先看一段代码 L = [1,2,3] dic_ = {} L2 = [] for i in L: dic_['sn'] = i L2.append(dic_) print(L2) 输出 [{'sn': ...
- oracle 内置函数(二)字符函数
主要函数: 大小写转换函数 获取子字符串函数(字符串截取) 获取字符串长度函数 字符串连接函数 去除子字符串函数 字符替换函数 字符串出现次数 字符串按照特定符号拆分多行 一.大小写转换 1.uppe ...
- xml中出现< >&等特殊字符如何存储
特殊字符用下面对应得符号代替. < <= > >= & ' " < <= > >= & ' "
- Java中将 int[] 数组 转换为 List(ArrayList)
前言 说起数组转换成 ArrayList,很多同学第一反应就是遍历数组,将元素逐个添加到 ArrayList 中,但是这个看着就lower,一般不会这么答. 所以马上就会想到Arrays工具类的 as ...
- Docker的作用
绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用. 用户不需要再去关心如何搭建 ...
- Flaks框架(Flask请求响应,session,闪现,请求扩展,中间件,蓝图)
目录 一:Flask请求响应 1.请求相关信息 2.flask新手四件套 3.响应相关信息(响应response增加数据返回) 二:session 1.session与cookie简介 2.在使用se ...
- 基于.NetCore开发博客项目 StarBlog - (22) 开发博客文章相关接口
前言 本文介绍博客文章相关接口的开发,作为接口开发介绍的第一篇,会写得比较详细,以抛砖引玉,后面的其他接口就粗略带过了,着重于WebApi开发的周边设施. 涉及到的接口:文章CRUD.置顶文章.推荐文 ...
- JS切换图片
用js,做图片切换 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 【Redis场景2】缓存更新策略(双写一致)
在业务初始阶段,流量很少的情况下,通过直接操作数据是可行的操作,但是随着业务量的增长,用户的访问量也随之增加,在该阶段自然需要使用一些手段(缓存)来减轻数据库的压力:所谓遇事不决,那就加一层. 在当前 ...