Java 将文件Classloader/selenium上载到HTML元素type=“file”

Java 将文件Classloader/selenium上载到HTML元素type=“file”,java,selenium,classloader,htmlunit,gargoyle,Java,Selenium,Classloader,Htmlunit,Gargoyle,我使用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) t

我使用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_字段获取文本时,将显示正确的路径。
在谷歌搜索时,我在一个论坛上看到,由于安全原因,无法自动上传文件。这是正确的吗?如果是这种情况,还有其他方法吗。

我认为您可以使用sendkeys方法,键入文件的整个路径,然后单击submit按钮。识别文件对象,并针对其使用sendkeys方法

要设置字段,您不需要设置它的文本,而是要设置它的值!因此,不要使用setText方法,不管它来自何处,使用设置值setValue的方法?设置参数

此外,元素不接受文件的URL,它采用绝对路径。这也意味着你的文件必须有一个绝对路径——它不能隐藏在JAR文件中。如果你把它埋在一个JAR文件中,你需要先把它拷贝出来。然后获取它的路径。如果可以访问,请执行以下操作:

URL fileUrl = ClassLoader.getSystemResource("file.pdf");
String filePath = new File(fileUrl.toURI)).getAbsolutePath();
然后可以将filePath设置为元素的value属性

你提到硒,但你没有使用它的任何方法。如果您实际使用Selenium,则有两个选项:

对于Selenium RC,:

对于SeleniumWebDriver,WebElementsendKeys方法


谢谢你的回复。我找不到sendkeys方法。我认为我的系统不支持它。我正在使用selenium,gargoylehtmlUnit.Hmm如何在文本框中键入内容?public void setTextLocator textField,String text抛出异常{HtmlInput HtmlInput=HtmlInput getElementtextField;pageUtils.page=HtmlPage HtmlPage.setValueAttributetext;}能否将文件上载对话框的定位器和路径作为字符串文本传递?这可能有用。如果我理解你的意思是正确的,这不是我在问题中尝试的吗?嘿,我以前在上传时遇到了问题,因为元素支持多个上传,如下所述:你的元素是否具有多个属性?谢谢你的回复。昨天我很沮丧,忘了添加setText方法。我现在编辑了我的帖子,您可以看到setText use setValueAttribute。我无法使用selenium方法。当我启动一个类时,我运行:client=newextendedWebClient配置;TestData TestData=新的TestDatatestConfiguration;主页=新主页客户端、测试配置、测试数据@好的,这基本上意味着你使用的是纯HTMLUnit,而不是Selenium。虽然使用纯HTMLUnit有利于低级修补,但如果您想更高效地控制浏览器HTMLUnit或更高级别的任何其他浏览器,请考虑使用Selenium。现在-您是否尝试过将文件的绝对路径发送到元素而不是URI?哦,好的,不是我坐在环境中:p如果您阅读了上面帖子中的注释,您可以看到我尝试了什么。是的,我已尝试发送绝对路径。@TorK哦,好的,因为您的代码没有显示它仍然发送URI。你试过了吗?另外,如果有一些JS附加到元素,您可以尝试触发JS。
selenium.attachFile("id=yourFileInputId", fileUrl);
driver.findElement(By.id("yourFileInputId")).sendKeys(filePath);