不借助autolt实现下载文件到指定目录

今天尝试了下不用借助autolt完成下载文件到指定目录,

好处:在于集成回归,远程机可以绕过执行autolt程序权限问题,导致autolt程序无法调用,不能完成脚本的回归

Firefox浏览器已经成功,代码如下:

package com.dwkj.test.util;

import java.io.File;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;

/**
 *
 * @author longrong.lang
 *    不借助autolt实现下载文件到指定目录
 *
 */
public class FirefoxDownloadTest {

    public static void main(String[] args) {

        FirefoxProfile profile = new FirefoxProfile();
        // 可以在Firefox浏览器地址栏中输入about:config来查看属性
        // 设置下载文件放置路径,注意如果是windows环境一定要用\\,用/不行
        String path = "C:\\wps";
        String downloadFilePath = path + "\\demo.exe";
        File file = new File(downloadFilePath);
        if (file.exists()) {
            file.delete();
        }
        // 配置响应下载参数
        // 下载路径
        profile.setPreference("browser.download.dir", path);
        // 2为保存在指定路径,0代表默认路径
        profile.setPreference("browser.download.folderList", 2);
        // 是否显示开始
        profile.setPreference("browser.download.manager.showWhenStarting", false);
        // 禁止弹出保存框,value是文件格式,如zip文件
        profile.setPreference("browser.helperApps.neverAsk.saveToDisk","application/zip,text/plain,application/vnd.ms-excel,text/csv,text/comma-separated-values,application/octet-stream,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        WebDriver driver = new FirefoxDriver(profile);
        driver.get("file:///C:/Demo.html");
        driver.manage().window().maximize();

        driver.findElement(By.linkText("下载")).click();

        waitTime(3000);
        String js_exist = "alert(\"download successfully\")";
        String js_not_exist = "alert(\"download unsuccessfully\")";

        if (file.exists()) {
            ((JavascriptExecutor) driver).executeScript(js_exist);
        } else {
            ((JavascriptExecutor) driver).executeScript(js_not_exist);
        }
        Alert alert = driver.switchTo().alert();
        waitTime(2000);
        alert.accept();
        // driver.quit();

    }

    static public void waitTime(int time) {

        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

chrome浏览器,也算成功,但是遗留个小问题,就是会提示是否保留,点保留会下载到你指定的目录,如不点击不保存,在群里问的发总,发总说chrome的这个profile被取消了,结果我又百度了下,说是33版本之前的可以,之后不可以,这个有兴趣的小伙伴可以自己去试试。代码如下:

package com.dwkj.test.util;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

/**
 *
 * @author longrong.lang
 *    不借助autolt实现下载文件到指定目录
 *
 */
public class ChromeDownloadTest {

    public static void main(String[] args) {

        String path = "C:\\wps";
        // 设置下载文件放置路径,注意如果是windows环境一定要用\\,用/不行
        String downloadFilePath = path + "\\demo.exe";
        File file = new File(downloadFilePath);
        if (file.exists()) {
            file.delete();
        }
        System.setProperty("webdriver.chrome.driver", "tools/chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        // 去掉打开谷歌浏览器时上方提示的不支持的命令行标记
        options.addArguments("test-type");
        options.addArguments("--start-maximized");
        options.addArguments("--disable-popup-blocking");
        options.addArguments("no-sandbox");
        options.addArguments("disable-extensions");
        options.addArguments("no-default-browser-check");
        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("credentials_enable_service", false);
        // 禁用密码保存
        prefs.put("profile.password_manager_enabled", false);
        // 2为保存在指定路径,0代表默认路径
        prefs.put("profile.default_content_settings.popups", 2);
        prefs.put("download.default_directory", path);
        options.setExperimentalOption("prefs", prefs);
        WebDriver driver = new ChromeDriver(options);
        driver.get("file:///C:/demo.html");
        driver.manage().window().maximize();

        driver.findElement(By.linkText("下载")).click();

        waitTime(3000);
        String js_exist = "alert(\"download successfully\")";
        String js_not_exist = "alert(\"download unsuccessfully\")";

        if (file.exists()) {
            ((JavascriptExecutor) driver).executeScript(js_exist);
        } else {
            ((JavascriptExecutor) driver).executeScript(js_not_exist);
        }
        Alert alert = driver.switchTo().alert();
        waitTime(2000);
        alert.accept();
        // driver.quit();

    }

    static public void waitTime(int time) {

        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

测试文件:

<!DOCTYPE html>
<html>
<head>

<title>download</title>
</head>
<body>
    <a href="demo.exe">下载</a>
</body>
</html>
时间: 2024-12-08 18:46:51

不借助autolt实现下载文件到指定目录的相关文章

scponly 限定用户不能SSH登录,可以SFTP SCP传文件到指定目录

公司基于安全考虑,要求给用户SFTP,SCP权限可以上传相关文件到指定目录,但不能SSH登录,考虑到RSSH也是个解决方案,但有点麻烦,最后找到了SCPONLY 直接说下配置过程, 如果你的系统是CENTOS,那直接用这个配置 1.wget -c http://nchc.dl.sourceforge.net/s - nly/scponly-4.8.tgz #scponly 支持的软件有scp.sfp.rsync.subversion.gftp等客户端 2. ./configure –prefix

利用批处理命令复制指定文件到指定目录下

复制文件到指定路径 关于复制指定文件到指定路径,一般而言指的是对备份文件,因为其具有增长性, 所以添加任务计划之后会按时进行备份,对于常规文件同样适用. 其步骤大致分为: 1:  设定要复制文件的名称(若为每日备份文件要获取系统时间) 2:  设定复制文件的原路径和目标路径进行复制 3:  退出复制程序 例如:复制Y盘目录下文件到D盘目录下 rem 关闭回显 @echo off rem   设定文件时间 set d=%date:~0,10% set d=%d: =0% rem 设定需要复制的文件

用svn下载github中指定目录的文件

1.先用命令看看github的分支 svn ls https://github.com/BlueRiverInteractive/robovm-ios-bindings 输出: branches/ trunk/ 或者使用UI操作,浏览目录(一般在库下面都有两个目录:branches,trunk) 打开trunk目录下面就可以看到这个库下面的目录和文件了 然后: svn ls https://github.com/BlueRiverInteractive/robovm-ios-bindings/t

Http 下载文件,指定下载位置

HTTP协议简介 下载文件是电脑与WEB服务器交互的过程,它们交互的"语言"的专业名称是协议.传送文件的协议有多种,最常用的是HTTP(超文本传输协议)和FTP(文件传送协议),我采用的是HTTP. HTTP协议最基本的命令只有三条:Get.Post和Head.Get从WEB服务器请求一个特定的对象,比如HTML页面或者一个文件,WEB 服务器通过一个Socket连接发送此对象作为响应:Head命令使服务器给出此对象的基本描述,比如对象的类型.大小和更新时间.Post命令用于向 WEB

提取文件到指定目录,并重命名

最近做视频,各个目录里都有图片,无法统一导入到视频编辑软件 写了个小程序,可以将指定各级目录下的文件拷贝到指定目录,并以文件夹名字加数字命名 如果文件夹上都有日期,可以选择将日期放前面,做视频时好排序. import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; i

shell 递归函数---循环拷贝文件到指定目录

功能:如题 代码: #!/bin/sh recursive( ) {      for file in $1      do        subfile=`ls $2$3/$file`        for subsubfile in $subfile        do  #               echo $subsubfile          if [ "$subsubfile" == "$2$3/$file" ]          then    

sublime text 3插件改造之添加从模版新增文件到指定目录

简介:以前使用ST2里面的Sublime NFFT插件比较顺手,最近安装了ST3,但是Sublime NFFT插件不支持ST3,就下载了SublimeTmpl从模版新建文件插件.在使用时,习惯在侧边栏右击目录-新建模版文件,然后保存在右击的目录下.但是SublimeTmpl插件不支持这功能,非常蛋疼.花了一点时间研究Sublime NFFT插件源码,对SublimeTmpl进行了改造,详情如下: SublimeTmpl插件安装之后,首选项>浏览程序包>SublimeTmpl>sublim

【Linux】【三】linux 复制文件到指定目录

将  application/file/test/logs/ 下的文件 logs.log , logs.tar 复制到  application/file/test/tools/ 下,并新建文件夹[log],内含复制文件. 指令如下: cp  -r  /root/application/file/test/logs/ * /root/application/file/test/tools/ 操作如下: 参考linux复制指定目录下的全部文件到另一个目录中,linux cp 文件夹 原文地址:ht

linux中复制文件夹的所有文件到指定目录

这里我们的需求是需要将一个文件夹中的所有文件都复制到另一个文件夹中,而不是将一个文件夹复制到另外一个文件夹中. //这里需要使用到-R参数,表示递归处理,将指定目录下的所有文件与子目录一并处理//一开始的使用使用星号表示文件夹中的所有文件和文件夹,发现Linux会将*作为文件或者文件夹.//所以这里使用了点代表所有文件和文件夹.[[email protected] home]# cp -R /etc/skel/* /home/kooyuyu/cp: cannot stat `/etc/skel/