2017-12-08 3 views
0

Ich möchte überprüfen, dass ein DOM-Element mit Puppeteer und reinem JavaScript (nicht jQuery) sichtbar ist, wie kann ich das tun? Mit "sichtbar" bezeichne ich, dass das Element über CSS angezeigt und nicht ausgeblendet wird (z. B. durch).Wie kann ich überprüfen, ob ein Element mit Puppenspieler und reinem JavaScript sichtbar ist?

Zum Beispiel kann ich feststellen, ob #menu mein Element über CSS-Regel display: none, in der folgenden Art und Weise nicht verborgen:

const isNotHidden = await page.$eval('#menu', (elem) => { 
    return elem.style.display !== 'none' 
}) 

Wie kann ich im Allgemeinen, obwohl festzustellen, ob das Element verborgen ist oder nicht, und nicht nur durch ?

+1

Ich weiß nicht, wie konsequent es für andere Methoden des Verbergens funktioniert, aber 'elem.getBoundingClientRect()' gibt eindeutige Daten zurück, gegen die Sie testen können. – AuxTaco

Antwort

2

Ich fand, dass Puppeteer eine API-Methode für diesen Zweck hat: Page.waitForSelector, über seine visible Option. Ich war mir der letzteren Option nicht bewusst, aber es lässt Sie warten, bis ein Element sichtbar ist.

await page.waitForSelector('#element', { 
    visible: true, 
}) 

Umgekehrt können Sie für ein Element warten über die hidden Option versteckt werden.

Ich denke, das ist die idiomatische Antwort, in Bezug auf die Puppeteer API. Danke an Colin Cline, obwohl ich denke, dass seine Antwort wahrscheinlich als allgemeine JavaScript-Lösung nützlich ist.

+1

Danke, dass Sie diese Lösung teilen. +1 –

+0

Gern geschehen @ColinCline :) – aknuds1

0

Ein wird durch Überprüfung seiner Anzeigeart Wert. Sekunde ist durch Überprüfung seiner Höhe, für exp wenn das Element ein Kind eines Elements ist, das display: none ist, wird offsetHeight0 sein, und Sie wissen also, dass das Element trotz seines Anzeigewerts nicht sichtbar ist. opacity: 0 wird nicht als verstecktes Element betrachtet, daher werden wir es nicht prüfen.

const isNotHidden = await page.$eval('#menu', (elem) => { 
    return window.getComputedStyle(elem).getPropertyValue('display') !== 'none' && elem.offsetHeight 
}); 

können Sie elem.offsetWidth auch überprüfen und ist vor jeder Berechnung nicht schlecht, überprüfen, ob Element vorhanden ist oder nicht.

+0

Und "Fenster" var wo ist definiert? – pabgaran

+1

@pabgaran Das Fensterobjekt stellt ein Fenster dar, das ein DOM-Dokument enthält. [getComputedStyle] (https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle). Sie können das Fenster in eine Variable von c zwischenspeichern, aber es ist ein globales Objekt –

+0

Sie haben Recht. Ich bin ein Anfänger mit Puppentheater. All dieser Code arbeitet innerhalb eines "Navigators", so dass Fenster, Dokument usw. immer verfügbar sind. – pabgaran

Verwandte Themen