当前位置: 首页 > 知识库问答 >
问题:

selenium上传文件java Chromedriver/FirefoxDriver

罗翰
2023-03-14
 driver.findElement(By.xpath("//input[@id='FakeInputName2']")).sendKeys("C:\\Users\\MyUsername\\Pictures\\Lighthouse.jpg");
<tr>
<td align="right"> Image: </td>
<td>
    <div id="RenamedUpload1" class="RenameUpload RenameUpload RenameUpload_Office2007">
        <ul id="RenameUpload1ListContainer" class="renamedInputs">
            <li id="RenameUpload1row0">
                <span class="blerghFileWrap blerghStyled">
                    <input id="FakeInputName" class="renamedThisFakeInput somethingNoDecorate" type="text" tabindex="-1" size="67">
                    <label for="FakeInputName" style="display:none">label</label>
                    <input class="notButton notBrowse" type="button" tabindex="-1" value="Select" style="border: 0px dotted;">
                    <input id="FakeInputName2" class="notFileInput" type="file" tabindex="0" name="FakeInputName2" size="68">
                    <label for="FakeInputName2" style="display:none">label</label>
                </span>
            </li>
        </ul>
    </div>
</td>

我还尝试了类似问题的其他答案所建议的runtime.getruntime()。那根本没用。有人能帮忙吗?

以下是控制台输出和堆栈跟踪(为了澄清(MyClass第114行位于字符串filePath=url.getfile();行的位置):

Creating Chrome webdriver... Starting ChromeDriver (v2.8.241075) on port 14489
Process took 2 seconds.
java.lang.NullPointerException
at builderselenium.MyClass.runUseCase(MyClass.java:114)
at builderselenium.UseCase.run(UseCase.java:104)
at builderselenium.TestDriver.runUseCase(TestDriver.java:165)
at builderselenium.MyGUI.runUseCase(MyGUI.java:410)
at builderselenium.MyGUI.actionPerformed(MyGUI.java:299)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

共有1个答案

景昊焜
2023-03-14

“*.jpeg”-文件不是有效的。jpg文件。

你能至少显示FileUpload的HTML代码吗?

您确定您的JVM有权访问该文件吗?也许您应该将该文件添加到您的资源文件夹中。如果您的文件存储在“[...]\workspace\projcetname\src\test\resources”中,那么应该可以:

String pathToUpload = "/Lighthouse.jpg";
URL url = MYCLASSNAME.class.getResource(pathToUpload);
String filePath = url.getFile();
System.out.print(filePath);
File imgToUpload = new File(filePath);
String absolutePath = imgToUpload.getAbsolutePath();
System.out.print(absolutePath);
driver.findElement(By.xpath("//input[@id='FakeInputName2']")).sendKeys(absolutePath);
System.out.print(driver.getPageSource());
 类似资料:
  • 我寻找解决方案,但我没有找到任何除了集成它与自动或自动热键... 第一行打开Firefox的文件上传框。

  • 如何使用selenium webdriver通过窗口提示从本地上传文件? 我想执行以下操作: 点击窗口上的“浏览”选项 从窗口提示符转到保存文件的本地特定位置 选择文件,然后单击“打开”以上传文件。

  • 问题内容: 我的测试需要在不同的浏览器中上传测试文件(我使用+ )。对于单个文件上传,一切正常。我只是发送路径 Firefox:我找不到正确的语法。 任何想法? 所有浏览器都有通用的语法吗? 问题答案: 据我所知,硒 仍然 不支持多个文件上传(请参阅google code上的问题 )。 至少有一种解决方法:显然创建一个包含所需输入字段的表单。这不是最佳的解决方案,因为它(可能)需要更改您的代码才能

  • 问题内容: 码: 但是我收到以下错误: 问题答案: 问题是-您将键发送到不“可交互” 的元素,不接受键-因此出现“无法聚焦元素”错误。 您链接的解决方案背后的想法是 将密钥发送到 负责文件上传的元素。在HTML中找到此元素,然后向其发送密钥。 请注意,此元素可能是不可见的。在这种情况下,你应该先使其可见的工作。 更新: 好的,现在我们至少知道哪个元素是我们想要的元素: 由于找不到此元素很麻烦,请尝

  • 我有如下所示的按钮(图像和HTML),并试图单击它。 Selenium无法定位它--我尝试通过xpath和ID进行定位。 XPath:

  • 我有一个ASP。NET文件上载控件,当您单击上载按钮选择要上载的文件时,该控件将打开一个窗口。但问题是,网络驱动程序无法识别窗口,因此无法选择要上载的文件。 我在stackoverflow中找到了许多使用sendkey输入文件路径的解决方案。我认为当你有html文件上传控制时,这是有效的。在我的情况下,我有ASP。NET文件上传控件,它没有文本框,我可以在其中使用sendkey输入文件路径。 我该