Używam Selenium RC do automatyzacji niektórych operacji przeglądarki, ale chcę, aby przeglądarka była niewidoczna. czy to możliwe? W jaki sposób? A co z siatką selenową? Czy mogę również ukryć okno Selenium RC?
Używam Selenium RC do automatyzacji niektórych operacji przeglądarki, ale chcę, aby przeglądarka była niewidoczna. czy to możliwe? W jaki sposób? A co z siatką selenową? Czy mogę również ukryć okno Selenium RC?
Odpowiedzi:
Jest kilka opcji:
Możesz użyć Selenium Grid, aby przeglądarka była otwierana na zupełnie innej maszynie (lub maszynie wirtualnej), z którą możesz się połączyć za pomocą VNC lub Remote Desktop Connection, jeśli chcesz zobaczyć przeglądarkę. Inna opcja: jeśli uruchomisz proces Jenkins na pierwszym planie na tym zdalnym serwerze, może on wykonać projekt testowy na pulpicie.
Możesz uruchomić Selenium „headless” na Linuksie w XVFB. Nigdy nie próbowałem tego robić i wątpię, czy naprawdę warto to zrobić. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Możesz opakować Selenium RC w usługę Windows. http://support.microsoft.com/kb/137890 . Tyle tylko, że ograniczenia uprawnień w późniejszych wersjach systemu Windows prawdopodobnie uniemożliwią Selenium dostęp do pulpitu, tak jak system Windows 2000, który nam na to pozwalał.
Inną opcją byłoby użycie czegoś takiego jak WebDriver HTMLUnitDriver, który nie uruchamia „prawdziwej” przeglądarki. http://code.google.com/p/webdriver/ . Istnieje również opcja PhantomJS, a także `` bezgłowy Chrome '', którego możesz użyć.
Oczywiście istnieje również opcja skorzystania z usługi takiej jak SauceLabs, w której możesz uruchomić testy w chmurze. Po zakończeniu testów możesz obejrzeć film z ich uruchomieniem.
W systemie Linux można uruchomić WebDriver na bezgłowym (wirtualnym) wyświetlaczu, aby ukryć przeglądarkę. Można to zrobić za pomocą Xvfb (wirtualnego bufora ramki X).
Możesz kontrolować Xvfb bezpośrednio z kodu Pythona za pomocą xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Kod Pythona do uruchamiania bezgłowego wyglądałby tak:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Zainstaluj zależności w systemie Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Bez problemu udało mi się ukryć okno przeglądarki.
Wystarczy zainstalować PhantomJS . Następnie zmień tę linię:
driver = webdriver.Firefox()
do:
driver = webdriver.PhantomJS()
Reszta kodu nie będzie musiała zostać zmieniona i żadna przeglądarka się nie otworzy. Do celów debugowania używaj driver.save_screenshot('screen.png')
na różnych etapach kodu.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
+1 dla Selenium RC jako usługi systemu Windows.
Ponieważ testy są całkowicie ukryte, myślę, że nie masz zbyt wielu rozwiązań, jeśli korzystasz z systemu Windows.
Co ja bym zrobił, aby zadedykować komputer w twojej sieci LAN, aby był cały czas online i miał działający serwer RC z selenem. Więc używasz adresu IP tego komputera zamiast lokalnego hosta do przeprowadzania testów. Na przykład:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(biorąc pod uwagę, że jest to adres IP komputera, na którym działa serwer).
Mając taką konfigurację, uruchamiasz testy na swoim komputerze, przeglądarki i okno serwera RC są na innym komputerze i po zakończeniu wróć do swojego.
W systemie Linux możesz uruchomić przeglądarkę testową na wirtualnym wyświetlaczu. Będziesz potrzebował xvfb
pakietu do stworzenia wirtualnego serwera X. W dystrybucjach opartych na Debianie po prostu uruchom
sudo apt-get install xvfb
Jest fajne narzędzie ephemeral-x.sh
, które wygodnie ustawi dowolne polecenie do uruchomienia na wirtualnym wyświetlaczu. Pobierz go i nadaj mu wykonywalny:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Następnie możesz po prostu użyć go do uruchomienia serwera Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Wszystkie okna przeglądarki utworzone przez Selenium będą teraz używać wirtualnego wyświetlacza i będą dla Ciebie niewidoczne.
Jeśli korzystasz z systemu Windows, jedną z opcji jest uruchomienie testów na innym koncie użytkownika . Oznacza to, że przeglądarka i serwer java nie będą widoczne na Twoim koncie.
W ten sposób przeprowadzam testy z maven na pulpicie Linux (Ubuntu). Miałem dość, że nie mogłem pracować z webdriverem Firefox, który zawsze był skupiony.
Zainstalowałem xvfb
xvfb-run -a mvn clean install
Otóż to
W wielu przypadkach PhantomJS nie będzie w pełni odpowiadał Twoim potrzebom, chciałbym omówić opcję bezgłowego chromu, o której wspomniał Dave Hunt.
chrome 57 właśnie uruchomił tę funkcję. Możesz go użyć, przekazując flagę --headless przez ChromeDriver, aby uzyskać więcej informacji, zobacz dyskusję na to pytanie
Istnieje projekt związany z PhantomJS o nazwie GhostDriver , który ma uruchamiać instancje PhantomJS w sieci Selenium za pomocą protokołu JSON webdriver wire. Prawdopodobnie właśnie tego szukasz, chociaż to pytanie ma teraz 4 lata.
W systemie MacOSX nie byłem w stanie ukryć okna przeglądarki, ale przynajmniej wymyśliłem, jak przenieść je na inny ekran, aby nie zakłócało to tak bardzo mojej pracy. Gdy Firefox przeprowadza testy, po prostu kliknij z klawiszem Control w jego ikonę w doku, wybierz Opcje i Przypisz do wyświetlacza 2.
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
Nawiasem mówiąc, jest to funkcja potrzebna każdemu deweloperowi obsługującemu e2e, która logicznie uruchomi przeglądarki. W środowisku programistycznym irytujące jest zajmowanie się wyskakującym oknem, z którym można przypadkowo wejść w interakcję, powodując niepowodzenie testu.
Najlepszym rozwiązaniem byłoby użycie bezgłowej przeglądarki Chrome lub możesz publikować bezpośrednio w witrynie, aby wchodzić z nią w interakcję, co pozwoliłoby zaoszczędzić dużo mocy obliczeniowej na inne rzeczy / procesy. Używam tego podczas testowania botów automatyzacji sieci, które wyszukują buty w wielu witrynach przy użyciu ciężkich elementów procesora, im więcej oszczędzasz energii i im prostszy jest twój program, tym łatwiej jest uruchamiać wiele procesów naraz z dużą szybkością i niezawodność.