Как извлечь данные из Google Chrome JavaScript Alert Popup с помощью UiPath - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу извлечь текст и затем нажать кнопку во всплывающем окне оповещения Google Chrome JavasScript с помощью UiPath.

В частности, у меня возникли проблемы сследующее:

  1. Что такое селектор для нацеливания на диалог и как вы его нашли?
  2. Какой селектор нацеливает и извлекает текст из диалогового окна и как вы находитеэто?
  3. Какой селектор нажимает кнопку OK в диалоговом окне и как вы это находите?

Я знаю, что для веб-автоматизации UiPath рекомендует использовать IE в большинстве случаев, поскольку UiPath может взаимодействовать с ним более «родным» способом, используя его COM-объект браузера.Другие браузеры будут иметь ограничения и могут возникнуть проблемы в случае обновления версии.Однако в некоторых ситуациях невозможно использовать IE, поскольку в моей работе у нас есть соглашение с Google о работе, и большинство наших внутренних сайтов не работают в IE.

Для завершения расширенной сертификации UiPath Level 3(онлайн): Задание 2 - Создание годового отчета, вы должны создать робота для выполнения следующих действий:

  • Перейдите к https://acme -test.uipath.com /
  • Войдите в систему с именем пользователя и паролем
  • Нажмите на различные элементы для навигации по системе
  • Взаимодействуйте и извлекайте данные из всплывающих окон JavaScript Alert

Проблемазаключается в том, что UiExplorer не может найти правильный селектор, что затрудняет получение текста из всплывающего окна Google Chrome, поскольку он не отображается так же, как для IE, и не предоставляет атрибут текста (среди прочих).Вот фрагмент сайта acme-test для создания предупреждений, помогающих определить селектор, и вот файл UiPath XAML :

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>

<head>
  <title>Upload reports</title>
</head>

<body>
  <!-- Page Content -->
  <div class="container">
    <button type="button" class="btn btn-primary" id="buttonUpload">Upload Report</button>
    <script type="text/javascript">
      jQuery(document).ready(function() {

        $('input[type=file]').on('change', prepareUpload);

        function prepareUpload(event) {
          files = event.target.files;
          $('#upload-file-info').html(files[0].name)
        }

        jQuery('#buttonUpload').click(function(event) {
          event.stopPropagation(); // Stop stuff happening
          event.preventDefault(); // Totally stop stuff happening

          var vTaxID = jQuery('#vendorTaxID').val();
          var rYear = jQuery('#reportYear').val();

          // If nothing is filled
          if (vTaxID == "" || rYear == "") {
            alert('Plase fill in the Vendor TaxID and Report Year!');
            return;
          }

          if (typeof files === 'undefined') {
            alert('Please select the Report File');
            return;
          }

          // Create a formdata object and add the files
          var data = new FormData();
          jQuery.each(files, function(key, value) {
            data.append(key, value);
          });

          console.log('...');

          jQuery.ajax({
              url: "/cmajax.php?cmd=uploadReport&cvTaxID=" + vTaxID + "&crYear=" + rYear,
              type: "POST",
              data: data,
              cache: false,
              dataType: 'json',
              processData: false, // Don't process the files
              contentType: false, // Set content type to false as jQuery will tell the server its a query string request
            })
            .always(function(msg) {
              console.log('done');

              if (msg.responseText == 'bad')
                alert("Some problems were encountered.");
              else {
                console.log(msg);
                alert('Report was uploaded - confirmation id is ' + msg.responseText);
              }
            });
        })
      });
    </script>
  </div>
</body>

</html>

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Мне удалось извлечь информацию и двигаться дальше, используя: * «Получить текст OCR» во всем окне Chrome (используя элемент указания, когда всплывающее окно не отображается, потому что это, похоже, вызывает проблемы студии UIPath на моем компьютере), и добираюсь дотекст, который мне нужен, используя строковые операции в операции «Назначить».* «Send Hotkey» войдите в окно Chrome, чтобы закрыть всплывающее окно

Я использовал Google OCR с настройками по умолчанию (eng, scale 2, ...)

0 голосов
/ 10 февраля 2019

Следующее может быть не совсем то, что вы ищете, но оно может предоставить альтернативное решение.Оповещения могут быть немного трудной для автоматизации в большинстве инструментов RPA, поэтому мне нравится использовать трюк переопределения оповещений .

В основном вы вводите функцию, которая переопределяет функцию оповещения по умолчанию (который отображает всплывающее окно) и перенаправляет его содержимое куда-то, куда UiPath может попасть, например, в текстовое поле.

Более подробно, вы создаете текстовое поле где-нибудь ...

var body = document.getElementsByTagName("body")[0];
var text = document.createElement("input");
text.id = "alertOutput";
body.insertBefore(text, body.firstChild);

...а затем переопределить функцию оповещения путем перенаправления сообщения.

function alert(message) {
    var text = document.getElementById("alertOutput");
    text.value = message; // or .innerText
}

Теперь каждое оповещение на странице будет отправлять свое содержимое непосредственно в текстовое поле, а не отображать всплывающее окно.

PS: Я был намеренновы не используете jQuery в моем коде, но, увидев, что он доступен на вашем сайте, вы можете воспользоваться этим.

...