powershell uiautomation tutorial
Samouczek PowerShell UIAutomation: Automatyzacja interfejsu użytkownika aplikacji komputerowych
UIAutomation to rozszerzenie programu PowerShell o otwartym kodzie źródłowym do testów automatyzacji interfejsu GUI. Obsługuje Win32, Windows Form, WPF i tak dalej.
W tym samouczku skupimy się na tym, jak PowerShell używa modułu do implementacji automatyzacji interfejsu użytkownika. Aby to wyjaśnić, użyjemy aplikacji Windows Form jako przykładu.
Czego się nauczysz:
- Pierwsze kroki z Microsoft UIAutomation
- Import UIAutomation
- UI Automation z przykładami
- Znajdź relację nadrzędny-podrzędny i właściwości kontrolki
- Zaawansowana implementacja: uprość podejście do pisania skryptu
- Wniosek:
- rekomendowane lektury
Pierwsze kroki z Microsoft UIAutomation
Ponieważ projekt udostępnia jedyną bibliotekę dla skryptów PowerShell, nie wymaga instalacji, możemy po prostu pobrać moduł i zaimportować go do skryptu.
Przeczytaj także => Ponad 35 najlepszych narzędzi do testowania GUI z pełnymi szczegółami
Aby dowiedzieć się więcej o PowerShell i zrozumieć, jak zacząć z nim korzystać, sprawdź:
- Rozszerzenia programu PowerShell automatyzacji interfejsu użytkownika
- Omówienie automatyzacji interfejsu użytkownika
- Windows PowerShell
- Fajne rzeczy o PowerShell 5.0 w Windows 10
Import UIAutomation
1) Pobierz i rozpakuj najnowszy pakiet z jego oficjalnej strony internetowej: Rozszerzenia programu PowerShell automatyzacji interfejsu użytkownika na ścieżkę la ocal,na przykład, C: UIAutomation
dwa) Zaimportuj moduł do skryptu programu PowerShell: ( Uwaga : Po uruchomieniu tego polecenia upewnij się, że nie używasz programu PowerShell jako administrator)
Import-Module C:UIAutomationUIAutomation.dll
Teraz możemy użyć poleceń zdefiniowanych w module, aby rozpocząć testowanie automatyzacji UI.
UI Automation z przykładami
Zacznijmy od prostego formularza Windows, który obejmuje niektóre typowe kontrolki, które możemy zobaczyć podczas testowania automatyzacji GUI.
W tym przykładzie mamy zautomatyzować kroki, aby przesłać formularz z podstawowymi danymi osobowymi:
Krok 1) Wpisz imię „Anna Smith”
Krok 2) Wybierz płeć „Kobieta”
Krok 3) Wybierz „Tak” jako odpowiedź, jeśli ukończyłeś szkołę.
Krok 4) Kliknij „Prześlij”
Skrypt, który to zrobi, wygląda następująco:
Start-Process 'Test Form' #Step1: input the name “Anna Smith” Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name'|Set-UIATextBoxText 'Anna Smith' #Step2: select the gender “Female” Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAComboBox -Name 'Gender' | Invoke-UIAListItemSelectItem -ItemName 'Female' #Step3: choose “Yes” as the answer of if graduated. Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIARadioButton -AutomationId 'Graduated' -Name 'Yes'|Invoke-UIAControlClick #Step4: click “Submit” Get-UIAWindow -Name 'Test Form' | Get-UIAButton -Name 'Submit'|
Z powyższego skryptu prawdopodobnie można wywnioskować, jak manipuluje on elementami sterującymi w aplikacji. Zrozummy dalej.
Zrób pierwszy krok jako przykład:
Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name'|Set-UIATextBoxText 'Anna Smith'
Oto zestawienie tego, co dzieje się w tej linii:
1) Skrypt najpierw znajduje górne okno, a następnie za pomocą potoku znajduje jego kontrolę podrzędną. Robi to, dopóki nie znajdzie kontrolki docelowej - pola edycji (lub pola tekstowego) o nazwie „Nazwa”.
dwa) Po znalezieniu kontrolki podaje jej typ, abyś wiedział, jakiego polecenia użyć, np. Get-UIAWindow - to okno, a Get-UIAEdit - to pole edycyjne / tekstowe.
3) Wymaga również co najmniej jednej właściwości kontrolki. W tym przykładzie używamy tylko Name jako właściwości do identyfikacji kontrolki. Uwaga : AutomationId i Class to także właściwości, które są często używane podczas znajdowania kontrolki.
4) Po znalezieniu kontrolki docelowej używamy innego polecenia, aby wywołać akcję na kontrolce. W tym przykładzie jest Set-UIATextBoxText, aby ustawić tekst dla pola tekstowego.
Jest to główny sposób automatyzacji interfejsu użytkownika do realizacji automatyzacji interfejsu użytkownika.
Polecenia dla różnych typów formantów oraz polecenie wywoływania akcji można znaleźć w dokumentach pomocy na jego oficjalnej stronie: Rozszerzenia programu PowerShell automatyzacji interfejsu użytkownika
jak odtwarzać pliki .bin na komputerze
Pozostałe kroki są podobne pod względem żył. Przejdźmy więc teraz do innych ważnych tematów.
Znajdź relację nadrzędny-podrzędny i właściwości kontrolki
Pisanie takich potoków jest proste, ale istotną częścią jest znalezienie właściwości i kontrolek podrzędnych zawierających kontrolkę docelową. Z mojego doświadczenia wynika, że są to dwa, których próbowałem:
# 1) Użyj UIAutomationSpy w pakiecie:
W pobranym pakiecie znajduje się narzędzie, które może przechwytywać elementy sterujące na pulpicie. Gdy interfejs użytkownika będzie gotowy na pulpicie, otwórz UIAutomat ionSpy.exe :
- Kliknij „Start”, aby rozpocząć przechwytywanie.
- Przesuń kursor do kontrolki, co chcesz uchwycić.
- Gdy znajdziesz podświetloną kontrolkę i skrypt wyświetlony w jej interfejsie okna, oznacza to, że przechwytywanie powiodło się.
- Kliknij „Stop”, aby zatrzymać przechwytywanie.
- Kliknij kartę „Hierarchia” po lewej stronie, a zobaczysz relację nadrzędny-podrzędny kontrolerów od góry do celu
- Kliknij kartę „Skrypt” po prawej stronie, aby wyświetlić pełną ścieżkę kontroli:
Należy pamiętać, że nie musimy uwzględniać każdej kontrolki i każdej właściwości z potoku, aby wyszukać kontrolkę docelową. Właściwie to, czego używamy, jest dość proste (patrz przykład powyżej):
Get-UIAWindow -Name 'Test Form' | Get-UIATabItem -Name 'BasicInfo'| Get-UIAEdit -AutomationId 'textBox1' -Name 'Name'
Niestety, nie istnieje żadna oficjalna srebrna zasada dotycząca liczby kontroli, które należy uwzględnić. Wymaga wysiłku i doświadczenia.
Co nie jest takie wspaniałe w UIAutomationSpy:
- Nie ma przyjaznego interfejsu
- Będziesz musiał przechwytywać jedną kontrolę po drugiej i uzyskać żądane szczegóły.
# 2) Użyj narzędzi zewnętrznych, aby sprawdzić elementy sterujące pulpitu systemu Windows
Sugerowanym narzędziem jest inspect.exe dostarczony przez firmę Microsoft. Po otwarciu narzędzia zobaczysz wszystkie szczegóły elementów sterujących w oknie:
Co nie jest takiego wspaniałego w inspect.exe
- Nie ma możliwości wyeksportowania szczegółów.
- Moduł automatyzacji interfejsu użytkownika udostępnia niektóre polecenia, takie jak Get-UIAControlChildren, aby uzyskać wszystkie kontrolki podrzędne. inspect.exe może przekroczyć wszystkie elementy sterujące pod oknem, ale wydajność nie jest oceniana w przypadku złożonych okien.
Zaawansowana implementacja: uprość podejście do pisania skryptu
Z powyższego wprowadzenia można zauważyć, że potoki są głównym sposobem pisania skryptu za pomocą modułu, chociaż czasami potoki nie są tak długie. Istnieje podejście, które ma na celu uproszczenie i ułatwienie, a głównym pomysłem jest wyodrębnienie danych kontrolek do pliku XML i połączenie potoków w razie potrzeby z pliku XML.
Kontynuujmy powyższy przykład:
Najpierw wygeneruj plik XML zawierający właściwości i relację nadrzędny-podrzędny formantów. Dodajemy węzły dla każdego wymaganego elementu sterującego: nazwa węzła jest unikalna, dzięki czemu możemy od razu znaleźć element sterujący według nazwy, a polecenie i jego właściwości są ustawione jako właściwości węzłów.
Oto plik XML testowego formularza testowego:
Należy zdefiniować niektóre funkcje, aby dołączyć do potoków, przeszukując plik xml i wykonując je:
function getPipeline($nodeName) { $object_xml = (Invoke-WebRequest(controls.xml')) $control = $object_xml.SelectSingleNode('//$nodeName ') $pipeline = '' do { $string = '' $string = $control.method foreach($a in $control.Attributes) { if(!$a.Name.ToLower().Equals('method')) { $string = $string + ' -' + $a.Name + ' '' +$a.Value +''' } } $ pipeline = $string + ' |' +$ pipeline $control= $control.ParentNode } while (!$control.Name.Equals('#')) return $pipeline.Remove($pipeline.length-1,1) } function setText($textbox,$value) Set-UiaEditText -text $value' Invoke-Expression $iex function selectItem($combobox,$item) { #get the pipeline and invoke the expression } function toggleRadioButton($radioButton) { #get the pipeline and invoke the expression } function click($control) { #get the pipeline and invoke the expression }
Jak dotąd są to zadania prawie jednorazowe, chyba że same elementy sterujące się zmienią.
Teraz możemy zautomatyzować kroki w następujących skryptach:
#import the functions defined previously . MyLibrary.ps1 setText 'Name' 'Anna Smith' selectItem 'Gender' 'Female' toggleRadioButton 'Graduated' click 'Submit'
W ten sposób możemy pozbyć się wiązek rurociągów w skryptach, a biegłość znacznie się poprawi.
Zalecana lektura => Wprowadzenie do narzędzia automatyzacji GUI Sikuli
Wniosek:
Microsoft UIAutomation to świetna biblioteka dla tych, którzy chcą mieć testy automatyzacji interfejsu użytkownika na pulpicie systemu Windows z PowerShell.
polecenie sort w systemie unix z przykładem
Powyższe wprowadzenie to tylko wycinek narzędzia. Jego uproszczone podejście jest inspirowane ideą wyodrębniania danych ze skryptów testujących, co jest dobrym sposobem na poprawę naszej biegłości w pisaniu testów automatyzacyjnych. Dowiedz się więcej na ten temat tutaj .
Podziel się swoimi komentarzami poniżej, a chcielibyśmy poznać doświadczenia użytkowników UIAutomation.
rekomendowane lektury
- Dogłębne samouczki dotyczące Eclipse dla początkujących
- Zobacz samouczek automatyzacji testów: przewodnik po narzędziu do automatyzacji testów mobilnych
- DevOps Automation: Jak automatyzacja jest stosowana w praktyce DevOps
- Geb Tutorial - Testowanie automatyzacji przeglądarki za pomocą narzędzia Geb
- Co to jest automatyzacja testów (kompletny przewodnik po rozpoczęciu automatyzacji testów)
- Samouczek Selendroid: Android Mobile Test Automation Framework (część 1)
- Samouczek Katalon Studio: Darmowe narzędzie do automatyzacji testów, na które czekałeś
- Appium Studio for Eclipse: End-to-end Appium / Selenium Automation From Eclipse