Python自动化测试系列[v1.0.0][上传文件]

上传附件是我们在测试BS系统的时候经常遇到的功能,然而在处理上传附件的自动化代码并不总是有效的,因此需要掌握多种上传附件的手段,本节笔者将介绍几种上传附件的方法,应该可以满足绝大多数的情况。

被测页面

<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=utf-8" />
		<title>上传文件</title>
	</head>
	<body>
		<div class="row-fluid">
			<div class="span6 well">
			<h3>选择文件</h3>
			<input type="file" name="fileupload" />
			</div>
		</div>
	</body>
</html>

测试代码

def test_upload_by_sendkeys(self):
    chrome_driver = webdriver.Chrome()
    chrome_driver.get("file:///C:/Users/Administrator/Desktop/fileupload.html")
    chrome_driver.find_element_by_name("fileupload").send_keys("E:\\test_upload_file.txt")
    time.sleep(10)
    chrome_driver.quit()

借助AutoIt实现上传

如果页面标签非input类型,可以通过第三方工具来完成上传操作。

  • 首先第一步下载AutoIt工具,浏览器访问https://www.autoitscript.com/files/autoit3/autoit-v3-setup.exe,即可直接下载,下载完成后双击autoit-v3-setup.exe文件,默认选项安装即可,安装完成后,在操作系统的开始菜单中能看到相关菜单项
    在这里插入图片描述
  • 用浏览器打开上一小节创建的fileupload.html文件,然后在打开的页面中点击“选择文件”此时选择文件的窗口将弹出
    在这里插入图片描述
  • 在开始菜单中点击AutoIt Window Info,改程序存在两个版本(x86)表示32位版本,(x64)表示64位版本,读者朋友根据自己的操作系统版本启动相应的AutoIt版本即可,启动成功后
    在这里插入图片描述
  • 在AutoIt Window Info窗口中间部分有几个标签,然后拖拽Finder Tool到“打开”按钮上,便可获取该控件的窗口信息
    在这里插入图片描述
  • 启动SciTE Script Editor,在开始菜单AutoIt v3路径里的可以找到他
    在这里插入图片描述
  • 编写脚本,在SciTE Script Editor中写入如下内容,然后在选择文件的窗口打开的情况下,在SciTE Script Editor窗口按键盘上F5键,执行脚本,脚本运行正常,即可保存到我们PO项目下的Util路径中,命名为upload_file,保存成功后,会生成一个upload_file.au3的文件
; ControlFocus("title", "text", "ClassnameNN") ControlFocus函数的用法
ControlFocus("打开", "", "Edit1")
; 等待10秒
 WinWait("[CLASS:#32770]", "", 10)
; 在文件名控件里设置要上传的文件全路径
 ControlSetText("打开", "", "Edit1", "E:\test_upload_file.txt")
 Sleep(2000)
; 点击打开按钮
 ControlClick("打开", "", "Button1")
  • 然而这个upload_file.au3文件并不能被Python执行,需要将其编译成.exe文件以供Python调用,启动Compile Script to .exe,在开始菜单Auto v3路径里可以找到它,启动(x86)或者(x64)根据自己的操作系统版本对应选择即可
    在这里插入图片描述
  • 选择之前保存的au3文件,点击Convert按钮,将其转换为.exe文件
    在这里插入图片描述
  • Python脚本调用该.exe完成文件的上传
import os  # 引入os模块用于调用.exe文件执行
def test_upload_by_autoit(self):  # 定义测试方法
    chrome_driver = webdriver.Chrome()  # 启动浏览器
	#打开我们的html文件
    chrome_driver.get("file:///C:/Users/Administrator/Desktop/fileupload.html")
	chrome_driver.find_element_by_name("fileupload").click()
    os.system("E:\\PO\\Util\\upload_file.exe")  # 调用我们编译好的.exe文件
    time.sleep(10)  # 强制等待10秒  
    chrome_driver.quit()

模拟键盘实现上传

封装操作剪切板方法

# encoding = utf-8
import win32clipboard as wc
import win32con
class Simulate_Clipboard:
    # 读取剪切板
    @staticmethod
    def get_clipboard():
        # 打开剪切板
        wc.OpenClipboard()
        # 获取剪切板中的数据
        data = wc.GetClipboardData(win32con.CF_TEXT)
        # 关闭剪切板
        wc.CloseClipboard()
        # 返回剪切板数据给调用者
        return data
    # 设置剪切板内容
    @staticmethod
    def set_clipboard(content):
        # 打开剪切板
        wc.OpenClipboard()
        # 清空剪切板
        wc.EmptyClipboard()
        # 将数据astring写入剪切板
        wc.SetClipboardData(win32con.CF_UNICODETEXT, content)
        # 关闭剪切板
        wc.CloseClipboard()

方法调用

# 将模拟剪切板的类引入到测试代码文件中
from Util.Clipboard_Simulation import Simulate_Clipboard  
def test_simulate_clipboard(self):  # 定义测试方法
    Simulate_Clipboard.set_clipboard("set clipboard")  # 设置剪切板内容
    str = Simulate_Clipboard.get_clipboard()  # 获取剪切板内容并赋给str
    print(str)  # 将剪切板内容打印到控制台

截切板配合键盘实现上传

def test_upload_by_simulation(self):  # 定义测试方法 
	# 设置剪切板内容,将文件全路径放到剪切板中
    Simulate_Clipboard.set_clipboard("E:\\test_upload_file.txt")      
	chrome_driver = webdriver.Chrome()  # 启动浏览器
	# 打开我们的html文件
    chrome_driver.get("file:///C:/Users/Administrator/Desktop/fileupload.html")
	chrome_driver.find_element_by_name("fileupload").click()
	time.sleep(5)
    Simulate_Keyboard.click_twokey('ctrl', 'v')  # 模拟键盘Ctrl+V组合键,黏贴剪切板内容
    time.sleep(5)
    Simulate_Keyboard.click_onekey('enter')  # 模拟键盘回车键
    time.sleep(20)
发布了231 篇原创文章 · 获赞 188 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/dawei_yang000000/article/details/105648658