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>
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.
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));
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)}
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.