webentwicklung-frage-antwort-db.com.de

ElementNotVisibleException bei Verwendung eines headless Chrome-Browsers

Wenn ich ein Testskript im Chrome-Browser des Headless-Modus ausführe, ist die Elementverknüpfung nicht sichtbar und kann linkElement.click() nicht ausführen. im kopfmodus ist alles ok. Alle anderen Informationen sind in Stacktrace. Jeder weiß, was zu tun ist, bitte?

StackTrace:

ERROR aufgetreten: Nachricht: Element nicht sichtbar
(Sitzungsinfo: headless chrome = 60.0.3112.90)
(Treiberinfo: chromedriver = 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), Plattform = Windows NT 6.1.7601 SP1 x86_64)
Traceback (letzter Anruf zuletzt):
Datei "C:\nik-x.py", Zeile 148, in main
func (nik)
Datei "C:\lib\support.py", Zeile 121, im Wrapper
ret erhöhen
Datei "C:\lib\support.py", Zeile 108, in newFunc
res [0] = func (* args, ** kwargs)
Datei "C:\testcases\nik-1003.py", Zeile 37, im Testfall
i.click ()
Datei "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py", Zeile 7
7, in Klick
self._execute (Command.CLICK_ELEMENT)
Datei "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webelement.py", Zeile 4
93, in _execute
return self._parent.execute (Befehl, Parameter)
Datei "C:\Python36\lib\site-packages\Selenium\webdriver\remote\webdriver.py", Zeile 25
6 in Ausführung
self.error_handler.check_response (Antwort)
Datei "C:\Python36\lib\site-packages\Selenium\webdriver\remote\errorhandler.py", Zeile
194, in check_response
exception_class erhöhen (Nachricht, Bildschirm, Stacktrace)
Selenium.common.exceptions.ElementNotVisibleException: Nachricht: Element nicht sichtbar
(Sitzungsinfo: headless chrome = 60.0.3112.90)
(Treiberinfo: chromedriver = 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8), Plattform = Windows NT 6.1.7601 SP1 x86_64)

Hier ist mein Code:
icons = nik.elementLeftmenuSportIcons() for i in icons[:-1]: try: i.click() 

HTML von der Testseite: <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

Ich denke, das Problem ist, dass das Element in der Standard-Viewbox (600x800) von Headless Chrome wirklich nicht sichtbar ist.

Die Fenstergröße des Headless Browsers muss beim Starten von Chrome als Argument festgelegt werden. Ich benutze Javascript (ich denke, die API sieht unter Python ähnlich aus):

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();

Zusätzliche Information

Ich habe die Fenstergröße auch von einem Web-Treiber mit browser.manage().window().setSize(1200,1100); eingerichtet. Dieser Befehl reicht jedoch nicht für kopfloses Chrom. In der nicht kopflosen Variante funktioniert das.

7
powerpete

Sie können dies auf zwei Arten wie unten beschrieben tun.

1.Passing Fenstergröße in Chrome-Optionen wie unten erwähnt (Vor dem Instanziieren der Treiberinstanz):

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

2. Fenstergröße nach dem Instantiieren einstellen chrome driver:

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

options.addArguments ('Fenstergröße = 1200,1100');

Arbeitete für mich im Headless-Chrome-Modus :) Vielen Dank @powerpete

Hier sind die kompletten Einstellungen für kopfloses Chrom in 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

Wenn das Ändern der Fenstergröße für niemanden wie mich funktioniert, kann es sein, dass der HTML-Code tatsächlich zwischen Headless-Modus und Headed-Modus wechselt.

Ich hatte ein ähnliches Problem, aber der Headless funktionierte in FireFox und nicht in Chrome. Der Xpath für das Chrome -Element funktionierte nur im Headed-Modus. Ich fand heraus, dass sich der HTML-Code im Headless-Modus von Chrome leicht änderte.

Ich habe dies behoben, indem ich den Xpath des Elements in Chrome mit dem Xpath des Elements in FireFox ersetzt habe, wenn der Headless-Modus in Chrome verwendet wurde.

0
Jacob Ouellet