В jenkins не работает загрузка файлов через код java - PullRequest
0 голосов
/ 08 января 2020

Я использую следующий код для загрузки файла в приложение

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);

Выше код работает на моей локальной машине, но когда я пытаюсь запустить тот же код в Jenkins, который находится в другом windows Машина не работает, я не понимаю, почему она выходит из строя.

Подробности:

  • OS = windows 10
  • язык = java
  • селен Версия = 3.141 .5
  • Jenkins Версия = 2.190.2
  • java версия = 8

Может ли помочь в этом?

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

enter image description here

Структура DOM моего загружаемого файла такая же, как показано на рисунке выше: Из этого я создал уникальный x-путь, включающий тег input.

x-path выглядит следующим образом:

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

Примечание: Обязательно включать тег 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);

Благодаря этому я могу успешно загрузить файл.

Наблюдение: Jenkins работает в автономном режиме, поэтому он не открывает всплывающее окно загрузки файла, поэтому мой предыдущий код (заданный в разделе вопросов) не работает. Теперь с кодом выше (приведенным в разделе ответов) всплывающее окно не появится, оно будет напрямую загрузить файл.

0 голосов
/ 08 января 2020

Установлено ли системное свойство для учетной записи службы Jenkins? Если вы установили Jenkins как сервис, он использует системную учетную запись. Возможно, это свойство не установлено.

Если вы используете Jenkinsfiles, вы можете использовать его следующим образом:

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

Этот плагин может помочь: Плагин EnvInject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...