J'ai une suite de tests Selenium qui exécute de nombreux tests et à chaque nouveau test, une fenêtre de navigateur s'ouvre au-dessus de toutes les autres fenêtres que j'ai ouvertes. C'est très gênant lorsque l'on travaille dans un environnement local. Existe-t-il un moyen d'indiquer à Selenium ou au système d'exploitation (Mac) d'ouvrir les fenêtres en arrière-plan ?
Réponses
Trop de publicités?Si vous utilisez le pilote web Selenium avec Python, vous pouvez utiliser PyVirtualDisplay, un wrapper Python pour Xvfb et Xephyr.
PyVirtualDisplay a besoin de Xvfb comme dépendance. Sur Ubuntu installez d'abord Xvfb :
sudo apt-get install xvfb
Ensuite, installez PyVirtualDisplay à partir de PyPI :
pip install pyvirtualdisplay
Exemple de Selenium script en Python en mode headless avec PyVirtualDisplay :
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
# Now Firefox will run in a virtual display.
# You will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()
display.stop()
EDIT
La réponse initiale a été publiée en 2014 et nous sommes maintenant à l'aube de 2018. Comme tout le reste, les navigateurs ont également progressé. Chrome a maintenant une version complètement headless qui élimine le besoin d'utiliser des bibliothèques tierces pour cacher la fenêtre de l'interface utilisateur. L'exemple de code est le suivant :
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
CHROME_PATH = '/usr/bin/google-chrome'
CHROMEDRIVER_PATH = '/usr/bin/chromedriver'
WINDOW_SIZE = "1920,1080"
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
chrome_options.binary_location = CHROME_PATH
driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,
chrome_options=chrome_options
)
driver.get("https://www.google.com")
driver.get_screenshot_as_file("capture.png")
driver.close()
Il existe quelques moyens, mais il ne s'agit pas d'un simple "définir une valeur de configuration". À moins d'investir dans un navigateur sans tête, ce qui ne convient pas à tout le monde, c'est un peu du bidouillage :
Comment masquer la fenêtre de Firefox (Selenium WebDriver) ?
et
Est-il possible de masquer le navigateur dans Selenium RC ?
Vous pouvez "soi-disant" passer des paramètres dans Chrome, en particulier : --no-startup-window
Notez que pour certains navigateurs, en particulier Internet Explorer, il est préférable de ne pas exécuter les tests en mode focus.
Vous pouvez aussi faire un peu de bricolage avec AutoIt pour cacher la fenêtre une fois qu'elle est ouverte.
Chrome 57 dispose d'une option permettant de passer le drapeau --headless, qui rend la fenêtre invisible.
Ce drapeau est différent de --no-startup-window car ce dernier ne lance pas de fenêtre. Il est utilisé pour héberger des applications d'arrière-plan comme cette page dit.
Code Java pour passer le drapeau à Selenium webdriver (ChromeDriver) :
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
Pour une exécution sans navigateur, vous pouvez l'exécuter dans sans tête mode.
Je vous montre un exemple en Python qui fonctionne pour moi en ce moment.
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless")
self.driver = webdriver.Chrome(executable_path='/Users/${userName}/Drivers/chromedriver', chrome_options=options)
Je vous ajoute également un peu plus d'informations à ce sujet sur le site officiel de Google. https://developers.google.com/web/updates/2017/04/headless-chrome
J'ai utilisé ce code pour Firefox sous Windows et j'ai obtenu la réponse (référence) ici ):
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
Options = Options()
Options.headless = True
Driver = webdriver.Firefox(options=Options, executable_path='geckodriver.exe')
Driver.get(...)
...
Mais je ne l'ai pas testé pour d'autres navigateurs.
- Réponses précédentes
- Plus de réponses