web-dev-qa-db-fra.com

ElementNotVisibleException lors de l'utilisation d'un navigateur Chrome sans interface graphique

Lorsque j'exécute un script de test dans le navigateur chrome en mode sans tête, le lien d'élément n'est pas visible, il ne peut pas exécuter linkElement.click(). en mode tête tout va bien. Toutes les autres informations sont dans stacktrace. Quelqu'un sait quoi faire, s'il vous plaît?

Trace de la pile:

ERREUR s'est produite: Message: élément non visible
(Information de session: chrome sans tête = 60.0.3112.90)
(Informations sur le pilote: chromedriver = 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), plateforme = Windows NT 6.1.7601 SP1 x86_64)
Traceback (appel le plus récent en dernier):
Fichier "C:\nik-x.py", ligne 148, dans le dossier principal
func (nik)
Fichier "C:\lib\support.py", ligne 121, dans le wrapper
élever ret
Fichier "C:\lib\support.py", ligne 108, dans newFunc
res [0] = func (* arguments, ** kwargs)
Fichier "C:\testcases\nik-1003.py", ligne 37, dans le testcase
i.click ()
Fichier "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py", ligne 7
7, en un clic
self._execute (Command.CLICK_ELEMENT)
Fichier "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py", ligne 4
93, en _exécute
retourne self._parent.execute (commande, paramètres)
Fichier "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webdriver.py", ligne 25
6, en exécution
self.error_handler.check_response (réponse)
Fichier "C:\Python36\lib\site-packages\Selenium\webdriver\remote\errorhandler.py", ligne
194, dans check_response
lever exception_class (message, screen, stacktrace)
Selenium.common.exceptions.ElementNotVisibleException: Message: élément non visible
(Information de session: chrome sans tête = 60.0.3112.90)
(Informations sur le pilote: chromedriver = 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), plateforme = Windows NT 6.1.7601 SP1 x86_64)

Voici mon morceau de code:
icons = nik.elementLeftmenuSportIcons() for i in icons[:-1]: try: i.click() 

HTML de la page de test: <a href="#" class="default b_futbal gaPageEventElement" data-ga-cat="Sporty" data-ga-action="futbal"> <span class="left-menu-only-large-res">Futbal</span> </a>

8
Ghost

Je pense que le problème est que l’élément n’est vraiment pas visible dans la zone de visualisation par défaut (600x800) de Headless Chrome.

La taille de la fenêtre du navigateur sans têtes doit être définie en tant qu'argument lors du démarrage de chrome. J'utilise javascript (je pense que l'API est similaire sous Python):

var Options = require('Selenium-webdriver/chrome').Options;
var options = new Options();
options.addArguments('headless');
options.addArguments('disable-gpu');
options.addArguments('window-size=1200,1100');

browser = builder.forBrowser('chrome').setChromeOptions(options).build();

Information additionnelle

La taille de la fenêtre est configurée également par webdriver avec browser.manage().window().setSize(1200,1100);. Mais cette commande n’est pas suffisante en chrome sans affichage. Dans la variante non sans tête, cela fonctionne.

7
powerpete

Vous pouvez le faire de deux manières, comme ci-dessous.

1. Taille de la fenêtre de passage dans options de chrome comme mentionné ci-dessous (avant l’instanciation de l’instance de pilote):

ChromeOptions options = new ChromeOptions()
options.addArguments("headless");
options.addArguments("window-size=1200,1100");
WebDriver driver = new ChromeDriver(options);

2. Définir la taille de la fenêtre après l’instanciation du pilote chrome:

WebDriver webDriver= new ChromeDriver();
webDriver.manage().window().setSize(new Dimension(1200,1100));
0
LoRe

options.addArguments ('window-size = 1200,1100');

Travaillé pour moi en mode chrome sans tête :) Merci beaucoup @powerpete

Voici les réglages complets pour le chrome sans tête dans groovy: -

        ChromeOptions options = new ChromeOptions()
        DesiredCapabilities capabilities = DesiredCapabilities.chrome()
        options.addArguments('headless','disable-gpu','--test-type','--ignore-certificate-errors')
        options.addArguments('window-size=1200,1100');
        capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
        capabilities.setCapability(ChromeOptions.CAPABILITY, options)
        driver = {new ChromeDriver(capabilities)}
0
Bhupender Kumawat