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.
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
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
Danke für die Hilfe! – Atom999