• 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();
    
        }
  • 相关阅读:
    轻便的客户端oracle instant client安装备忘(zt)
    OpenOffice3.0以服务方式运行在Windows平台(文件转换服务器解决方案)
    动态生成与编译(二)CodeDOM的类层次结构
    动态生成与编译(五)用CodeDOM生成一个完整的类(下)
    动态生成与编译(三)写一个面向过程的程序
    动态生成与编译(一)入门
    运行时设置数据库连接字符串
    动态生成与编译(四)用CodeDOM生成一个完整的类(上)
    世界级的《生化危机4 / Biohazard 4 / ResidentEvil 4》
    充满悬念的世界杯! 《FIFA World Cup GERMANY 2006》
  • 原文地址:https://www.cnblogs.com/linxinmeng/p/6950173.html
Copyright © 2020-2023  润新知