Selenium WebDriver dodawanie pluginów na przykładzie AdBlocka

Selenium WebDriver dodawanie pluginów na przykładzie AdBlocka

Czy mieliście kiedyś wyzywanie sprawdzenia jak wasza strona, zachowuje się z np. AdBlockiem? Dziś chce wam pokazać, że dodanie tej wtyczki jest bardzo proste i praktycznie od zaraz możecie uruchomić z nią wasze testy.

Zaczynamy!

Czego potrzebujemy?

  • Visual Studio 2017
  • Chrome
  • Zainstalowany AdBlock w Chrome

Zaczynamy od znalezienia na naszym dysku AdBlocka. Powinien być on w takiej ścieżce:

C:\\Users\\<NameOfUser>\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions\\<StringOfExtensions>\\<version>

  • <NameOfUser> – Nazwa waszego użytkownika
  • <StringOfExtensions> – ID interesującego nas pluginu
  • <version> – wersja interesującego nas pluginu

Pamiętajcie, że wersja pluginu, jeżeli macie ustawione  aktualizowanie  może się zmieniać i trzeba pamiętać o tym przy projektowaniu testów.

Jak poznać nazwę interesującego nas pluginu do w Chrome?

Jeżeli mamy zainstalowany dany dodatek jest to prosta sprawa.

Wpisujemy w pasek adresu  – chrome://extensions/

Zaznaczamy  checkbox „Developer mode”

 DeveloperMode dla pluginów Chrome

DeveloperMode dla pluginów Chrome

Dzięki temu zacznie być widoczne ID danego dodatku. Dla AdBlocka jest to:

DeveloperMode dla pluginów Chrome

ID (string) pluginu

Przechodzimy do Visual Studio

Stworzyłem projekt typu Class Library.

Dodawanie interesującego nas pluginu na przykładzie AdBlocka

Dodawanie interesującego nas pluginu na przykładzie AdBlocka

Zaczynamy od utworzenia obiektu typu ChromeOptions. Jest to klasa, która pozwala dodawać nam ustawienia, które chcemy dla uruchamianego przez nas ChromeDrivera.

Metoda AddArguments pozwala dodać  listę argumentów, które będą wczytywane wraz z załadowaniem Chrome.exe.  Używamy flagi load-extensions, która pozwala nam załadować plugin, który nas interesuje i nasza przeglądarka zostanie uruchomiona wraz z nim.

Po stworzeniu obiektu klasy ChromeOptions() przekazujemy go do naszego obiektu ChromeDrivera().

Następnie przechodzimy do zarejestrowania naszego obiektu w prostym kontenerze DI dla SpecFlow, nie jest to niezbędne, ale wiem, że często poszukujecie bardziej realnych przykładów na Context Injection w SpecFlow więc ten przykład również może pomóc wam zrozumieć idee.

Dodałem również klasę SeleniumHelper, która zawiera przydatną metodę CloseSecondTabFromPlugin(). AdBlock po dodaniu prezentuje swoją stroną na, które możemy dokonać dotacji dla nich. Potrzebujemy zamknać tą stronę.

W linijce [18] korzystamy z klasy WaitHelper, która ma zaimplementowane dynamiczne czekanie na zadany element dlatego, że korzysta z klasy WebDriverWait.

W tym przypadku czekamy maksymalnie 15 sekund (lub mniej, jeżeli jest element możliwy do znalezienia w krótszym czasie), na wczytanie się właściwości driver.WindowsHandles, która przechowuje informacje o oknach ChromeDriver’a.

Klasa WaitHelper z metodę Wait(), która zwraca obiekt typu WebDriverWait

 

ChromeDriver wraz z AdBlockiem

ChromeDriver wraz z AdBlockiem

Przykład również dostępny jest na moim GitHubie:

https://github.com/testingplusme/AddAdblockExampleToChromeDriver

Podsumowanie

Jak widzie w kilka minut jesteśmy w stanie uruchomić naszego ChromeDrivera z dodanym pluginem – takim jakim chcemy. Może być to dla was przydatne dla sprawdzenia, czy wszystkie elementy na stronie zachowują się prawidłowo również z dodanym AdBlockiem. Zdarza się, że AdBlock źle sklasyfikuje określony elementem. Innym scenariuszem jest sprawdzenie, jeżeli jesteście np. wydawcą treści czy skrypt, która macie do blokowania AdBlocka wyświetla się zawsze, wtedy kiedy powinien.