Testowanie aplikacji webowych różnymi przeglądarkami za pomocą Selenium

Odpalamy testy Selenium aplikacji webowych w Firefoksie, Chrome, Chromium, czy pod Androidem.

Selenium służy do testowania aplikacji webowych. Bez problemu odpalimy webdriver Firefoksa. A co jeśli chcemy testować inną przeglądarką? Dla przykładu chcemy by Selenium odwiedziło podany adres URL i zrobił zrzut ekranu. W tym artykule pokażę jak skonfigurować różne webdrivery dla Selenium pod Pythonem na Linuksie.

Nasz startowy kod dla Firefoksa wygląda następująco:
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('http://www.google.com')
browser.save_screenshot('screen.png')
browser.quit()

Po zainstalowaniu poprzez pip selenium nie powinniśmy potrzebować nic więcej (poza obecnością Firefoksa w systemie).

Android

W przypadku Androida potrzebować będziemy SDK. Do testów można użyć emulatora lub urządzenie z Androidem na pokładzie. Zaczynamy od pobrania android-server-*.apk i zainstalowaniu go na urządzeniu. Dla emulatora posłużymy się adb z SDK, a dla urządzeń - wrzuć APK na komórkę i zainstaluj (można też użyć adb po podłączeniu urządzenia do komputera).

adb znajdziemy w katalogu platform-tools. Na początek musimy sprawdzić dostępne systemy/urządzenia:

./adb devices
Wylistuje to urządzenia, emulatory (działające) wraz z ich numerami seryjnymi. Numer będzie potrzebny do instalacji aplikacji:
./adb -s NUMER -e install -r android-server-*.apk
Następnie odpalamy zainstalowaną aplikację ("Selenium") i prawie gotowe. Trzeba ustawić przekierowanie portu z naszego komputera na emulator:
./adb -s NUMER forward tcp:8080 tcp:8080

W przypadku urządzenia podłączonego do komputera trzeba zrobić to samo. Druga opcja to podanie w Selenium adresu IP urządzenia (wewnętrznego adresu z tej samej sieci).

Zrzut ekranu z Androida wykonany przez Selenium
Żeby wykorzystać serwer na Androidzie musimy użyć zdalnego webdrivera - webdriver.Remote:
from selenium import webdriver

desired_capabilities = webdriver.DesiredCapabilities.ANDROID
desired_capabilities['deviceOrientation'] = 'landscape' #portrait

browser = webdriver.Remote("http://localhost:8080/wd/hub", desired_capabilities=desired_capabilities)
browser.get('http://www.google.com')
browser.save_screenshot('screen_android.png')
browser.quit()

Chromium i Chrome

Pod Linuksem powszechnie używane jest Chromium a nie Chrome. W przypadku Ubuntu i pochodnych mamy gotowy pakiet chromium-chromedriver. Po jego instalacji wystarczy podać ścieżkę do pliku chromedriver:
from selenium import webdriver

browser = webdriver.Chrome(executable_path='/usr/lib/chromium-browser/chromedriver')
browser.get('http://www.google.com/')
browser.save_screenshot('screen_chromium.png')
browser.quit()

Jeż mamy zainstalowane Chrome to możemy pobrać chromedriver, rozpakować i podać ścieżkę do tego pliku. Wtedy testować będziemy poprzez chrome a nie chromium.

Opera

Webdrivera Opery nie udało mi się odpalić na Xubuntu - server selenium się wysypywał. Przepis jest prosty. Pobieramy selenium-server-standalone-*.jar i w konsoli ustwiamy ścieżkę do tego pliku pod zmienną SELENIUM_SERVER_JAR:

export SELENIUM_SERVER_JAR=.../selenium-server-standalone-2.35.0.jar
Możliwe że będziemy potrzebować też PhantomJS (w przypadku Ubuntu i pochodnych jest w repozytorium). Kod Selenium wygląda następująco:
from selenium import webdriver

browser = webdriver.Opera()
browser.get('http://www.google.com')
browser.save_screenshot('screen_opera.png')
browser.quit()

Webdriver ten powinien także obsługiwać mobilną Operę. U mnie po instalacji PhantoJS próbuje się uruchomić, ale w pewnym momencie rzuca wyjątkami i koniec zabawy.

iOS - iPad, iPod, iPhone

Niestety nawet z urządzeniem webdriver dla iOS działa tylko pod iOS. Nie da się tego (nie znalazłem) w żaden sposób uruchomić pod innym systemem operacyjnym. Dla chętnych opis webdriver ios.

Jeżeli nie chcemy bawić się z OSX, XCODE i kontem developerskim dla iOSa to można skorzystać z (płatnych) usług testowania poprzez Selenium - takich jak saucelabs.com, czy testingbot.com.

blog comments powered by Disqus

Kategorie

Strony