【问题标题】:File upload is not working in jenkins through java code通过java代码在jenkins中文件上传不起作用
【发布时间】:2020-01-08 13:07:24
【问题描述】:

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

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 中运行相同的代码时失败, 我并没有低估它失败的原因。

详情:

  • 操作系统 = Windows 10
  • 语言=java
  • 硒版本 = 3.141.5
  • Jenkins 版本 = 2.190.2
  • java版本=8

可以帮忙吗?

谢谢

【问题讨论】:

  • 能否请您粘贴詹金斯的控制台输出?
  • 它没有显示任何错误,方法执行成功但文件没有上传
  • 文件输出了吗?
  • 不,这是一个简单的 pdf 文件,我必须将其上传到我的应用程序中
  • 在 for 循环中,您将输出目录中的所有文件。所以你应该在某处看到一些输出。您只是使用目录中的最后一个文件。所以你应该在日志中看到一些文本。

标签: java selenium jenkins selenium-webdriver


【解决方案1】:

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

x-path如下:

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

注意:必须在xpath中包含'input'标签。

之后我使用了 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);

这样我就可以成功上传文件了。

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

【讨论】:

    【解决方案2】:

    是否设置了 Jenkins 服务帐户的系统属性?如果您已将 Jenkins 作为服务安装,它将使用系统帐户。也许该属性没有在那里设置。

    如果你正在使用 Jenkinsfiles,你可以这样使用它:

    stages {
        stage('Build') {
            environment { 
                    user.dir= 'c:\users\jenkins'
                }
            steps {
                sh 'env'
                sh 'echo $AOEU'
            }
        }
    }
    

    这个插件可能有帮助:EnvInject Plugin

    【讨论】:

    • 我已将我的文件从我上传的那个位置保存在我的自动化框架中,我没有使用 jenkins 文件
    猜你喜欢
    • 2014-07-19
    • 2013-01-05
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多