51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4673|回复: 3
打印 上一主题 下一主题

[原创] 通过selenium完成上传和下载操作

[复制链接]
  • TA的每日心情
    无聊
    前天 09:00
  • 签到天数: 1019 天

    连续签到: 3 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-5-24 10:03:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    前言
      在平常工作中经常在浏览器上进行一系列的上传和下载操作,既然是在浏览器上进行的操作,那么上传和下载操作可以不可以通过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')



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



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


      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标签上传的操作。


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


      具体关于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浏览器下载下来了。


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

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-9 14:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    4#
    发表于 2021-6-2 11:36:49 | 只看该作者
    input标签的上传是真容易
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-16 14:39 , Processed in 0.072436 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表