Робот в облаке: автоматическая загрузка файлов в облако Qlik Sense

При отсутствии необходимого типа коннектора приходится загружать данные в Qlik Sense Cloud вручную. Временное решение – использовать робота.

Вот шаги, которые нужно предпринять для создания робота.

  1. Установите Selenium Webdriver
  2. Настройте AutoIT
  3. Настройте код AutoIT и Selenium для своей среды.
  4. Создайет и запланируйте задачу Windows

Настройка Selenium Webdriver

Selenium – это программное обеспечение с открытым исходным кодом, которое позволяет реплицировать взаимодействие пользователя с веб-приложением. Основная цель, такая же как у Apache JMeter, — автоматизировать тестирование веб-приложений, но мы также можем использовать ее для автоматизации повторяющихся веб-задач. Selenium позволяет нам управлять браузером (например, перейти к определенному веб-сайту) и взаимодействовать с элементами HTML на основе их атрибутов (например, нажать на кнопку, чей идентификатор является «import-data»). Однако он не дает нам контроля над всем графическим интерфейсом Windows. Вот почему нам нужно использовать AutoIT для взаимодействия с диалоговым окном Windows, которое мы используем для выбора файлов, которые мы хотим загрузить в Qlik Sense Cloud.

В Selenium вы можете использовать различные языки (Java, C #, Ruby, Python, JavaScript) для создания тестового примера. Мы будем использовать Java для автоматизации загрузки файла данных в Qlik Sense Cloud. Вы также можете использовать любой веб-браузер для запуска скрипта. В этом примере мы будем использовать Firefox, потому что Selenium предоставляет плагин для записи пользовательских взаимодействий, которые мы можем преобразовать в Java. Если у вас нет Firefox, загрузите и установите его.

Вы можете найти остальные шаги, чтобы настроить всю среду разработчика Selenium с нуля на http://toolsqa.com/selenium-webdriver/download-and-install-java/. Следующее изображение представляет собой скриншот сайта. Пройдите первые 6 шагов, чтобы настроить Java, Eclipse и Selenium Webdriver Java Client.

 

В Configure Eclipse с Selenium WebDriver вы создаете свой первый проект java. После этого следуйте инструкциям в Running Test на GeckoDriver, прежде чем создавать свой первый тестовый пример. Первый тестовый пример поможет вам отладить любые проблемы с вашей средой, прежде чем добавлять код, о котором я собираюсь рассказать вам позже в этом посте.

После того, как вы сможете запустить свой первый тестовый пример, следующим шагом будет настройка другого инструмента автоматизации, который может работать с диалоговыми окнами Windows.

Настройка AutoIt

AutoIt – это бесплатная программа, которая имитирует действие пользователя в графическом интерфейсе Windows. Мы будем использовать ее, чтобы найти диалоговое окно Windows и имитировать нажатия клавиш. В среде разработчика загрузите и установите полную версию AudIt. Установка довольно проста. Как только вы установите его, мы будем готовы настроить и протестировать код для загрузки файлов данных в Qlik Sense Cloud.

Настроить код

Мы собираемся добавить необходимый код для автоматизации загрузки файла в две части. Сначала мы сконфигурируем код AutoIt, чтобы манипулировать диалоговым окном Windows, и затем мы скорректируем код Selenium Webdriver, который перемещается через Qlik Sense Cloud.

AutoIt

Откройте редактор скриптов SciTe в меню «Пуск» и вставьте следующий скрипт.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

;;Wait 5 seconds for the File Upload window to appear

WinWait(«File Upload», «», 5)

 

;;Paste location of folder where data files are locally stored (Text

limited to 259 characters)

ControlSetText(«File Upload», «», «[CLASS:Edit; INSTANCE:1]»,

«D:\YourPath\QVDs»)

 

;;Wait 1 second to finish pasting text

Sleep(1000)

 

;;Hit Enter and go to folder where data files are locally stored

ControlSend(«File Upload», «», «[CLASS:Edit; INSTANCE:1]», «{ENTER}»)

 

;;Wait 5 seconds to go to folder

Sleep(5000)

 

;;Paste list of data files to upload (Text limited to 259 characters)

 

ControlSetText(«File Upload», «», «[CLASS:Edit; INSTANCE:1]»,

‘»Worklogs.qvd» «DocumentTypes.qvd» «INV1.qvd» «ITR1.qvd» «JDT1.qvd»‘)

 

;;Wait 1 second to finish typing

Sleep(1000)

 

;;Hit Enter and upload data files

ControlSend(«File Upload», «», «[CLASS:Edit; INSTANCE:1]», «{ENTER}»)

Короче говоря, код сначала ожидает появления окна «Загрузка файлов». Затем он переходит в каталог, где находятся файлы данных, и, наконец, по дате выбирает файлы, которые вы хотите загрузить. Вы определяете папку, в которой находятся ваши файлы данных в строке 5, и список файлов данных для загрузки в строке 17. Я выделил обе строки в предыдущем фрагменте кода. Вы также можете ознакомиться с комментариями кода, которые начинаются двумя точками с запятыми (;;), чтобы получить более подробное представление о том, что делает каждая строка.

 

Примечание. Если вы загружаете большое количество файлов данных, а список длиннее 259 символов, вы можете либо сократить имена файлов, либо выполнить этот скрипт дважды из кода Selenium, который мы увидим в следующем разделе.

После того как вы настроите код для загрузки файлов, перейдите в окно загрузки файлов в Qlik Sense Cloud, как показано на следующем рисунке. Затем перейдите в SciTe Script Editor, где у вас есть иземенный код, и нажмите F5, чтобы запустить скрипт. Если все работает правильно, вы увидите текст, который будет введен в текстовое поле «Имя файла» и загружаемые файлы.

Если ничего не происходит, возможно скрипт не может найти окно. Если вы используете язык, отличный от английского, вам нужно будет изменить имя окна в коде. Например, в браузере, поддерживающем испанский язык, замените «File Upload» на «Archivos de cargar», как в следующей строке кода.

ControlSend(«Archivos de cargar», «», «[CLASS:Edit; INSTANCE:1]», «{ENTER}»)

Как только вы подтвердите, что ваш код AutoIt работает, сохраните файл скрипта (.au3), в том месте, где хотите. Чтобы запустить его из Selenium Webdriver, мы также должны скомпилировать скрипт и сохранить его как исполняемый файл (.exe). В редакторе скриптов SciTe перейдите в Инструменты -> Скомпилировать. Теперь перейдите в каталог, в котором вы сохранили файл .au3, и вы увидите файл .exe с тем же именем. Мы будем использовать этот файл в следующем разделе.

Selenium Webdriver

Вы можете заменить код своего первого скрипта следующим скриптом, также вы можете вставить его в новый проект в Eclipse. Если вы не знаете, как создать новый проект, перейдите в «Настроить Eclipse с помощью Selenium WebDriver».

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

package automationFramework;

 

import java.io.IOException;

import java.util.concurrent.TimeUnit;

 

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

 

public class FileUpload {

 

public static void main(String[] args) throws InterruptedException, IOException {

// TODO Auto-generated method stub

System.setProperty(«webdriver.gecko.driver», «C:\\\\YourPath\\geckodriver.exe»);

 

// Create a new instance of the Firefox driver

WebDriver driver = new FirefoxDriver();

 

// Help to not always rely on sleep function to wait

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

driver.manage().timeouts().pageLoadTimeout(100, TimeUnit.SECONDS);

 

//Launch the Qlik Cloud Log In

driver.get(«https://qlikid.qlik.com/cloud«);

 

//Make sure the text box is clear and type account username

driver.findElement(By.id(«MemberLoginForm_LoginForm_QUsername»)).clear();

driver.findElement(By.id(«MemberLoginForm_LoginForm_QUsername»)).sendKeys(«john.doe»);

 

//Make sure the text box is clear and type account password

driver.findElement(By.id(«MemberLoginForm_LoginForm_qPassword»)).clear();

driver.findElement(By.id(«MemberLoginForm_LoginForm_qPassword»)).sendKeys(«123456»);

 

//Submit Username and Password

driver.findElement(By.cssSelector(«input.qlik-submit»)).click();

 

//Wait for 5 Sec

Thread.sleep(5000);

 

//Sometimes sent to Qlik.com, so make sure we’re in Qlik Cloud

driver.get(«https://us.qlikcloud.com/hub/personal«);

 

//Wait for 5 Sec

Thread.sleep(5000);

 

//Go to Workspace

driver.get(«https://us.qlikcloud.com/hub/groups/myWorkSpaceID«);

 

//Click Import Data Button

driver.findElement(By.id(«import-data»)).click();

 

//Click Upload Button

driver.findElement(By.id(«uploadTrigger»)).click();

 

//Run AutoIT script to select files from File Upload Window

Runtime.getRuntime().exec(«C:/MyPath/AutoItScript.exe»);

 

//Wait for 30 Sec

Thread.sleep(30000);

 

//Click Upload Finished

driver.findElement(By.id(«done-upload-file»)).click();

 

//Log out

driver.get(«https://us.qlikcloud.com/logout«);

 

//Wait for 5 Sec

//Thread.sleep(5000);

 

// Close the browser window

driver.quit();

}

 

}

Вы можете понять, что делает каждая строка кода, просматривая комментарии. Я также выделил строки, которые вам нужно настроить в своей среде.

В строке 1 замените имя пакета на любое имя, которое вы ему дали, когда вы создали проект в Eclipse.

package automationFramework;

В строке 10 Eclipse предложит вам изменить имя открытого класса или имя файла java. Сделайте так, как будете считать нужным.

public class FileUpload {

В строке 14 измените путь к файлу, где вы сохранили geckodriver.exe.

System.setProperty(«webdriver.gecko.driver», «C:\\\\YourPath\\geckodriver.exe»);

В строке 27 и строке 31 добавьте свое имя пользователя и пароль Cloud Sense Cloud. Код не шифрует пароль в текущей версии, но я предполагаю, что это возможно.


driver.findElement(By.id(«MemberLoginForm_LoginForm_QUsername»)).sendKeys(«john.doe»);

driver.findElement(By.id(«MemberLoginForm_LoginForm_qPassword»)).sendKeys(«123456»);

В строке 47 замените текущий URL-адрес на свой собственный рабочий стол. Самый простой способ сделать это — вручную войти в свою учетную запись Qlik Sense Cloud, щелкнуть по рабочей области и скопировать URL-адрес. Идентификатор будет содержать буквенно-цифровую строку.

driver.get(«https://us.qlikcloud.com/hub/groups/myWorkSpaceID»);

В строке 56 измените путь к файлу, в котором вы сохранили исполняемый файл скрипта AutoIT, который мы создали в предыдущем разделе.

Runtime.getRuntime().exec(«C:/MyPath/AutoItScript.exe»);

После того, как вы внесете эти изменения, сохраните код и запустите скрипт. Если все идет гладко, вы должны увидеть что-то вроде следующего видео. (Это занимает менее 90 секунд.)

Вероятно, оно не пойдет очень гладко при первом запуске, и вам, скорее всего, придется выполнить настройку или добавить время сна как в скрпите Selenium, так и для скрипта AutoIt. Обратите особое внимание на метод сна в строке 59. Это расчетное время, которое вы ожидаете от программы, чтобы загрузить файл данных, поэтому добавьте немного дополнительного времени, только если скорость соединения будет медленнее, чем обычно.

Добавить новый код

Если в пользовательском интерфейсе Qlik Sense Cloud есть изменения, или если вы хотите добавить дополнительное действие к скрипту, самый простой способ сделать это – использовать Selenium IDE Plugin для Firefox. Вы можете найти ссылку, чтобы загрузить ее на странице загрузки Selenium.

Перейдите на страницу дополнений Mozilla Selenium IDE и выберите вариант добавления в Firefox. После установки надстройки вам придется перезапустить Firefox. После перезагрузки Firefox вы можете настроить меню и сделать Selenium доступным для открытия. Как только вы перейдете к настройке, можете поместить значок Selenium IDE в любое место в меню.

Теперь, если вы перейдете в Qlik Sense Cloud и выберите Selenium IDE, откроется дополнительное окно, которое начнет записывать ваши действия. Selenium IDE должен начать запись сразу же после открытия, но если этого не произошло, вы можете включить и выключить запись в верхнем правом углу окна Selenium IDE.

Когда вы проходите по объектам и вводите текст, вы должны увидеть список действий, отраженных в таблице. Вы можете остановить запись в любое время и воспроизвести эти действия, чтобы проверить, были ли они записаны точно.

Selenium IDE записывает все в HTML по умолчанию. Мы можем изменить язык сценария при копировании и вставке нового кода в Eclipse, изменив формат буфера обмена на Java. Затем вы можете выбрать одну или несколько строк в Selenium IDE, скопировать их и вставить новое действие или последовательность действий как Java в Eclipse.

Таким образом, вы можете обновить свой скрипт, не будучи экспертом по Java, в случае изменения интерфейса облака Qlik Sense Cloud или в случае, если вы хотите добавить новое действие.

Планирование заданий

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

Есть несколько способов запуска сценария из Планировщика задач Windows. В этом примере мы собираемся создать исполняемый файл jar и запустить его из командного файла. Сначала откройте свой проект в Eclipse и экспортируйте свой код в виде исполняемого файла jar. Затем откройте свой любимый текстовый редактор, включите следующую команду в текстовый файл и сохраните его в виде командного файла (.bat).

java -jar «C:\YourPath\UploadDataFiles.jar»

Прежде чем перейти к созданию задачи Windows, проверьте командного файл, дважды щелкнув по нему и убедившись, что сценарий запущен. В некоторых случаях вам может потребоваться щелкнуть правой кнопкой мыши на командном файле и выбрать «Запуск от имени администратора».

После успешного запуска командного файла перейдите в Планировщик задач Windows и создайте задачу. На вкладке «Общие» мастера «Создать задачу …» выберите параметры «Запуск с наивысшими правами» и «Выполнить только при входе пользователя в систему».

Мы не можем запустить эту задачу, когда пользователь выйдет из системы, потому что скрипт должен взаимодействовать с графическим интерфейсом. Это не означает, что вы подключаетесь к серверу в 3 часа ночи, чтобы выполнить задачу. Пользователь может быть зарегистрирован, но отключен одновременно. Например, если вы используете Remote Desktop для подключения к серверу, вы можете отключиться от сервера, и задача будет запущена. Однако, если вы выйдете с сервера, задача не будет выполнена.

На вкладке «Триггеры» определите триггер задачи, который наилучшим образом соответствует вашей цели.

На вкладке «Действия» добавьте действие «Запустить программу» и выберите командный файл.

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

Еще кое-что…

Разумеется, в это решение можно внести множество улучшений, но опять же это временное решение, и мы ожидаем, что Qlik добавит больше коннекторов данных в Qlik Sense Cloud.

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

64 queries in 0,424 seconds