J'essaie de faire tourner chrome sans tête avec mes suites de tests de framework de robots . J'ai réussi à le faire indépendamment avec python en utilisant Selenium comme suit:
options = webdriver.ChromeOptions()
options.add_argument('--headless')
my_driver = webdriver.Remote(command_executer=my_remote_address, desired_capabilities=options.to_capabilities)
Le code suivant est ce que je faisais dans le robot mais ne fonctionnais pas:
${options}= Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
${options.add_argument}= Set Variable add_argument=--headless
Create WebDriver Chrome chrome_options=${options}
Open Browser http://www.google.com chrome
Pour exécuter sans tête, vous devez définir les arguments et les convertir en fonctionnalités afin de pouvoir les utiliser avec l'option Remote Driver
. Cela fonctionne à la fois pour le Open Browser
et le Create Webdriver
pour naviguer vers une URL.
*** Settings ***
Library Selenium2Library
Suite Teardown Close All Browsers
*** Test Cases ***
Headless Chrome - Create Webdriver
${chrome options} = Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${chrome options} add_argument headless
Call Method ${chrome options} add_argument disable-gpu
${options}= Call Method ${chrome_options} to_capabilities
Create Webdriver Remote command_executor=http://localhost:4444/wd/hub desired_capabilities=${options}
Go to http://cnn.com
Maximize Browser Window
Capture Page Screenshot
Headless Chrome - Open Browser
${chrome_options} = Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${chrome_options} add_argument headless
Call Method ${chrome_options} add_argument disable-gpu
${options}= Call Method ${chrome_options} to_capabilities
Open Browser http://cnn.com browser=chrome remote_url=http://localhost:4444/wd/hub desired_capabilities=${options}
Maximize Browser Window
Capture Page Screenshot
Dans les versions plus récentes de SeleniumLibrary (3.1.0) et de Selenium (3.8.0), vous pouvez simplement définir le navigateur sur headlesschrome
au lieu de chrome
.
Il y a aussi headlessfirefox
disponible.
Ex.
Open Browser http://www.yoursite.com headlesschrome
http://robotframework.org/SeleniumLibrary/SeleniumLibrary.html#Open%20Browser
S'il vous plaît essayer le ci-dessous. Exécuter le mot clé dans la configuration du test
Running the tests in chrome headless
${chrome options} = Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${chrome options} add_argument headless
Call Method ${chrome options} add_argument disable-gpu
Create Webdriver Chrome chrome_options=${chrome options}
J'ai créé un exemple de référentiel et des instructions sur l'exécution de Chrome et Firefox natif, sans tête ou avec menu fixe, ainsi qu'un tableau comparatif des durées d'exécution. Vous pouvez trouver des exemples sur ma page github https://github.com/shnigi/Docker-Headless-Testing-Demo
L'idée principale est toutefois que, dans les deux tests, l'utilisation de l'API webdriver du Selenium indique à chromedriver et à geckodriver de lancer le navigateur avec certains arguments. Le mot clé Open Browser de SeleniumLibrary n’a pas cette fonctionnalité, mais Create Webdriver fait l’affaire.
Open Headless Chrome Browser to Page
${chrome_options}= Evaluate
sys.modules['Selenium.webdriver'].ChromeOptions() sys
Call Method ${chrome_options} add_argument test-type
Call Method ${chrome_options} add_argument --disable-extensions
Call Method ${chrome_options} add_argument --headless
Call Method ${chrome_options} add_argument --disable-gpu
Call Method ${chrome_options} add_argument --no-sandbox
Create Webdriver Chrome chrome_options=${chrome_options}
Set Window Size 1920 1080
Go To ${PAGE URL}
Firefox true headless
${firefox options}= Evaluate sys.modules['Selenium.webdriver'].firefox.webdriver.Options() sys, Selenium.webdriver
Call Method ${firefox options} add_argument -headless
Create Webdriver Firefox firefox_options=${firefox options}
Set Window Size 1920 1080
Go To ${PAGE URL}
Page Should Be Open
Vous aurez besoin des derniers navigateurs et pilotes installés.
Essayez ces deux mots-clés:
Open Chrome
[Arguments] ${url} ${lang}
${chrome_options}= Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${chrome_options} add_argument headless
Call Method ${chrome_options} add_argument disable-gpu
Create Webdriver Chrome chrome_options=${chrome_options}
Go To ${url}
Open Remote Chrome
[Arguments] ${url} ${remote_url} ${lang}
${chrome_options}= Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${chrome_options} add_argument headless
Call Method ${chrome_options} add_argument disable-gpu
Open Browser ${url} Chrome remote_url=${remote_url} desired_capabilities=${chrome_options.to_capabilities()}
Le premier lancera un chrome local, tandis que le second lancera un chrome à distance. Si vous devez être capable de gérer le distant par rapport au local en un mot-clé unique, vous pouvez créer un wrapper autour de ces deux mots avec un argument booléen qui déterminera le mot-clé à appeler.
${options}= Evaluate sys.modules['Selenium.webdriver'].ChromeOptions() sys, Selenium.webdriver
Call Method ${options} add_argument headless
Call Method ${options} add_argument disable-gpu
Create WebDriver Chrome chrome_options=${options}
Goto https://www.cnn.com/
Wait Until Page Contains Politics today
Close Browser