微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

问题是我尝试上传的网页元素有两种使用方式:
拖放,或单击按钮.没有字段输入框.并不是说我没有尝试使用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存储库).

谢谢!

解决方法:

不幸的是,你现在不能这样做(2013年1月,Selenium 2.29.1),因为Selenium不支持< input type =“file”multiple>元素.

There is a feature enhancement request由项目开发者自己制作,它还没有实现.您可以在那里加注星标以在优先级列表中向上移动它.

另外,据我所知,您无法以可靠的方式将文件从桌面拖到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);

它很糟糕,但它应该工作.请注意,您可能需要这些:How can I make Robot type a `:`?Convert String to KeyEvents(此外还有新的和闪亮的KeyEvent#getExtendedKeyCodeForChar(),它可以完成类似的工作,但只能从JDK7获得).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐