Загрузка файла из файловой системы в область перетаскивания на веб — странице-Платформа робота Selenium не работает с элементом, с которым невозможно взаимодействовать

#robotframework

Вопрос:

Платформа робота Выбирает файл, не удается загрузить файл в область перетаскивания на веб-странице. Мы не можем использовать AutoIt, так как мы настраиваем наши тесты для запуска в Docker Jenkins. Есть ли способ добиться этого с помощью выполнения Java-скрипта ? Перепробовал множество решений, предложенных в stack overflow, но безуспешно. Ниже приведен домен нашей веб-страницы:

 <form>
 <ul class="form-fields grid" style="display: flex;">
  <li class="row-divider"></li>
  <li class="grid__col-6 required" id="Certification.upload" style="display: flex;">
    <label for="upload">Certification Document Upload</label>
    <div class="Block_block__3KAi_ Block_block__center-content__1bky1" style="height: 6rem; 
     padding: 0.5rem; border-color: rgb(193, 202, 206); 
     cursor: pointer;">Drop file here or click to choose file</div>
    <input type="file" class="hide text-input">
  </li>
  <li class="row-divider"></li>
 <li class="grid__col-6" id="annualCertification.downloadBlankPDF" style="align-content: baseline; display: flex;"><button class="btn btn--outline" style="margin-top: 1rem; outline: none;"><i class="fa fa-download"></i>amp;nbsp;<span>Blank Certification Form</span> </button></li> 
  <li class="grid__col-12 form_form__horizontal_rulers__3_u4v"><hr class="line-break"></li>
  </ul>
 </form>  
 

Попробовал ниже Код фреймворка робота :

    execute javascript  
     ...    var element=document.evaluate("//input[@type='file']", document, null, 
        XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
     ...    element.setAttribute("class", "text-input");
   Choose file  //input[@type='file']  ${EXECDIR}/UI/annual-certification-form.pdf  
 

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

Комментарии:

1. Вы пробовали перетаскивать ?

2. @Dev Перетаскивание ванильного селена (и, следовательно, также SeleniumLibrary) не всегда работает в таких случаях.

3. Перетаскивание также не сработало

Ответ №1:

В зависимости от реализации ваших событий SUT — перетаскивания — особенно, если перетаскивание файла с компьютера в окно браузера обрабатывается несколько иначе, чем механизм «выберите файл для загрузки». Селен и SeleniumLibrary тоже не поддерживают это из коробки.

Однако SeleniumTestability переопределяет Drag And Drop ключевое слово SeleniumLibrary, чтобы реализовать обходной путь javascript для этого.

   Drag And Drop      file:${CURDIR}${/}${FILENAME}       id:demo-upload
 

Таким образом, это может работать непосредственно с вашим сценарием, если первый параметр file: указывает абсолютный путь к файлу, который вы хотите загрузить, и id:demo-upload соответствующий селектор для ввода ta..

Смотрите мой приемочный тест @ https://github.com/rasjani/robotframework-seleniumtestability/blob/master/atest/draganddropfile.robot

Комментарии:

1. Я попробовал SeleniumTestability, используя ваш пример, но я получаю эту ошибку : Элемент с локатором «файл:../UI/годовая сертификация-форма.pdf» не найден. Но файл находится в указанном пути к файлу, я указал только абсолютный путь. Почему он ожидает, что это будет элемент ?

2. скорее всего, у вас есть несколько файлов набора, которые все импортируют SeleniumLibrary, но другие не будут делать это с помощью плагина ..