• 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软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 当进行 自动化测试 编排时,测试步骤间的数据传递是至关重要的。在传统的方式中,一般通过复杂的脚本配置,或者手动复制这些数据,然后再慢慢地粘贴到每个需要它们的地方,以此来实现接口之间的参数传递。这种方式往往效率低下、容易出错并且难以维护,当接口或业务逻辑发生变化时,需要进行大量修改,增加了维护成本。为了应对这种复杂的数据依赖关系,Apifox 中引入了「动态值」传递机制。这种机制就像是一个灵活的“桥梁”,将指定的“上游”测试步骤的运行结果捕获,并插入到“下游”测试步骤的请求参数中,确保测试用例能够适应不同场景下的数据变化。这种响应关联机制消除了中间的手动传递数据环节...
            0 0 1563
            分享
          •   今日,基于 HarmonyOS NEXT 的 WPS 鸿蒙版正式开启公测,官方称,一年时间跨平台移植 4000 万行代码,实现全端流畅运行。  据介绍,基于 HarmonyOS NEXT 的原生互联、原生流畅等特性,WPS 鸿蒙版不仅能在 PC 端更流畅运行,还能实现与手机、平板、智慧屏等多种设备之间的无缝流转和跨端协同。  据金山办公介绍,在开发 WPS 鸿蒙原生应用过程中,团队共计完成了超过 4000 万行代码的跨平台移植工作,实现了跨平台交互界面的兼容,并推动第三方跨平台基础设施建设。经过一年多的不懈努力,在与鸿蒙工程师的密切配合下,WPS 研发团队在诸如手机端、折叠屏、平板等不同大...
            0 0 324
            分享
          •   技术背景  需要有一定的python基础,代码阅读能力;以及自动化测试思想。  去到任何一家企业,如果少不了自动化,必然会要搭建一套自动化测试框架!  那么问题随之而来,这框架如何选择呢?  如果是代码能力强,可以自行开发与设计,那要是不呢?KPI摆在那,总不能说不行吧!  不行,代表着真的不行,在测试职业领域真的没有什么测试的不行!作者回顾以往工作经历,测试从来没有说过不字。  不会安全测试,但总得会几样安全型测试工具吧,不济也该知道安全测试的目的和原理吧。  不会性能测试,但总得会使用工具吧,理解性能测试指标和知道如何设计性能测试场景吧。  不会单元测试,不会自动化测试?不会渗透测试?...
            0 0 1052
            分享
          •        大家好,我是虚竹,首先介绍一下我自己,从事软件测试行业到现在是10年时间,毕业之后一直从事的软件测试行业。很幸运在毕业时赶上互联网这波浪潮,然后就一直在互联网公司工作,虽然那时候的软件测试技术发展还相对比较混乱,但自己因为公司业务发展的原因,硬件测试、功能测试,性能测试、自动化测试什么的也都做过。       因为我接触软件测试的时间算是相对比较早,那时候也没有相对比较全面、深入的培训体系或者说学习途径,只有通过一些前辈的指导,以及自我的学习加总结来进行自我提升。这种提升的方式,无疑是很缓慢且痛苦的,...
            0 0 2397
            分享
          •   前言  无论什么自动化,都会需要参数化。unittest可以通过ddt来完成参数化,那么pytest通过什么呢?  parametrize  pytest中自带的装饰器parametrize可以来实现测试用例的参数化功能。  使用方法  通过下方装饰器,使用在需要传入参数的case中。用例传参中的值和装饰器传入的参数值一致。@pytest.mark.parametrize('参数化名称',参数化值)  安静举一个登录传参的例子。import pytest # 登录参数 data = [('anjing', &...
            13 15 2984
            分享
      • 51testing软件测试圈微信