1

我正在使用 Selenium、java 和 classloader 将 pdf 文件上传到带有元素的 HTML 页面

type="file"

我的代码是:

    String fileURI = ClassLoader.getSystemResource("file.pdf").getFile();

    setText(DOCUMENTATION_FILE_FIELD, fileURI);

    public void setText(Locator textField, String text) throws Exception {
         HtmlInput htmlInput = (HtmlInput) getElement(textField);
        pageUtils.page = (HtmlPage) htmlInput.setValueAttribute(text);
    }

当我按下页面上的“上传”按钮时,没有任何反应。没有错误,没有文件上传。当我从 中获取文本时DOCUMENTATION_FILE_FIELD,会显示正确的路径。谷歌搜索时,我在论坛上读到,由于安全原因,无法自动上传文件。这个对吗?如果是这种情况,是否还有其他方法可以做到这一点。

4

2 回答 2

0

我认为您可以使用 sendkeys() 方法并键入文件的整个路径并点击提交按钮。识别文件对象并针对它使用 sendkeys 方法。

于 2013-07-24T08:12:09.157 回答
0

要设置<input type="file">字段,您无需设置其文本,而是设置其值!因此,不要使用setText()方法(无论它来自哪里),而是使用设置值的方法(setValue()??setArgument())。

此外,该<input type="file">元素不接受文件的 URL,它采用绝对路径。这也意味着你的文件必须有一个绝对路径——它不能被隐藏在 JAR 文件中。如果你把它埋在一个 JAR 文件中,你需要先把它复制出来。然后获取它的路径。如果可以访问,请执行

URL fileUrl = ClassLoader.getSystemResource("file.pdf");
String filePath = new File(fileUrl.toURI)).getAbsolutePath();

然后,您可以将 设置为元素filePathvalue属性。<input>


你提到了 Selenium,但你没有使用它的任何方法。如果您实际使用 Selenium,那么有两种选择:

  • 对于 Selenium RC Selenium#attachFile()方法

    selenium.attachFile("id=yourFileInputId", fileUrl);
    
  • 对于 Selenium WebDriver,WebElement#sendKeys()方法

    driver.findElement(By.id("yourFileInputId")).sendKeys(filePath);
    
于 2013-07-25T00:36:28.810 回答