当前位置: 首页 > 面试题库 >

如何在没有文本框的Selenium中上传文件

燕宜修
2023-03-14
问题内容

我一直在寻找在Selenium 2中上传文件的解决方案。

问题是,我尝试上传的Web元素有两种使用方式:拖放或单击按钮。没有字段输入框。并不是说我没有尝试使用sendKeys。我已经在按钮以及所有周围的元素上进行了尝试。

此问题的第二部分是我在Windows计算机上编写,但是自动化发生在Linux计算机上。这意味着AutoIt不起作用。这是上传框的HTML。

<div class="up-target" id="up-drop-zone">
    <div class="up-drop-zone-pre hidden">
        <p>Please choose a folder to upload</p>
    </div>
    <div class="up-drop-zone-decor">
        <p>Drop one or more files here</p>
        <p>or</p>
        <button name="uploadFile" class="upload">Select Files</button>
        <input type="file" id="up-drop-zone-input" name="files[]" multiple="true">
    </div>
</div>

我正在使用Java,并且可以使用Selenium之外的其他方法(但是,我只具有选择的Maven存储库)。

谢谢!


问题答案:

不幸的是,由于Selenium不支持<input type="file" multiple>元素,您目前无法做到这一点(2013年1月,Selenium
2.29.1)。

项目开发人员自己对此有一个功能增强请求,但尚未实现。您可以在此处加注星标以将其在优先级列表中向上移动。

另外,据我所知,您无法真正WebElement可靠地将文件从桌面拖到。

解决方法可能是使用AutoIT(仅Windows)或Robot类(也将仅在与您类似的设置上起作用),然后在对话框中“盲目”键入路径:

driver.findElement(By.id("up-drop-zone-input")).click();
Robot r = new Robot();
r.keyPress(KeyEvent.VK_C);        // C
r.keyRelease(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_COLON);    // : (colon)
r.keyRelease(KeyEvent.VK_COLON);
r.keyPress(KeyEvent.VK_SLASH);    // / (slash)
r.keyRelease(KeyEvent.VK_SLASH);
// etc. for the whole file path

r.keyPress(KeyEvent.VK_ENTER);    // confirm by pressing Enter in the end
r.keyRelease(KeyEvent.VK_ENTER);

它很烂,但应该可以。请注意,您可能需要这些:如何使机械手键入?并将String转换为KeyEvents(另外还有一些新功能和亮点KeyEvent#getExtendedKeyCodeForChar(),它们的工作类似,但仅JDK7提供)。



 类似资料:
  • 问题内容: 我试图在不实际使用用户输入文件的情况下伪造文件上传。文件的内容将从字符串动态生成。 这可能吗?有人做过吗?有例子/理论可用吗? 澄清一下,我知道如何使用隐藏的iframe和朋友使用AJAX技术上传文件-问题是上传的文件格式不正确。 我正在使用ExtJS,但是jQuery也是可行的,因为ExtJS可以插入其中(ext-jquery-base)。 问题答案: 为什么不只与POST一起使用?

  • 问题内容: 谁能让我知道如何使用Java代码使用Selenium上传文件? 当我单击应用程序中的按钮时,它将在新窗口中打开,可以用来选择上传文件。Silverlight(C#)开发的浏览按钮。 问题答案: 首先确保输入元素可见 正如Mark Collin在此处的讨论中所述: 不要单击浏览按钮,它会触发操作系统级别的对话框并有效地停止测试。 相反,你可以使用: myUploadElement是该元素

  • 谁能让我知道如何通过Java代码使用Selenium上传文件? 当我点击应用程序中的按钮时,它会在新窗口中打开,我可以用它来选择上传文件。Silverlight(C#)开发的浏览按钮。

  • 问题内容: 我正在尝试使用ajax上传文件,这给了我一个错误,其余的数据上传成功了,我尝试了不使用ajax进行文件上传,但是当我尝试通过ajax上传文件时给了我错误,我完全困惑为什么ajax给我问题。这是我的代码。 process.php文件编码在这里。 问题答案: 首先,serialize()函数不适用于文件,您应该使对象成为可通过其发布数据的表单对象,并且可以完美地工作。因为我已经测试过了 请

  • 在我的应用程序中,其中一个页面有更多的下拉框和文本框,我正在尝试验证每个文本框和下拉框的标题,但我无法构造适当的xpath来进行断言。 下面是文本框和下拉框的HTML代码。 文本框和下拉列表的标题如下: 请选择信用类型: 你需要多少? 贷款期限 雇用类型 我无法构造xpath来定位正确的webelement来断言标题,因为所有文本框的类名都是一样的。 找到元素的正确方法是什么?请推荐合适的XPat

  • 在Ubuntu机器上,我尝试自动上传文件,但在使用selenium的Chrome无法做到这一点。我尝试了Robot类和普通发送键方法。 请参考我的代码: StringSelection=new StringSelection(“/home/manojnn/Desktop/OrderDetails.xlsx”);工具箱。getDefaultToolkit()。getSystemClipboard()