Robot UltimateRPA pracuje s aplikací stejně jako běžný uživatel. Může například aktivovat tlačítka pod kurzorem myši nebo používat klávesové zkratky. V tomto návodu si vyzkoušíme jak na to.
Nejdříve si připravíme kód pro spuštění aplikace RpaLoginTest. Naimportujeme modul urpa. Funkcí condition_factory si vytvoříme konstantu cf. Definujeme si funkci main, ve které pomocí funkce set_debug_mode spustíme robota v debuggovacím režimu, který nám nalezený element GUI zvýrazní zeleným rámečkem a tak se můžeme přesvědčit, že jsme opravdu našli to, co jsme chtěli. Cesta k aplikaci v argumentu funkce exec_app může být absolutní nebo relativní vůči skriptu. Nakonec metodou set_auto_close nastavíme, aby robot spuštěnou aplikaci po dokončení skriptu neukončil. Pokud s tímto nastavením spouštíte aplikaci přes PyScripter, je nutné jí ukončit před dalším spuštěním robota.
Cesta k aplikaci "TutorialApps/RpaLoginTest.exe" je relativní od umístění spouštěného skriptu a předpokládá, že skript je uložený v hlavní složce s nástroji UltimateRPA. Pokud je váš skript uložený jinde, nezapomeňte cestu upravit.
Jeden z nejčastějších úkonů, který běžný uživatel při ovládání aplikací používá, je kliknutí myší, a proto si ho ukážeme jako první. Použijeme k tomu aplikaci RpaLoginTest, kterou si bez pomoci robota spustíme. V nástroji Inspector aktivujeme zaměřovač a přeneseme ho na tlačítko Login v aplikaci RpaLoginTest. Zaškrtneme pole checkboxu Name.
Jak můžeme vidět v levé části Inspectoru, vlastnost Name s hodnotou Login nám nestačí k jednoznačnému nalezení požadovaného elementu GUI. Musíme tedy rozšířit naši condition factory o další vlastnost. Zaškrtneme tedy ještě pole Control type. V Search function vybereme find_first a v Type of action vybereme send_mouse_click. Inspector nám v poli Expression vygeneruje výraz app.find_first(cf.button().name("Login")).send_mouse_click()
. Ten si zkopírujeme do našeho kódu. Metoda send_mouse_click umístí kurzor na střed elementu a provede kliknutí myší.
Spustíme robota pomocí klávesové zkratky (ALT + F9) nebo v horním menu PyScripteru vybereme Run a potom External Run. Robot spustí aplikaci RpaLoginTest a klikne na tlačítko Login. Vzápětí aplikace zobrazí chybovou hlášku, že uživatelské jméno nebo heslo je chybné.
Metoda send_mouse_click má dva nepovinné parametry. První se jmenuje action a slouží k nastavení typu akce myši. Například zde můžeme nastavit, jestli chceme stisknout pravé nebo levé tlačítko. Ve výchozím nastavení robot stiskne levé tlačítko myši. Přehled všech možných voleb najdete v dokumentaci funkce set_default_mouse_action. Druhý parametr se nazývá position a umožňuje nám zvolit souřadnice, kam se umístí kurzor, než se provede kliknutí myši. Více informací získáte v dokumentaci send_mouse_click.
Při práci s aplikací může uživatel používat i klávesnici. Proto je další na řadě metoda send_key, která provede stisknutí vybrané klávesy. Použití si ukážeme v příkladu na aplikaci RpaLoginTest, kde vyplníme písmeno "u" do pole Username. Zaměřovač Inspectoru přeneseme na příslušný editbox a zaškrtneme Name a Control type, vybereme find_first a jako Type of action zvolíme send_key. Vygeneruje se nám výraz app.find_first(cf.edit().name("Username")).send_key("")
, který vložíme do našeho kódu a do dvojitých uvozovek metody send_key vložíme "u".
Spustíme skript, který nám spustí aplikaci RpaLoginTest a označí zeleným rámečkem editbox Username a pak do něj vyplní písmeno "u".
Robot nemá problém ani s kombinací kláves. Například můžeme aplikaci ukončit klávesovou zkratkou ALT+F4. Nahradíme řetězec "u"
v argumentu metody send_key za "ALT+F4"
.
Opět spustíme skript. Robot spustí aplikaci, najde textové pole a aplikaci ukončí klávesou zkratkou ALT+F4. Tato metoda, ale není vhodná pro zadávání textu. Mnohem více se k tomu hodí metoda z další kapitoly.
Abychom textové pole nemuseli vyplňovat po jednom znaku má robot k dispozici metodu send_text, které předáme jako argument řetězec, který robot vyplní do příslušného elementu GUI. Zkusíme si praktický případ opět na aplikaci RpaLoginTest a konečně se zkusíme do aplikace řádně přihlásit. Uživatelské jméno je RPA_test_user a heslo 12345. Myslím, že najít pomocí Inspectoru editboxy pro Username a Password zvládnete už sami. Jako Type of action si nastavte send_text, zkopírujte výrazy do kódu a doplňte o přihlašovací jméno a heslo. Nakonec ještě přidáme řádek s aktivací tlačítka login pomocí metody send_mouse_click.
Spustíme skript a robot nám spustí aplikaci. Vyplní uživatelské jméno a heslo a aktivuje tlačítko login. Objeví se nám nové zpráva, že přihlášení bylo úspěšné.
Metoda set_focus slouží k nastavení fokusu pro vybraný element GUI. Fokus nastaví element GUI jako aktivní. My zkusíme dát fokus tlačítku Login v aplikaci RpaLoginTest. Tlačítko si označíme pomocí Inspectoru stejně jako v předchozích případech, a protože Type of action možnost set_focus nenabízí, nastavíme ji na (none). Zkopírujeme vygenerovaný výraz do našeho kódu a doplníme ho o volání metody set_focus takže poslední řádek bude vypadat takto app.find_first(cf.button().name("Login")).set_focus()
.
Spustíme robota a otevře se nám okno aplikace RpaLoginTest a kolem vnitřní hrany tlačítka se udělá tečkovaná čára, která značí, že tlačítko Login dostalo fokus.
V některých případech nepotřebujeme s elementem GUI provádět žádnou akci, ale chceme jen znát jeho vlastnosti, například hodnotu, která je vyplněná v textovém poli. Ukážeme si opět několik praktických příkladů, tentokrát na aplikaci RpaTableTest. Nejdříve si připravíme aplikaci podle kódu níže. Tentokrát nebudeme potřebovat debuggovací režim a vlastnosti elementů GUI budeme vypisovat přímo do logu PyScripteru python výrazem print
.
V ukázce si vytiskneme do konzole všechny hodnoty v prvním řádku tabulky aplikace RpaTableTest. Najdeme si pomocí nástroje Inspector první řádek. Pokud nevíte jak na to, pomůže vám kapitola Vyhledání elementu v aplikaci. V řádku si pak vyhledáme všechny elementy typu text. Ty pak projedeme cyklem for a vytiskneme si do konzole jejich jméno za použití metody name.
Do konzole se nám zaznamenává spousta užitečných informacích, více si o nich řekneme v kapitolePokročilé lekce. V tuto chvíli nám stačí vědět, že každý příkaz print
ve skriptu se do konzole zapíše. Konzoli můžete najít v PyScripteru ve spodním okně v záložce Output.
Pro získání hodnoty elementu GUI postupujeme stejně, jen místo metody name použijeme value.
Jako další vlastnost zkusíme zjistit velikost obrázku Simply with UltimateRPA a jeho pozici na obrazovce. Inspectorem identifikujeme obrázek a vytvoříme si výraz app.find_first(cf.image())
. Ten v našem kódu uložíme do proměnné image. Velikost elementu GUI získáme použitím metody size na objekt image. Velikost je metodou vrácena jako tuple obsahující dvě hodnoty integer. První je šířka elementu GUI a druhá je výška v pixelech. Aktuální pozici elementu GUI na celé obrazovce (Pozor ne v aplikaci!) získáme metodou bounding_rectangle, která pozici vrací jako tuple čtyř hodnot integer v pixelech od levého vrchního rohu. Hodnoty jsou řazeny v pořadí levá, vrchní, pravá, spodní.
Po spuštění a po ukončení si prohlédneme konzoli, kde najdeme požadované informace.
Seznam všech metod, které můžeme nad elementem GUI použít, najdeme v dokumentaci ke třídě AppElement.
Při robotizaci je vždy důležité začít pracovat s aplikací, až když je úplně načtená. Proto se nám osvědčila praxe, že než začneme s aplikaci pracovat, vybereme si pro každou obrazovku několik kontrolních elementů GUI, na kterých ověříme, že se obrazovka po předchozí akci stihla nahrát. Pokud je to možné, volíme elementy GUI tak, aby patřili mezi ty, co se na obrazovce objevují jako poslední.
Další postup, který se nám v praxi osvědčil je kontrolovat před odesláním formuláře, jestli údaje v nich vyplněné, souhlasí s tím, co jsme vyplnit chtěli. Někdy se může stát, že aplikace na okamžik zamrzne a nereaguje. Robot pak do textového pole nevyplní řetězec celý, ale pouze jen jeho část. Abychom se této a podobným situacím vyhnuli před tím, než formulář odešleme, zkontrolujeme vlastnosti všech elementů, které jsou pro nás důležité, a formulář odešleme jen v případě, že jsou všechny v pořádku.
Někdy se může stát, že Inspector potažmo robot, najdou elementy GUI, které v aplikaci sice jsou, ale nejsou přístupné pro interakci. Například v naší aplikaci RpaTableTest si můžete všimnout, že Inspector ve stromě zobrazí i informace o řádcích v tabulce, které nevidíme a museli bychom scrollovat dolů, abychom se k ním dostali. Takové elementy GUI, i když je robot najde, nejdou ovládat například stisknutím tlačítka myši. Pokud s nimi potřebujeme pracovat, musíme nejdříve elementy GUI zpřístupnit. Toho se dá často docílit pomocí stisku šipek na klávesnici nebo použitím klávesy tabulátoru.