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.
jak odtwarzać pliki .bin na komputerze
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
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
polecenie sort w systemie unix z przykładem
Wniosek:
Microsoft UIAutomation to świetna biblioteka dla tych, którzy chcą mieć testy automatyzacji interfejsu użytkownika na pulpicie systemu Windows z PowerShell.
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