5

我正在尝试使用 java 为网站编写 selenium 测试。但是,我在测试文件上传时遇到了一个问题..

当我单击文件上传按钮时,它会自动打开 windows 文件上传。我有代码可以成功地将文本放入上传框中,只是我无法阻止 Windows 框自动出现,并且让网站不自动打开 Windows 文件上传并不是一个真正的选择。通过研究这个主题,我了解到 selenium webdriver 无法处理这个问题。所以我的问题是:有什么方法可以简单地自动关闭上传窗口?

我已经尝试过 java 机器人类,但它不起作用。它一直等到上传窗口关闭,然后才执行我给它的任何命令(ALT-F4,单击 xy 位置等)

提前致谢

编辑:

wait.until(ExpectedConditions.elementToBeClickable(By.id(("addResourcesButton"))));
driver.findElement(By.id("addResourcesButton")).click();

//popup window comes up automatically at this point


try {
    Robot robot = new Robot();
    robot.mouseMove(875, 625);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
} catch (AWTException e) {
    e.printStackTrace();
}

//my attempt to move the mouse and click, doesn't move or click until after I close the windows upload box

String fileToUpload = "C:\\file.png";


WebElement uploadElement = driver.findElement(By.id("fileInput"));
uploadElement.sendKeys(fileToUpload);

//Takes the code and successfully submits it to the text area, where I can now upload it
4

2 回答 2

5

您可以使用以下任一方式进行非阻塞点击:

高级用户交互 API ( JavaDocs )

WebElement element = driver.findElement(By.whatever("anything"));
new Actions(driver).click(element).perform();

或 JavaScript:

JavascriptExecutor js = (JavascriptExecutor)driver;

WebElement element = driver.findElement(By.whatever("anything"));
js.executeScript("arguments[0].click()", element);
于 2013-05-31T19:30:29.293 回答
0

我已经回答了一个类似的问题。还为上传提供了其他解决方案 - 就像使用 AutoIT。但我个人会推迟与任何特定于操作系统的对话进行交互。与特定于操作系统的对话进行交互会限制您从给定环境运行测试。

Selenium webdriver java - 使用phantomjs驱动上传文件

当涉及上传时,始终识别“文件”类型的元素并与之交互。这将解决您的弹出窗口问题。

例如:在我的应用程序中,上传相关元素具有以下 DOM -

<a id="uploadFileButtonLink" class="uploadFileButtonLink" href="javascript:void(0)" data-uidsfdc="3" style="display: none;">Upload a file</a>
<input id="multiFileInput" class="multifile-upload-input-button" type="file" name="chatterFile_upload" multiple="multiple"/>
<input id="multiUploadBtn" class="btnImportant" type="button" value="Upload Files"/>

在这种情况下,您可以将 sendKeys 方法用于“file”类型的“multiFileInput”。这种方式适用于所有 FF、Chrome 和无头浏览器。

于 2013-05-17T06:10:06.733 回答