webdriver高级应用- 无人工干预地自动上传附件
方法一:使用webdriver的send_keys方法上传文件,代码如下:
#encoding=utf-8
from selenium import webdriver
import unittest
import time
import traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException class TestDemo(unittest.TestCase): def setUp(self):
# 启动Chrome浏览器
self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer") def test_uploadFileBySendKeys(self):
url = "http://127.0.0.1/test_upload_file.html"
# 访问自定义网页
self.driver.get(url)
try:
# 创建一个显示等待对象
wait = WebDriverWait(self.driver, 10, 0.2)
# 显示等待判断被测试页面上的上传文件按钮是否处于可被点击状态
wait.until(EC.element_to_be_clickable((By.ID, 'file')))
except TimeoutException, e:
# 捕获TimeoutException异常
print traceback.print_exc()
except NoSuchElementException, e:
# 捕获NoSuchElementException异常
print traceback.print_exc()
except Exception, e:
# 捕获其他异常
print traceback.print_exc()
else:
# 查找页面上ID属性值为“file”的文件上传框
fileBox = self.driver.find_element_by_id("file")
# 在文件上传框的路径框里输入要上传的文件路径“c:\\test.txt”
fileBox.send_keys("c:\\test.txt")
# 暂停查看上传的文件
time.sleep(4)
# 找到页面上ID属性值为“filesubmit”的文件提交按钮对象
fileSubmitButton = self.driver.find_element_by_id("filesubmit")
# 单击提交按钮,完成文件上传操作
fileSubmitButton.click()
# 因为文件上传需要时间,所以这里可以添加显示等待场景,
# 判断文件上传成功后,页面是否跳转到文件上传成功的页面。
# 通过EC.title_is()方法判断跳转后的页面的Title
# 值是否符合期望,如果匹配将继续执行后续代码
#wait.until(EC.title_is(u"文件上传成功")) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()
方法二:模拟键盘操作,实现上传文件,代码如下:
#encoding=utf-8
from selenium import webdriver
import unittest
import time
import traceback
import win32clipboard as w
import win32api
import win32con
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException # 用于设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard() # 键盘按键映射字典
VK_CODE = {
'enter':0x0D,
'ctrl':0x11,
'v':0x56} # 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) class TestDemo(unittest.TestCase): def setUp(self):
# 启动Chrome浏览器
self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer") def test_uploadFileByKeyboard(self):
url = "http://127.0.0.1/test_upload_file.html"
# 访问自定义网页
self.driver.get(url)
try:
# 创建一个显示等待对象
wait = WebDriverWait(self.driver, 10, 0.2)
# 显示等待判断被测试页面上的上传文件按钮是否处于可被点击状态
wait.until(EC.element_to_be_clickable((By.ID, 'file')))
except TimeoutException, e:
# 捕获TimeoutException异常
print traceback.print_exc()
except NoSuchElementException, e:
# 捕获NoSuchElementException异常
print traceback.print_exc()
except Exception, e:
# 捕获其他异常
print traceback.print_exc()
else:
# 将即将要上传的文件名及路径设置到剪切板中
setText(u"c:\\test.txt")
# 查找页面上ID属性值为“file”的文件上传框,
# 并点击调出选择文件上传框
self.driver.find_element_by_id("file").click()
time.sleep(2)
# 模拟键盘按下ctrl + v组合键
keyDown("ctrl")
keyDown("v")
# 模拟键盘释放Ctrl + v组合键
keyUp("v")
keyUp("ctrl")
time.sleep(1)
# 模拟键盘按下回车键
keyDown("enter")
# 模拟键盘释放回车键
keyUp("enter")
# 暂停查看上传的文件
time.sleep(2)
# 找到页面上ID属性值为“filesubmit”的文件提交按钮对象
fileSubmitButton = self.driver.find_element_by_id("filesubmit")
# 单击提交按钮,完成文件上传操作
fileSubmitButton.click()
# 因为文件上传需要时间,所以这里可以添加显示等待场景,
# 判断文件上传成功后,页面是否跳转到文件上传成功的页面。
# 通过EC.title_is()方法判断跳转后的页面的Title
# 值是否符合期望,如果匹配将继续执行后续代码
#wait.until(EC.title_is(u"文件上传成功")) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()
方法三:使用第三方工具AutoIt上传文件
使用第三方工具AutoIt可以操作一些WebDriver无法操作的文件上传对象。需要先下载并按照此工具,才能调用如下代码实现上传:
下载链接: https://pan.baidu.com/s/12aBBhOOTmyQpH9hukt0XGA 密码: fcdk
代码:
#encoding=utf-8
from selenium import webdriver
import unittest
import time, os
import traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException class TestDemo(unittest.TestCase): def setUp(self):
# 启动Chrome浏览器
self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer") def test_uploadFileByAutoIt(self):
url = "http://127.0.0.1/test_upload_file.html"
# 访问自定义网页
self.driver.get(url)
try:
# 创建一个显示等待对象
wait = WebDriverWait(self.driver, 10, 0.2)
# 显示等待判断被测试页面上的上传文件按钮是否处于可被点击状态
wait.until(EC.element_to_be_clickable((By.ID, 'file')))
except TimeoutException, e:
# 捕获TimeoutException异常
print traceback.print_exc()
except NoSuchElementException, e:
# 捕获NoSuchElementException异常
print traceback.print_exc()
except Exception, e:
# 捕获其他异常
print traceback.print_exc()
else:
# 查找页面上ID属性值为“file”的文件上传框,
# 并点击调出选择文件上传框
self.driver.find_element_by_id("file").click()
# 通过Python提供的os模块的system方法执行生成的test.exe文件
os.system("E:\\test.exe")
# 由于AutoIt脚本转换后的可执行文件test.exe可能执行速度比较慢,
# 这里等待5秒,以确保test.exe脚本执行成功
time.sleep(5)
# 找到页面上ID属性值为“filesubmit”的文件提交按钮对象
fileSubmitButton = self.driver.find_element_by_id("filesubmit")
# 单击提交按钮,完成文件上传操作
fileSubmitButton.click()
# 因为文件上传需要时间,所以这里可以添加显示等待场景,
# 判断文件上传成功后,页面是否跳转到文件上传成功的页面。
# 通过EC.title_is()方法判断跳转后的页面的Title
# 值是否符合期望,如果匹配将继续执行后续代码
#wait.until(EC.title_is(u"文件上传成功"))
time.sleep(2)
def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main()
webdriver高级应用- 无人工干预地自动上传附件的更多相关文章
- webdriver高级应用- 无人工干预地自动下载某个文件
在网页上下载文件时,通常需要人为设定下载文件并选择保持路径,这样就无法实现完全自动的下载过程.下面实现基于firefox浏览器的全自动化文件下载操作: #encoding=utf-8 from sel ...
- webdriver高级应用 -无人干预地自动上传文件
本节主要介绍通过程序代码无人干预地上传文件附件,并进行提交操作. 1.使用send_keys方法上传文件 #!/usr/bin/env python # -*- coding: utf-8 -*- # ...
- selenium3 无人工干预地自动下载某个文件
一:主要内容 下载效果展示 代码内容展示 saveToDisk不生效说明,即文件没有下载下来解决办法 二:展示效果 1.下载效果展示 用selenium3无人工干预的自动下载该文件到指定路径下,如:D ...
- Selenium WebDriver高级用法
Selenium GitHub地址 选择合适的WebDrvier WebDriver是一个接口,它有几种实现,分别是HtmlUnitDrvier.FirefoxDriver.InternetExplo ...
- Selenium WebDriver高级应用
WebDriver高级应用 public class Demo4 { WebDriver driver; // @BeforeMethod:在每个测试方法开始运行前执行 @BeforeMethod p ...
- webdriver高级应用(2) - 滚动条操作
webdriver高级应用(2) - 滚动条操作 #-*- coding:utf-8 -*- from selenium import webdriver import unittest import ...
- 用webdriver+phantomjs实现无浏览器的自动化过程
环境准备 1. 安装python: 2. 安装pip: 3. 通过pip安装selenium: 4. 下载phantomJS的包并解压缩: 1. 若在Windows系统中,将下载的phantomjs文 ...
- Selenium webdriver 高级应用
对于这一段还蛮有感慨的,只想说,代码还是需要自己去敲的. 1. 改变用户代理 import org.junit.AfterClass; import org.junit.BeforeClass; im ...
- ajax+FormData+javascript 实现无刷新上传附件
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
随机推荐
- 密码强度的正则表达式(JavaScript)总结
简言 本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全.并分别给出了两个方案的解析和测试程序.一般大家可以根据自己的项目的实际需要,自行定义自己的密码正则约定. 前言 用户注册时,都 ...
- css 居中问题总结
html代码: <div class="box"> <div class="box-item"> 文字 </div> < ...
- window之间、iframe之间的JS通信
一.Window之间JS通信 在开发项目过程中,由于要引入第三方在线编辑器,所以需要另外一个窗口(window),而且要求打开的window要与原来的窗口进行js通信,那么如何实现呢? 1.在原窗口创 ...
- SQL Server 2012安装配置(Part1 )
1 安装前准备 安装 SQL Server 2012 服务器及客户端前,需要提前做以下两项准备: SQL Server2012 依赖于.Net Framework 3.5.1 组件.Windows S ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- 使用EventLog组件保存Windows系统日志
实现效果: 知识运用: EventLog类的CreateEventSource方法 //用于建立一个应用程序 使用指定的Sourc作为向本机上的日志中写入日志项的有效事件源 CreateEventS ...
- 使用控件的Tag属性传递信息
实现效果: 知识运用: Control类的Tag属性 //获取或设置包含 有关控件的数据的对象 public object Tag {get;set;} 实现代码: private void Form ...
- 2018.4.16 Java多线程实现龟兔赛跑
龟兔赛跑(通过多线程来实现 里面的具体方法) TT.java package com.lanqiao.demo3; /** * 乌龟 * @author Administrator * */ publ ...
- linux目录结构及文件管理
Linux的目录结构: / 根分区 linux文件系统的起点 /bin 普通用户的命令,普通用户能使用 /sbin 管理员使用的命令,只有管理 ...
- apropos linux
Apropos adj. 恰当的,关于,就...而言 adv. 顺便地,恰当地 All my suggestions apropos the script were accepted. 我所有有关该剧 ...