【Web自动化测试——代码篇八】常用方法——上传/下载文件

上传文件

对于Web页面的上传功能实现一般有一下俩种方式:

  • 普通上传:将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器(不做介绍send_keys方法)。
  • AutoIt上传:利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。

下面我们实际操作一下来讲解AutoIt上传文件的过程:

1、安装AutoIt(下载网址:https://www.autoitscript.com/site/autoit/downloads/)

2、打开AutoIt Windows Info工具(我的电脑是64位的)

3、用鼠标左键点击弹出窗口的Finder Tool,此时鼠标将变成一个小风扇形状的图标

4、按住Finder Tool不松,将其拖动到需要识别的控件上

窗口的title为“文件上传”,标题的class为“#32770”

文件名输入框的class为“Edit”,Instance为“1”,所以classnameNN为“ComboBox1”

打开按钮的class为“Button”,Instance为“1”,所以classnameNN为“Button1”

5、根据AutoIt Windows Info所识别到的控件信息打开SciTE Script Editor编辑器,编写AutoIt脚本。

;ControlFocus("title","text",controlID) ComboBox1=Combobox instance 1
ControlFocus("文件上传", "" , "Edit1")

;Wait 10 Seconds for the Upload window to appear
WinWait("[CLASS:#32770]", "", 10)

;Set the file name text on the Edit field
ControlSetText("文件上传", "", "Edit1", "alert.html")
Sleep(2000)

;Click on the open button
ControlClick("文件上传", "", "Button1")

6、保存文件后,打开Compile Script to.exe工具,将其生成为.exe可执行文件

注意点

  • 不同浏览器的窗口title有可能不一样

  • 文件名输入框不要定位到下拉框上去

  • 注意上传路径的分隔符是单斜杠还是双斜杠

  • exe执行多长时间,执行是否出错,自动化脚本都无法得知(不在可控范围内)

**代码时间 **

Java

 1 package JavaTest;
 2
 3 import java.io.IOException;
 4 import java.util.NoSuchElementException;
 5 import java.util.concurrent.TimeUnit;
 6 import org.openqa.selenium.By;
 7 import org.openqa.selenium.WebDriver;
 8 import org.openqa.selenium.firefox.FirefoxDriver;
 9
10 public class Test {
11     public static void main(String[] arg) throws InterruptedException, IOException
12     {
13         WebDriver driver = new FirefoxDriver();
14
15          // 设置隐示等待时长:10秒;
16         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
17         driver.get("http://www.jq22.com/yanshi5310");
18
19         try {
20             driver.switchTo().frame("iframe");
21             driver.findElement(By.xpath("//*[@id=‘upload_form‘]/div[1]/div[2]")).click(); //打开上传窗口
22             Runtime.getRuntime().exec("C:\\Users\\xxx\\Desktop\\upfile.exe");  // 调用upfile.exe上传程序
23         }
24         catch(NoSuchElementException e)
25         {
26             System.out.println(e.getMessage());
27         }
28         finally
29         {
30             driver.close();
31         }
32     }
33 }

Python

 1 from selenium import webdriver
 2 from selenium.webdriver.common.by import By
 3 import os
 4
 5 # 启动Firefox浏览器
 6 driver = webdriver.Firefox()
 7
 8 # 隐式等待10S,打开网址(可直接通过frame的id和name定位)
 9 driver.implicitly_wait(10)
10 driver.get("http://www.jq22.com/yanshi5310")
11
12 try:
13     driver.switch_to.frame("iframe")
14     driver.find_element(By.XPATH, "//*[@id=‘upload_form‘]/div[1]/div[2]").click()  # 打开上传窗口
15     os.system("C:\\Users\\xxx\\Desktop\\upfile.exe") # 调用upfile.exe上传程序
16 except Exception as e:
17     print(e.args[0])
18 finally:
19     driver.close()

Ruby

 1 class Baidu
 2   require ‘rubygems‘
 3   require ‘selenium-webdriver‘
 4
 5   # 打开firefox并输入网址
 6   driver = Selenium::WebDriver.for :firefox
 7
 8   # 设置隐式等待时间10S
 9   driver.manage.timeouts.implicit_wait = 10
10   driver.navigate.to "http://www.jq22.com/yanshi5310"
11
12   begin
13     driver.switch_to.frame(‘iframe‘)
14     driver.find_element(:xpath => "//*[@id=‘upload_form‘]/div[1]/div[2]").click   # 打开上传窗口
15     exec("C:\\Users\\xxx\\Desktop\\upfile.exe")
16   rescue => e
17     puts e.message # 显示报错信息
18   ensure
19     driver.close
20   end
21 end

下载文件

话不多说,<( ̄︶ ̄)[GO!]

FireFox about:config详细介绍:https://www.cnblogs.com/abcd19880817/p/7210711.html

**代码时间 **

Java

FirefoxProfile fp = new FirefoxProfile();
// 为0是下载到浏览器默认下载路径,1是“我的下载”;2是自定义
fp.setPreference("browser.download.folderList", 2);
// 是否显示开始
fp.setPreference("browser.download.manager.showWhenStarting", false);
// 指定所下载文件的目录
fp.setPreference("browser.download.dir", "d:\\");
// 下载文件类型
fp.setPreference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream");

Python

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
# 指定所下载文件的目录。os.getcwd()函数不需要传递参数,用于返回当前的目录
fp.set_preference("browser.download.dir",os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

Ruby

profile = Selenium::WebDriver::Firefox::Profile.new
profile[‘browser.download.folderList‘] = 2
profile[‘browser.download.manager.showWhenStarting‘] = false

driver = Selenium::WebDriver.for :firefox, :profile => profile

原文地址:https://www.cnblogs.com/CSgarcia/p/9413951.html

时间: 2024-11-01 20:52:15

【Web自动化测试——代码篇八】常用方法——上传/下载文件的相关文章

【Web自动化测试——代码篇四】常用方法——常见元素操作

浏览器这个大框架我们都能控制,区区页面小元素又能奈我们何!!!之前的[Web自动化测试--代码篇二]条条大路找元素 已经讲述了许多获取元素的方法,在此基础上我们来认识几个元素最常见的相关操作?(ˉ﹃ˉ?)   Java Python Ruby 输入内容 sendKeys(*value) send_keys(*value) send_keys(*value) 单击元素 click() click() click 清除文本 clear() clear() clear 提交表单 submit() su

WebService中实现上传下载文件

不多说,直接看代码: /*上传文件的WebService*/ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; using System.IO; /// <summ

winform通过FTP协议上传下载文件

上传文件:窗体代码 一次上传多个文件(grdAffixFilesList中需要上传的) private Boolean UploadFile() { string filename; int upCount=0; for (int i = 0; i < this.grdAffixFilesList.Rows.Count; i++) { filename = this.grdAffixFilesList.Rows[i].Cells["FILEPATH"].Text.ToString

C#实现http协议支持上传下载文件的GET、POST请求

C#实现http协议支持上传下载文件的GET.POST请求using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Collections; using System.IO; using System.Text.RegularExpressions; using RE = System.Text.Regula

小小一方士 C# Async\Await 之 上传/下载文件进度条实现原理

关于上传下载文件(图片等),涉及到UI进度条的显示,c#中 System.IProgress提供了相应的api. namespace System { // // 摘要: // 定义进度更新的提供程序. // // 类型参数: // T: // 进度更新值的类型.此类型参数是逆变.即可以使用指定的类型或派生程度更低的类型.有关协变和逆变的详细信息,请参阅 泛型中的协变和逆变. public interface IProgress<in T> { // // 摘要: // 报告进度更新. //

SFTP上传下载文件

secureCRT SFTP上传/下载文件 远程登陆IP secureCRT会话中点击SFTP 3.cd  /home/dowload       linux平台切换到/home/dowload目录 4.cd d:\   windows平台切换到d盘 5.put 文件名           上传 /home/dowload目录下 6.get 文件名   下载文件到windows平台 d盘

Linux上传下载文件

2种方式:xftp(工具).lrzsz xftp:协议--SFTP.端口号--22 lrzsz: rz,sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具. 优点就是不用再开一个sftp工具登录上去上传下载文件. sz(下载):将选定的文件发送(send)到本地机器 rz(上传):运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器 安装命令:yum install lrzsz 从服务端发送文件到客户端:sz filename 从客户端上传文件到服务

向云服务器上传下载文件方法汇总(转)

转载于:https://yq.aliyun.com/articles/64700 摘要: 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" 2."本地资源"-->详细信息. 3."磁盘驱动器"前面打钩. 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌

向linux服务器上传下载文件方式收集

向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证 . 命令格式: scp [参数] <源地址(用户名@IP地址或主机名)>:<文件路径> <目的地址(用户名 @IP 地址或主机名)>:<文件路径> 举例: scp /home/work/source.