2012-12-06 16 views
8

Ich möchte überprüfen, ob der Benutzer ein Element in der aktuellen Webbrowser-Ansicht sehen kann, ohne zu scrollen.Überprüfen, ob ein Element wirklich für den Benutzer sichtbar ist

Was ich gefunden habe, kann überprüfen, ob das Element irgendwo auf der Seite ist.

Ein weiterer Hinweis vorgeschlagen, um die Elemente Position zu überprüfen, aber dann würde ich die Abmessungen des sichtbaren Fensters des Browsers sowie sein x/y versetzt 0/0 erhalten müssen.

Ich wäre dankbar, wenn mir jemand auf eine Lösung zeigen könnte, die keinen JavaScript-Code benötigt.

+2

Leider kein Weg ohne JavaScript. Warum willst du das überhaupt nicht? Hilft etwas von [hier] (http://stackoverflow.com/questions/704758/how-to-check-if-an-element-is-really-visible-with-javascript)? –

+0

@Slanec Zum Beispiel habe ich einen Fehler, wo aufgrund eines schlechten CSS eine Schaltfläche, die angeklickt werden muss, positioniert wird, zum Beispiel bei 110% Breite des Ansichtsfensters, und der Überlauf wird auf versteckt gesetzt. Also wird der Button NIEMALS Clickbale sein, nicht mit Scrollen oder Größenanpassung oder irgendetwas. Dies geschieht übrigens nur in IE11. Jetzt möchte ich einen Testfall, um zu überprüfen, ob die Schaltfläche sichtbar ist, um sie der Regression für das Produkt hinzuzufügen. Leider ist isDisplayed() für das Element wahr. – dmansfield

+0

Ich überprüfe die Sichtbarkeit eines Elements mit Css, Z-Index. Ob ich die Sichtbarkeit eines Elements überprüfen kann, in der Rückschicht eines anderen Elements. – bcrajkumar

Antwort

2

Wie definieren Sie "für den Benutzer sichtbar"? Wie schlagen Sie vor, es zu überprüfen? Wenn es eine Höhe hat? Wenn es nicht von CSS versteckt ist? Was ist, wenn das Elternelement von CSS versteckt ist?

Der zuverlässigste Weg wird in .Displayed Eigenschaft gebaut verwendet Selen ist (wenn Sie C# verwenden, Java hat etwas ähnlich), und kombiniert es mit jQuery ‚sichtbar‘ Selektor: http://api.jquery.com/visible-selector/. Beispiel unten in C#.

var element = Driver.FindElement(By.Id("test")); 
bool isVisible = element.Displayed; 
var javascriptCapableDriver = (IJavascriptExecutor)Driver; 
bool jQueryBelivesElementIsVisible = javascriptCapableDriver.ExecuteScript("return $('#myElement').is(:visible);"); 
bool elementIsVisible = isVisible && jQueryBelievesElementIsVisible; 

Dies wird die Mehrheit der Fälle erhalten.

Es ist nicht möglich, ohne clientseitigen Code, oder in der Vorbereitung, dass jemand anders einen Weg findet, dass es in einer serverseitigen Sprache getan werden kann, ich bezweifle sehr, dass es schön, lesbar oder zuverlässig ist.

jQuery hat die offset() Methode:

http://api.jquery.com/offset/

Dies wird jedoch nicht funktionieren, wenn Berücksichtigung Grenzen nehmen, Margen, solche Sachen.

+1

Ich würde ** sichtbar ** definieren, da das Element im Ansichtsport ist und nicht durch andere Elemente davor verborgen wird. – Cani

+0

@Cani Das sollte wirklich machbar sein, die 'click()' Methode löst unter genau diesen Umständen eine Exception aus (mit der Meldung "Element <> ist nicht anklickbar (546, 18). Anderes Element würde den Klick erhalten: <> "). Ich kann einfach nicht herausfinden, wie es geht, ohne tatsächlich einen Klick auszulösen, wenn es sichtbar ist ... – Izkata

Verwandte Themen