Dzisiaj chciałbym przedstawić framework WatiN, który służy do automatyzacji testów. Symuluje on po prostu przeglądarkę internetową (dosłownie). Za pomocą niego, możemy otworzyć IE, wejść na daną stronę czy kliknąć w jakiś przycisk. Wszystkie operacje takie jak kliknięcie w link czy nawet maksymalizacja okna są możliwe dzięki WatiN.
Docelowo używa go się w połączeniu z nUnit albo SpecFlow. Zacznijmy jednak od zwyklej aplikacji konsolowej. Załóżmy, że chcemy wejść na Google.pl, wpisać tekst i kliknąć w przycisk Search.
Najpierw oczywiście instalujemy wymagany pakiet z NuGet:
Następnie implementujemy kod, który wykona następujące czynności:
1. Otworzy przeglądarkę IE.
2. Przejdzie do www.google.pl
3. Naciśnie przycisk “Szukaj”, aby wyświetlić wyniki.
Kod jest następujący:
using (var browser = new IE("http://www.google.com")) { browser.TextField(Find.ByName("q")).TypeText("Hello World!"); browser.Button(Find.ByName("btnG")).Click(); }
Jeśli wywołuje on poniższy wyjątek, wtedy trzeba ustawić “Embed Interop Types” we właściwościach na false.
Additional information: Could not load file or assembly 'Interop.SHDocVw, Version=1.1.0.0, Culture=neutral, PublicKeyToken=db7cfd3acb5ad44e' or one of its dependencies. The system cannot find the file specified.
Wciąż jednak kod nie będzie działać i zostanie wyrzucony kolejny wyjątek:
An unhandled exception of type 'System.Threading.ThreadStateException' occurred in WatiN.Core.dll Additional information: The CurrentThread needs to have it's ApartmentState set to ApartmentState.STA to be able to automate Internet Explorer.
Z tego względu dodajemy wspomniany atrybut (więcej informacji tutaj) i uruchamiamy program:
[STAThread] private static void Main(string[] args) { using (var browser = new IE("http://www.google.com")) { browser.TextField(Find.ByName("q")).TypeText("Hello World!"); browser.Button(Find.ByName("gbqfsa")).Click(); } }
Na ekranie pojawi się przeglądarka i automatycznie zostanie wpisany tekst:
Prawdziwa jednak siła WatiN jest gdy korzystamy z niego w połączeniu z nUnit. Framework dostarcza naprawdę wiele metod umożliwiających walidacje i ekstrakcje danych ze stron HTML. Bardzo łatwo możemy sprawdzić czy dany tekst występuje i co jest dokładnie wyświetlane na ekranie. O tym jednak w kolejnej części…
Jak to się ma do selenium ? (jakieś porównanie może w kolejnych postach?)