selenium webdriver3+AutoIt3 实现无人为干涉的文件下载

今天写下载模块的自动化用例,进了一个大坑,发现case执行完成,但是一直找不到文件,查了一上午崩溃了,后来发现执行完下载操作后,要保留浏览器打开状态N秒。。(下载是需要时间的,如果没下载完就driver.quit()了 当然不会下载了。。orz..)..


Au3脚本是AutoIt3 Windows自动安装脚本语言。AutoIt 是一种自动控制工具。它可以被用来自动完成任何基于 Windows 或 DOS 的简单任务。下面将结合selenium来实现文件的上传和下载。

1、首先下载au3(百度搜索autoIt3直接访问官网即可)

2、au3定位文件上传窗口

3、编写au3脚本并compile成对应的*.exe可执行文件以便调用

autiitscript文件~
;新建一个名为loadFile.au3的AutoItScript编辑器,文件具体内容如下:
;ControlFocus("title","text",controlID)
;表示将焦点切换到标题为title窗体中的controlID上
;Edit1表示第一个可以编辑的实例
;title表示弹出的Window窗口标题,不同浏览器的标题可能不一样
ControlFocus("请输入要保存的文件名...","","Edit1")

;等待10秒以便window窗口加载成功
WinWait("[CLASS:#32770]","",10)

;将焦点切换到Edit1输入框中
ControlFocus("另存为","","Edit1")

;等待2秒
Sleep(2000)

;将要下载的文件名及路径写入Edit1编辑框中
ControlSetText("另存为","", "Edit1", "D:\Downloads\Firefox Setup 35.0b8.exe")

Sleep(7000)

;点击窗体中的第一个按钮,也就是保存按钮
ControlClick("另存为","","Button1")

;Send("{ENTER}")
;Send("{ENTER}")
;保存后将该文件编译成exe文件,并存放到本地磁盘。
;Sleep(2000)
Send("{LEFT}")
Send("{LEFT}")
Send("{ENTER}")
Send("{ENTER}")
'''


4、结合selenium实现文件的下载

# encoding=utf-8

from selenium import webdriver
import unittest, time, os
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import win32con
import win32api


VK_CODE ={'enter':0x0D, 'down_arrow':0x28}

#键盘键按下
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):
        self.driver = webdriver.Chrome(executable_path="D:\\python\\Scripts\\chromedriver.exe")
    def test_dataPickerByRightKey(self):
        # 定义将要访问的网址
        url = "http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/35.0b8/win32/zh-CN/"
        self.driver.get(url)
        # 将窗口最大化
        self.driver.maximize_window()
        # 暂停5秒,目的防止页面有一些多余的弹窗占据焦点
        time.sleep(5)
        # 找到文本内容为“Firefox Setup 35.0b8.exe”超链接元素
        a = self.driver.find_element_by_link_text("Firefox Setup 35.0b8.exe")
        time.sleep(2)
        # 在找到的链接元素上模拟点击鼠标右键,
        # 以便调出选择“另存为”选项的菜单
        ActionChains(self.driver).context_click(a).perform()
        # 暂停2秒,防止命令执行太快
        time.sleep(2)
        for i in range(4):
            # 循环按4次下箭头,将焦点切换到“另存为”选项上
            # 不同浏览器此选项的位置可能不同
            a.send_keys(Keys.DOWN)
            keyDown("down_arrow")
            keyUp("down_arrow")
            print i
            time.sleep(2)
        time.sleep(2)
        # 当焦点切换到“另存为”选项上后,模拟点击回车键
        # 调出保存下载文件路径的Windows窗体
        keyDown("enter")
        keyUp("enter")
        time.sleep(3)
        # 通过执行AutoIt编写的操作弹窗的Windows文件保存窗体
        # 完成文件保存路径的设置
        os.system("C:\Users\jingyu\Desktop\upload_file.exe")
        # 等待文件下载完成,根据各自的网络带宽情况设定等待相应的时间
        print "done"
        #等待下载完成
        time.sleep(100)


    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
window与linux美中不足的就是自动化操作,linux中只要简单的shell脚本就能实现大量批处理操作,可是windows中大部分程序主要GUI(界面)完成的,在这种近况下大量的冗余操作无聊而又容易出错。有没有办法完美的windows自动化呢?终于找到好东西了autoit3 AutoIt v3 是用以编写并生成具有 BASIC 语言风格的脚本程序的免费软件, 它被设计用来在Windows GUI(用户界面)中进行自动操作. 通过它可以组合使用模拟键击,鼠标移动和窗口/控件操作等来实现自动化任务, 而这是其它语言所无法做到或尚无可靠方法实现的 (比如VBScript和SendKeys). AutoIt 非常小巧,完全运行在所有windows操作系统上. (thesnow注:现在已经不再支持win 9x,微软连XP都能放弃,何况一个win 9x支持), 并且不需要任何运行库. AutoIt 最初是为PC(个人电脑)的"批量处理"而设计, 用于对数千台PC进行(同样的)配置. 现在,autoit是一个支持复杂表达式, 自定义函数,循环等的强大脚本软件. AutoIt 可以做的事: 简单易懂的类 BASIC 表达式 模拟键盘,鼠标动作事件 操作窗口与进程 直接与窗口的"标准控件"交互(设置/获取 文字,移动,关闭,等等) 脚本可以编译为标准可执行文件 创建用户图形界面接口(GUI) COM支持 正则表达式 直接调用外部DLL 和 Windows API 函数 程序运行为功能(让程序运行于其它账户) 详细易懂的帮助文件于基于社区的支持论坛 完全兼容于 Windows 2000 / XP / 2003 / Vista / 2008 Unicode 与 64位 运算支持 高精度,易使用的数学运算 可以运行于 Windows Vista Account Control (UAC) AutoIt 被设计得尽可能小, 并且不用依赖外部DLL文件或添加注册表项目即可独立运行. 也可以安全的成为服务运行. 脚本可以使用Aut2Exe编译为可独立运行的文件 此外我们还设计了 AutoIt 的 ActiveX 和 DLL 版本 —— AutoItX 这是个组件化的语言(COM 同一 DLL 文件中的标准DLL函数). AutoItX 将使得您可以加入一些AutoIt 独有的特性到您最常用的脚本语言或程序设计语言中去! 最重要的是,AutoIt 将继续是免费的!!!!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值