zoukankan      html  css  js  c++  java
  • selenium 文件上传

    selenium webdriver没有提供直接的文件上传功能,但是在使用的web项目中常常需要对文件进行上传。在一般的上传中,是需要点击上传按钮,打开本地的window窗口,但是selenium 是无法直接操作window系统自带的相关控件。

    以下提供两种关于文件上传的方法。

    普通上传:普通的附件上传是将本地文件的路径作为一个值放在input 标签中,通过form 表单将这个值提交给服务器。可以通过sendKeys("文件路径")直接上传。

    插件上传:一般是指基于Flash、JavaScript 或Ajax 等技术所实现的上传功能。

    演示HTML代码片段

    <!DOCTYPE html>
    
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>文件上传实例 - 菜鸟教程</title>
    </head>
    <body>
        <h1>文件上传实例 - 菜鸟教程</h1>
        <form method="post" action="/TomcatTest/UploadServlet"
            enctype="multipart/form-data">
            选择一个文件: <input type="file" name="uploadFile" /> <br />
            <br /> <input type="submit" value="上传" />
        </form>
    </body>
    </html>

    以下是普通上传java代码片段。

    public class FileUpload {
        public static void main(String[] args) {
            System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
            ChromeOptions Options = new ChromeOptions();
            Options.addArguments("user-data-dir=C:\Users\happy\AppData\Local\Google\Chrome\User Data");
            WebDriver driver = new ChromeDriver(Options);
            driver.manage().window().maximize();
            File file = new File("C:\Users\happy\Desktop\FileUpload.html");
            // 用java来实现文件读取功 
            driver.get(file.getAbsolutePath());
            driver.findElement(By.name("uploadFile")).sendKeys("C:\Users\happy\Desktop\FileUpload.html");
            // 获取文件上传文半框位置,传入文件上传地址。
            driver.close();
            driver.quit();
    
        }
    
    }

    通过这种方法上传,就避免了操作Windows 控件的步骤。如果能找到上传的input 标签,那么基本上就可以通过sendKeys()。

    插件上传,可以使用AutoIt 实现上传 编写脚本 来实现。AutoIt  的安装以及使用需要参考AutoIt 使用手册等相关文档。selenium 通过AutoIt 来操作window窗口的操作实质是通过java代码来调用AutoIt 生成的脚本.exe文件。

    通过Java调用的exe 程序并不在Java 的可控范围内。换句话说,exe 执行多长时间,执行是否出错,Java 程序都无法得知。

    以下是在AutoIt  编辑器中编辑的操作文件上传窗口的代码。

    ControlFocus("打开","","Edit1")
    ;识别windows窗口
    WinWait("[CLASS:#32770]","",10)
    ;窗口等待十秒
    ControlSetText("打开", "", "Edit1", "C:UsershappyDesktopFileUpload.html")
    ;想输入框中输入需要上传的地址
     Sleep(2000)
    ControlClick("打开", "","Button1");
    ;点击[打开】按钮

    以下是java代码

        public static void main(String[] args) throws InterruptedException {
            System.setProperty("webdriver.chrome.driver", "D:/chromedriver_win32/chromedriver.exe");
            ChromeOptions Options = new ChromeOptions();
            Options.addArguments("user-data-dir=C:\Users\happy\AppData\Local\Google\Chrome\User Data");
            WebDriver driver = new ChromeDriver(Options);
            driver.manage().window().maximize();
            File file = new File("C:\Users\happy\Desktop\FileUpload.html");
            // 用java来实现文件读取功 
            driver.get(file.getAbsolutePath());
            driver.findElement(By.name("uploadFile")).click();
            // 点击选择文件按钮
            Thread.sleep(3000);
            // 设置等待3秒
            Runtime exe = Runtime.getRuntime();
            // Java 的Runtime 模块的getruntime.exec()方法可以调用exe 程序并执行。
            try {
                String str = "E://upload.exe";
                exe.exec(str);
                // 运行指定位置的.exe文件
            } catch (IOException e) {
                System.out.println("Error to run the exe");
                e.printStackTrace();
            }
            driver.close();
            driver.quit();
    
        }
  • 相关阅读:
    将博客搬至CSDN
    小啃机器学习(1)-----ID3和C4.5决策树
    然爸读书笔记(2014-12)----20个月赚130亿
    然爸读书笔记(2014-11)----小米的尖叫
    然爸读书笔记(2014-10)----Bootsrap用户手册
    然爸读书笔记(2014-9)----互联网思维到底是什么
    然爸读书笔记(2014-8)----结果第一
    论文阅读(2014-2)----The YouTube Video Recommendation System
    然爸读书笔记(2014-7)----平台战略
    扎克伯格谈Facebook创业过程
  • 原文地址:https://www.cnblogs.com/linxinmeng/p/6950173.html
Copyright © 2011-2022 走看看