Selenium2+python自动化33-文件上传(send_keys)

前言

文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单。

一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决;

另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库。

本篇以博客园的上传图片为案例,通过send_keys()方法解决文件上传问题

一、识别上传按钮

1.点开博客园编辑器里的图片上传按钮,弹出”上传本地图片”框。

2.用firebug查看按钮属性,这种上传图片按钮有个很明显的标识,它是一个input标签,并且type属性的值为file。

只要找到这两个标识,我们就可以直接用send_keys()方法上传文件了。

二、定位iframe

1.这里定位图片上传按钮情况有点复杂,首先它是在iframe上(不懂iframe的看这篇:Selenium2+python自动化14-iframe)

2.这个iframe的id是动态的,且没有name属性,其它属性也不是很明显

3.通过搜索发现,这个页面上有两个iframe,需要定位的这个iframe是处于第二个位置

4.可以通过标签定位所有的iframe标签,然后取对应的第几个就可以了。

三、文件上传

1.先定位到文件上传按钮,直接调用send_keys()方法就可以实现啦

# coding:utf-8
from selenium import webdriver
import time
profileDir = r'C:\Users\Gloria\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'
profile = webdriver.FirefoxProfile(profileDir)
driver = webdriver.Firefox(profile)
driver.implicitly_wait(30)
driver.get("http://www.cnblogs.com/yoyoketang/")
driver.find_element_by_link_text("新随笔").click()
time.sleep(3)
# 点开编辑器图片
driver.find_element_by_css_selector("img.mceIcon").click()
time.sleep(3)
# 定位所有iframe,取第二个
iframe = driver.find_elements_by_tag_name('iframe')[1]
# 切换到iframe上
driver.switch_to_frame(iframe)

# 文件路径
driver.find_element_by_name('file').send_keys(r"D:\test\xuexi\test\14.png")

非input标签的文件上传,就不适用于此方法了,需要借助autoit工具或者SendKeys第三方库。

学习过程中有遇到疑问的,可以加selenium(python+java) QQ群交流:232607095,appium交流QQ群:512200893

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2017-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端人人

React第三方组件4(状态管理之Reflux的使用①简单使用)

本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章! 1、React第三方组件4(状态管理之Reflux的使用①...

33780
来自专栏coding for love

浏览器加载解析渲染机制的全面解析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

12110
来自专栏贾鹏辉的技术专栏@CrazyCodeBoy

React Native调试技巧与心得

本文出自《React Native学习笔记》系列文章。 在做React Native开发时,少不了的需要对React Native程序进行调试。调试程序是每一位...

67750
来自专栏小樱的经验随笔

基于Windows下python3.4.1IDLE常用快捷键小结

安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器。 IDLE默认不能显示行号,使用ALT+G 跳到对应...

43560
来自专栏向治洪

React Native调试心得

在做React Native开发时,少不了的需要对React Native程序进行调试。调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低B...

26370
来自专栏从零开始学 Web 前端

Sublime Text3 一些实用设置

当你把脑袋扭过到显示器以外的地方后再回头看编辑器,光标呢?然后你可能会花点小功夫找到他,就像你平时找鼠标的时候。这个设置会让让光标所处在的那一行高亮,只是稍微亮...

39820
来自专栏技术小黑屋

Atom订阅转成RSS2.0

Octopress博客自带的只Atom协议的订阅,但是最近提交收录网站时,需要使用RSS协议。于是利用周末简单实现了一下。

21420
来自专栏啸天"s blog

制作MAGISK字体模块

自从上了8.1后,手机换字体只能通过magisk模块进行更改,用其他方式就会翻车,无奈之下去找字体包,可是感觉有的自己喜欢的字体大多数是ttf格式就很不开心。

9.2K20
来自专栏阮一峰的网络日志

文件上传的渐进式增强

文件上传是最古老的互联网操作之一。 20多年了,它几乎没变,还是原来的样子:操作麻烦、缺乏交互、用户体验不佳。在这个新技术日新月异的时代,显得非常落伍。 ? 网...

37360
来自专栏技术博客

ExtJs七(ExtJs Mvc创建ViewPort)

在4.1的时候,要先创建一个扩展于Ext.app.Application的类,然后用create创建它的实例来开始应用程序的。而在4.1.1,则可直接调用app...

15340

扫码关注云+社区

领取腾讯云代金券