【问题标题】:File Upload using Selenium HtmlUnitDriver-headless webdriver使用 Selenium HtmlUnitDriver-headless webdriver 上传文件
【发布时间】:2017-01-24 17:01:49
【问题描述】:

我正在尝试将本地文件 (C:\sample.txt) 上传到我的服务器。我已经尝试使用 Chrome 网络驱动程序来实现这一点,并且它工作得非常好。 但是在使用 HTMLUnitDriver 实现相同的过程中,我无法从本地磁盘浏览文件项。我也尝试了以下两种方法,

1) 发送密钥:

        WebElement inputFile = driver.findElement(By.id("file"));
        System.out.println(driver.getCurrentUrl());
        LocalFileDetector detector = new LocalFileDetector();
        String path = "C:\\UploadSample1.txt";
        File f = detector.getLocalFile(path);
        inputFile.sendKeys(f.getAbsolutePath());

2) 使用机器人:

        WebElement browseFile = fluentWait(By.id("browseFile"), driver);
        browseFile.click();
        File file = new File("C:\\UploadSample1.txt");
        driver.switchTo().activeElement();
        StringSelection fileNameToWrite = new StringSelection(
                file.getAbsolutePath());
        Toolkit.getDefaultToolkit().getSystemClipboard()
                .setContents(fileNameToWrite, null);
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);

我需要浏览文件项,然后只有我可以将其保存到我的服务器。因为只是发送文件路径将在服务器磁盘中搜索文件。现在我真的被困住了,不能再进一步了。

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: javascript java selenium servlets htmlunit-driver


    【解决方案1】:

    如果您需要先浏览到文件,恕我直言,这是不可能的;为此,您将需要 AutoIT(因为不推荐使用 Robot 类)。所以你最好的选择是使用 sendKeys 发送文件路径。

    【讨论】:

    • 感谢库沙尔的回复。实际上我尝试使用 sendKeys 传递文件路径,但是在服务器上,它实际上是在服务器系统中寻找文件,而不是在我的本地。你能建议任何解决方法吗?
    【解决方案2】:

    formInput.setValueAttribute(formValue); 对我来说很好用。

    代码sn-p:

    Iterator<String> formValueIterator =  formValues.keySet().iterator();
    while(formValueIterator.hasNext()){
        String formKey = formValueIterator.next();
        String formValue = formValues.get(formKey);
    
        HtmlInput formInput =  form.getInputByName(formKey);
    
        if (formInput != null)
            if (formInput instanceof HtmlPasswordInput) {
                ((HtmlPasswordInput)formInput).setValueAttribute(formValue);
            } else {
                formInput.setValueAttribute(formValue);
            }
    
    }
    

    【讨论】:

    • 不鼓励仅使用代码回答,因为它们没有为未来的读者提供太多信息,请对您所写的内容提供一些解释
    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 2019-05-08
    • 2013-09-20
    • 1970-01-01
    • 2015-03-22
    • 2015-12-23
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多