首页 > 解决方案 > 通过java代码在jenkins中文件上传不起作用

问题描述

我正在使用以下代码将文件上传到应用程序

String fileUploadPath = System.getProperty("user.dir") + File.separator
    + "UploadPdfFile" + File.separator;

File file = new File(fileUploadPath);
File[] files = file.listFiles();
String name = null;
for (File f : files) {
    System.out.println(f.getName());
    name = f.getName();
}

// Copy your file's absolute path to the clipboard
StringSelection ss = new StringSelection(fileUploadPath + name);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(ss, null);

Robot robot = new Robot();
robot.delay(250);
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_ENTER);
robot.delay(150);
robot.keyRelease(KeyEvent.VK_ENTER);

上面的代码正在我的本地机器上运行,但是当我尝试在位于不同 Windows 机器中的 Jenkins 中运行相同的代码时失败了,我并没有低估它失败的原因。

细节:

可以帮忙吗?

谢谢

标签: javaseleniumjenkinsselenium-webdriver

解决方案


在此处输入图像描述

我的上传文件 DOM 结构如上图所示:由此我创建了包含“输入”标签的唯一 x 路径。

x路径如下:

x-路径=>"//span[@class='ant-upload']/input"

注意:必须在 xpath 中包含“输入”标签。

之后我使用了适用于我的 WebDriver 默认方法。

   String FileUploadPath = System.getProperty("user.dir")+ File.separator
    + "UploadFile"+ File.separator + "UploadFile.png";      
WebElement uploadElement = 
                driver.findElement(By.xpath("//span[@class='ant-upload']/input"));
  uploadElement.sendKeys(FileUploadPath);

有了这个,我可以成功上传文件。

观察: 詹金斯在无头模式下运行,所以它没有打开任何文件上传弹出窗口,所以我以前的代码(在问题部分中询问)失败了,现在使用上面的代码(在答案部分给出)弹出窗口不会出现,它会直接上传文件。


推荐阅读