2016-09-21 2 views
0

Ich benutze Java, Selenium Webdriver in Eclipse.Wie kann ich auf das Auswahlfeld eines By-Objekts zugreifen?

Ich schrieb eine Hilfsmethode, um auf ein vorhandenes Element zu warten, blättern Sie zu ihm, warten Sie, bis das Element sichtbar ist, und klicken Sie darauf. Hier ist, was ich habe:

protected void waitScrollWaitClick(By by, String scroll) 
{ 
    wait.until(ExpectedConditions.presenceOfElementLocated(by)); 
    getJse().executeScript("$('.mCustomScrollbar#" + scroll + "').mCustomScrollbar('scrollTo',document.querySelector(\"" + by.selector + "\"), {scrollInertia:0})"); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(by)); 
    getDriver().findElement(by).click(); 

Jetzt ist das Problem, das ich habe, in dieser zweiten Zeile in der Methode. Ich gebe ein By-Objekt. Dies funktioniert für die herkömmlichen Webdriver-Methoden in den Zeilen 1,3,4. Aber da wir eine benutzerdefinierte Bildlaufleiste für unsere Web-App verwenden, muss ich diese JavascriptExecutor-Klasse (die getJse()) verwenden, um auf der richtigen div #id zu scrollen (also das Argument 'scroll' zu übergeben). Um diese JSE zu verwenden, brauche ich nur den CSS-Selektor, nicht das ganze By-Objekt. Wenn ich einen Haltepunkt hinzufüge und schaue, enthält das By-Objekt ein "Selektor" -Feld mit dem, was ich will (in Eclipse gibt es ein rotes Quadrat mit einem "F"), aber ich kann nicht darauf zugreifen. Ich habe versucht mit dem "by.selector" im obigen Code, aber das ist ein Kompilierfehler.

Wie kann dieses Auswahlfeld verwendet werden? Ich bin kein Java-Experte, also vermisse ich vielleicht etwas Offensichtliches. Ich verstehe nicht, warum ich an einem Haltepunkt anhalten kann, sehe das By-Objekt, das ich auf der Registerkarte Variablen erstellt habe, erweitere das By-Objekt und sehe das gewünschte Selektorfeld, kann aber nicht darauf zugreifen.

Antwort

1

Die einfache Antwort ist, dass Sie den CSS-Selektor nicht von einem By Typ oder sogar WebElement Typ bekommen können. Dies liegt daran, dass die WebElement s selbst von der By Klasse gefunden werden. Falls der By-Wert xpath angegeben wurde, gab es keine Möglichkeit, den CSS-Selektor zu füllen.

Die lange Antwort speziell für Ihr Problem, um den CSS-Selektor zu bekommen wäre es, es mit Javascript zu erstellen. Ein Beispiel wäre die Antwort von Florent B. here. Ich habe es jedoch nicht selbst versucht und ich habe keine Ahnung, ob es für alle Fälle funktioniert.

Jetzt, um das allgemeine Problem zu adressieren, anstelle von document.querySelector verwenden Sie document.getElementById für den Fall, dass Ihr Element eine ID hat.

Oder mit document.evaluate, um Ihr Element von Xpath zu bekommen. Sie finden ein Beispiel in der Antwort here.

+0

Danke. Florents Antwort sieht interessant (und kompliziert) aus, aber ich bin überrascht, dass ich nicht auf dieses Feld des Objekts zugreifen kann, das ich gerade durchlasse. Http://imgur.com/COJh4jC. Ich habe selten eine #ID zu verwenden, also ist getElementById keine Option. Ich stimme deinem Standpunkt zu, dass die Weitergabe eines "By" -Typs mit XPath nicht funktionieren wird. Ich bin vertraut mit der Verwendung von 'document.evaluate', wenn ich dafür brauche. Vielleicht muss ich nur eine separate Hilfsmethode für CSS und Xpath schreiben und nur die Zeichenfolge des Locators übergeben. Vielen Dank! – Atom999

+0

Da ich täglich in C# arbeite, ist mir nicht vertraut, wie Java intern arbeitet, aber nach dem Aussehen scheint Selektor etwas zu sein, das intern in der Klasse By verwendet wird. Sie könnten mehr hier überprüfen: https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/By.java – Cosmin

+0

Danke für die Hilfe! – Atom999

Verwandte Themen