• 11
  • 11
分享

  前言

  在平常工作中经常在浏览器上进行一系列的上传和下载操作,既然是在浏览器上进行的操作,那么上传和下载操作可以不可以通过selenium进行来完成呢?安静本篇内容就给大家解读下如何通过selenium进行上传和下载操作。

  上传操作

  通常我们网页上的上传分为input标签和非input标签,其中input标签直接可以通过webdriver中的方法send_keys方法进行直接输入需要上传文件地址,非input标签的话需要借助外部工具进行辅助我们完成上传操作。

  input标签

  安静先写input标签的HTML上传文件:

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>跟着安静学测试</title> 
</head>
<body>
 
<form action="demo-form.php">
  选择图片: <input type="file" name="img" multiple>
  <input type="submit">
</form>
 
</body>
</html>

  直接通过send_keys进行输入文件地址:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('E:\\web\\Upload.html')
time.sleep(2)
driver.find_element_by_name('img').send_keys('E:\\web\\123.jpg')

  通过下方执行结果的动图可以看出来,我们已经成功进行对图片进行了上传操作。

2-1.gif

  非input标签

  安静这里找到了一个关于非input标签的上传实例,然后通过pywinauto这个第三方库控制Windows控件进行完成上传操作。

2-2.png

  pywinauto来控制Windows上的控件来做一些自动化操作的库。可以通过pip进行安装。先看具体代码,然后安静在进行解释代码中内容:

from selenium import webdriver
import time
import pywinauto
driver = webdriver.Chrome()
driver.get('https://www.jq22.com/yanshi17984')
driver.switch_to.frame("iframe")
driver.find_element_by_class_name('addImg').click()
time.sleep(2)
# 通过窗口打开
app = pywinauto.Desktop()
# 通过弹框名称进入控件中
win = app['打开']
# 输入上传图片的地址
win['Edit'].type_keys(r'E:\web\123.jpg')
#点击打开按钮
win['Button'].click()

  进行执行代码后可以看到我们已经完成了对非input标签上传的操作。

2-3.gif

  其中代码中关于pywinauto的内容,大家可能对几个参数有问题,打开、Edit、Button是怎么来的?其实这里是通过工具进行查看Windows控件内容来得到的。

2-4.png

  具体关于pywinauto方面内容,大家可以看下官方文档进行查看。

  下载操作

  下载操作其实和正常的点击下载操作一样的。这里安静通过加载chrome配置,来防止弹框的问题。

import time
from selenium import webdriver
path = r'C:\Users\xxxxx\AppData\Local\Google\Chrome\User Data1'
options = webdriver.ChromeOptions()
# 增加个人浏览器地址
options.add_argument('--user-data-dir='+path)
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('chrome')
driver.find_element_by_id('su').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@class="c-btn c-btn-primary OP_LOG_BTN pc-js-btn_n7kWx"]').click()

  通过执行代码后,发现已经成功的将chrome浏览器下载下来了。

2-5.gif

  总结

  安静这里通过两个小案例来简单的介绍了如何通过selenium进行对页面上完成上传和下载操作。希望对您有所帮助。



作者:测试安静   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   CCE是华为公司提供的高度可扩展的、高性能的企业级Kubernetes集群,并能支持Docker容器生态。  CCE可以轻松创建和管理多样化的容器工作负载,并提供容器故障自愈、监控日志采集、自动弹性扩容等高效运维能力。  Tomcat是一个免费的、开源的、轻量级的Web应用服务器,支持JavaEE的Servlet和JSP规范以及HTML、JS等静态资源的处理,既可作为应用服务器运行Java Web应用,也可作为轻量级Web服务器使用。  目前Tomcat是云上Java应用的主流中间件,典型应用如下图所示。  本文通过梳理 CCE 下 Tomcat 的关键性能指标及监控方法,并总结...
            1 1 1148
            分享
          • 开发语言知识背景对被测试对象使用的语言有一定的了解,这样有助于测试工作的开展,同时,与开发人员之间的沟通协作也将更顺畅计算机语言都具有一定的共通性,只要你深刻了解了一门语言,其他语言也不是难事。所以,即使被测试对象使用的语言与你之前学过的了解的不相符亦无太多关系数据库的熟悉使用能够自行编写大部分的SQL语句来辅助测试(SELECT,DELETE,UPDATE),对于存储过程可也多了解,在无程序辅助的情况下,它是制作数据的最好帮手主要在日常测试工作中,提取数据库中的数据验以证测试结果的有效性、制作测试数据、批量修改测试数据等被测试对象业务的熟悉度所谓知已知彼,百战不殆对于被测试对象业务流程的了解...
            1 1 869
            分享
          • 最近在工作中协助研发进行了ES优化,效果还是非常明显的,几乎翻倍。除了通过各种业务接口测试ES性能以外,还可以直接请求ES接口,绕过服务,这样应该数据回更加准确。所以,ES Client学起来。准备工作首先,先准备了一个ES服务,这里就不多赘述了,大家自己在尝试的时候一定主意好ES Server和ES Client的版本要一致。 其次,新建项目,添加依赖。学习资料搜一下,能搜到很多的ES学习资料,建议先去看看大厂出品的基础知识了解一下ES功能。然后就可以直接看ES的API了。 下面是ES官方的文档地址: https://www.elastic.co/guide/en/elasticsearch...
            0 0 1771
            分享
          •   入行汽车电子行业已经要三年了,闲下来的时间爱总结总结,感受一下现在自己的行业水平,技术水平和发展想法。  首先,工作三年了,除了业务知识积累之外,我觉得增长更多的是沟通与做事方式的长进。经常挂在嘴边的一句话:“道理都懂,但就是不清楚怎么做。”从小学到大学,十几年甚至二十几年在学校里更多的是教会了自己如何快速高效的记忆,却并未就给自己太多思考的时间。  虽说到了大学后,时间多了,可以有很多思考的时间,但殊不知,思维差不多已经固化了,很多习惯好像在机械重复了多遍以后,就像是刻进了基因里,长进了骨子里,它让你很多个瞬间总是毫不犹豫的选择了那些个你觉得不确定的确定,所有的这些选择构成了我们现在的人...
            0 0 851
            分享
          • 前言例如:测试工程师面试题目1、软件的生命周期有哪些阶段?① 需求阶段分析和学习阶段,团队去查看这个需求是不是可测的。② 计划阶段辨别出哪些活动和资源和测试的目标时匹配的,辨别并追踪这些测试的指标、计划。③ 分析阶段通过需求文档等条件辨别测试条件,追溯到需求。④ 设计阶段概述测试条件;获取测试数据;搭建环境;跟踪测试指标。⑤ 编码阶段创建详细的测试用例,进行编码。⑥ 运行和维护阶段⑦ 总结阶段检验完成度和用户满意度。2、测试的整个流程有哪些① 需求评审阅读需求,理解需求,查看是否有不符合逻辑的需求,明确测试周期。② 测试计划根据项目计划和开发人员的时候指定测试计划,包含测试内容、测试规划、测试...
            1 1 2624
            分享
      • 51testing软件测试圈微信