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();
    
        }
  • 相关阅读:
    Ext JS学习第三天 我们所熟悉的javascript(二)
    Ext JS学习第二天 我们所熟悉的javascript(一)
    Ext JS学习第十七天 事件机制event(二)
    Ext JS学习第十六天 事件机制event(一)
    Ext JS学习第十五天 Ext基础之 Ext.DomQuery
    Ext JS学习第十四天 Ext基础之 Ext.DomHelper
    Ext JS学习第十三天 Ext基础之 Ext.Element
    Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)
    针对错误 “服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF” 的原因分析
    C# 使用HttpWebRequest通过PHP接口 上传文件
  • 原文地址:https://www.cnblogs.com/linxinmeng/p/6950173.html
Copyright © 2011-2022 走看看