Czy można ukryć przeglądarkę w Selenium RC?

92

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?

Yatendra Goel
źródło
Może nie być akceptowalne, ale nie możesz po prostu przenieść przeglądarki poza ekran (używając zwykłej automatyzacji interfejsu systemu Windows?), Na przykład ustawić okno na (-10000, -10000)?
BrainSlugs83
2
Ponieważ to pytanie jest teraz stare, przekierujemy Cię do właściwej, aktualnej odpowiedzi na dole tej strony .
Stéphane Bruckert

Odpowiedzi:

87

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.

Dave Hunt
źródło
Oto instrukcje dotyczące tworzenia pliku nietoperza w celu zainstalowania usługi: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard
58

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
Corey Goldberg
źródło
Jeśli kod działa w wirtualnej przeglądarce, czy mogę nadal normalnie korzystać z komputera, gdy działa skrypt interakcji przeglądarki?
Mugen
Zasoby są zajęte, twoja maszyna będzie wolniejsza!
Tim Long
22

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.

Stéphane Bruckert
źródło
5
Warto wspomnieć, że aby to zadziałało, musisz podać ścieżkę do pliku PhantomJs.exe. przykładdriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG
1
Tak, ale tylko w systemie Windows.
Stéphane Bruckert
1
nie musisz określać lokalizacji pliku binarnego, o ile można go znaleźć w zmiennej środowiskowej $ PATH twojego środowiska.
Corey Goldberg
13

+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.

Santi
źródło
12

W systemie Linux możesz uruchomić przeglądarkę testową na wirtualnym wyświetlaczu. Będziesz potrzebował xvfbpakietu 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.

pixelistik
źródło
Ten skrypt ma problem z cytowaniem. Jeśli powiem ./ephemeral-x.sh foo '*', zobaczysz „Running: foo”, a po nim zawartość mojego katalogu.
Nick Retallack
4

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.

Igor Brejc
źródło
3

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

Paul Whelan
źródło
Jest to często najłatwiejszy sposób, aby upewnić się, że xvfb działa i jest używane przez Selenium / WebDriver.
Samuli Pahaoja,
1

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

Marlies
źródło
0

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.

djangofan
źródło
0

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.

chetstone
źródło
0
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.

Nestor Urquiza
źródło
0

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ść.

LiamººT
źródło