Java 如何在automation(selenium webdriver)中通过无头浏览器中的窗口弹出窗口将文件上载到web浏览器
我需要通过selenium中的弹出窗口将文本文件上传到我的网页(通过单击浏览) 我用机器人课下面的动作来做这件事Java 如何在automation(selenium webdriver)中通过无头浏览器中的窗口弹出窗口将文件上载到web浏览器,java,selenium-webdriver,bamboo,awtrobot,headless-browser,Java,Selenium Webdriver,Bamboo,Awtrobot,Headless Browser,我需要通过selenium中的弹出窗口将文本文件上传到我的网页(通过单击浏览) 我用机器人课下面的动作来做这件事 public void uploadFileUsingRobot(String filePath) throws AWTException,Exception{ StringSelection path = new StringSelection(filePath); Toolkit.getDefaultToolkit().getSystem
public void uploadFileUsingRobot(String filePath) throws AWTException,Exception{
StringSelection path = new StringSelection(filePath);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(path, null);
Robot r = new Robot();
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_ENTER);
r.keyRelease(KeyEvent.VK_ENTER);
}
它在我的本地工作得很好。但是,当我通过bambol
计划运行此程序时,在headless browser
中运行代码并不像bambol那样有效
有谁能建议我如何在
无头浏览器中上传文件
当您在竹子上执行代码时,您可能使用远程驱动程序。要上载文件,可以使用sendKeys将filepath设置为文件输入字段,并使用fileDetector
解决方案:
如果您有文件输入字段
<input id="fileinputfield" type="file">
描述解决方案
您可能遇到的问题:
RemoteWebDriver remoteWebDriver = (RemoteWebDriver) ((WebDriverFacade) getDriver()).getProxiedDriver();
<input id="fileinputfield" style="display:none;" type="file">
Java脚本执行器和使用robot并不健壮。它们正在工作,有时会失败。我试过AutoIt,即使在无头/远程浏览器中,它也工作得非常好
<input id="fileinputfield" style="display:none;" type="file">
JavascriptExecutor js = (JavascriptExecutor) getDriver();
js.executeScript("document.getElementById('filedata').style.display='inline-block';");
// RemoteWebDriver remoteWebDriver = (RemoteWebDriver) ((WebDriverFacade) getDriver()).getProxiedDriver();
// remoteWebDriver.setFileDetector(new LocalFileDetector());
// WebElement input = remoteWebDriver.findElement(By.id("fileinputfield"));
// input.sendKeys(filePath);
js.executeScript("document.getElementById('filedata').style.display='none';");