gpt4 book ai didi

java - 如何在没有文本框的情况下在 Selenium 中上传文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:46 24 4
gpt4 key购买 nike

我一直在寻找在 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 (另外还有新的 Shiny 的 KeyEvent#getExtendedKeyCodeForChar() ,它做类似的工作,但只能从 JDK7 获得)。

关于java - 如何在没有文本框的情况下在 Selenium 中上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14592853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com