WatiN (Web Application Testing in .Net) – framework dla środowiska .Net umożliwiający automatyzację działań użytkownika w przeglądarkach internetowych Internet Explorer oraz Mozilla Firefox. Powstał w oparciu o framework WatiR (Web Application Testing in Ruby). WatiN to narzędzie open source, bardzo przydatne w automatyzacji testów aplikacji webowych. Pozwala otworzyć instancję przeglądarki internetowej z testowaną aplikacją oraz wykonać na niej akcje użytkownika.

Historia edytuj

Inicjatorem i głównym programistą biblioteki WatiN był Jeroen van Menen. Prace programistyczne nad projektem rozpoczął w grudniu 2005 roku, chcąc zastąpić komercyjne testy aplikacji wykorzystywane w jego firmie. W 2007 roku do projektu przyłączył się Edward Wilde, który opracował wsparcie dla przeglądarki Mozilla Firefox oraz eksperymentalne wsparcie dla przeglądarki Chrome. Edward Wilde opracował także framework Wax, pozwalający na tworzenie automatycznych testów WatiN z wykorzystaniem Microsoft Excel.

Licencja edytuj

WatiN jest udostępniony na licencji Apache License 2.0.

Główne funkcjonalności edytuj

  • obsługuje przeglądarki w wersjach: Internet Explorer 6, 7, 8, 9 oraz Mozilla Firefox 2, 3
  • może być używany w dowolnym języku programowania .Net
  • pozwala w prosty sposób zlokalizować elementy na stronie (po wielu atrybutach elementu) oraz wykonać na nich akcje użytkownika (np. kliknięcie przycisku, wprowadzenie wartości do pola tekstowego, wybranie wartości z listy rozwijanej), przykłady (w języku C#):
browser.TextField(Find.By("friendlyname", "UserName")).Value = username;
browser.Button(Find.ByValue("Sign-In")).ClickNoWait();
browser.Link(Find.ByText("Logout")).Click();
browser.Link(Find.ByTitle("Quick Search")).Click();
browser.Element(Find.ByClass(new Regex(".* ui-state-active"))).Text.Contains("Tests"));
browser.CheckBox(Find.ById("test")).Checked = true;
browser.SelectList("test2").Select(service.test3);
  • pozwala obsłużyć okna dialogowe, przykłady (w języku C#):
PrintDialogHandler printDialogHandler = new PrintDialogHandler(PrintDialogHandler.ButtonsEnum.Print);
FileDownloadHandler confirmDialogHandler = new FileDownloadHandler(FileDownloadOptionEnum.Open);
using (new UseDialogOnce(Window.DialogWatcher, confirmDialogHandler))
{
  …
}
  • łatwa integracja z narzędziem do obsługi testów jednostkowych (np. NUnit)

Narzędzia ułatwiające pracę z WatiN edytuj

  • WebDeveloperToolbar – plugin do przeglądarki Mozilla Firefox umożliwiający m.in. szybki podgląd atrybutów elementów HTML
  • IEDeveloperToolbar – plugin do przeglądarki Internet Explorer umożliwiający m.in. szybki podgląd atrybutów elementów HTML
  • WatiNTestRecorder – narzędzie do nagrywania testów w przeglądarce, które następnie można przekonwertować na kod WatiN

Zastosowanie edytuj

Przykład z wykorzystaniem Microsoft Visual C# 2010 Express oraz NUnit:

  • W projekcie należy dodać referencje do:
WatiN.Core.dll
Nunit.framework.dll (do pobrania ze strony Nunit.org)
  • W kodzie należy dodać odwołanie do namespace:
using WatiN.Core;
using Nunit.Framework;
WatiN.Core pozwala na interakcje z instancją okna przeglądarki, a Nunit.Framework służy do uruchamiania testów. Do obsługi dialogów należy także dodać odwołanie do WatiN.Core.DialogHandlers.

Konstrukcja metody testowej edytuj

[Test]
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("https://www.google.com/"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();
    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

Opis elementów testu edytuj

using (var browser = new IE("https://www.google.com/"))
Test uruchamia stronę www.google.com w przeglądarce IE.
browser.TextField(Find.ByName("q")).TypeText("WatiN");
W wyszukiwarkę wpisano wartość 'WatiN' : pole tekstowe zostało znalezione za pomocą funkcji Find.ByName, a następnie symulując ręczne wpisywanie została wprowadzona wartość 'WatiN'.
Jeśli nie zależy nam na powolnym wpisywaniu tekstu w pole, można w zastępstwie użyć funkcji: browser.TextField(Find.ByName("q")).Value = "WatiN";
browser.Button(Find.ByName("btnG")).Click();
Uruchomiono wyszukiwanie: przycisk o nazwie 'btnG' został znaleziony, wykonano na nim akcję Click().
Assert.IsTrue(browser.ContainsText("WatiN"));
Sprawdzenie, czy w przeglądarce zawarty jest tekst 'WatiN'. Zwrócona wartość True powoduje pomyślne zakończenie testu (Nunit daje możliwość używania różnych asercji).

Bibliografia edytuj