wake-up-neo.com

Selenium WebDriver durch Anklicken eines ausgeblendeten Elements

Hallo, ich würde gerne wissen, wie man mit Selenium WebDriver auf versteckte Elemente klickt und/oder diese deaktiviert.

Ich weiß, dass ich mit Selen 1 Folgendes tun kann:

Selenium.click(id="idOfHiddenField");

und das würde funktionieren, aber mit Selenium 2 (WebDriver) nicht. Ich möchte jquery nicht verwenden, um ausgeblendete Felder oder JavaScript zu aktivieren oder anzuzeigen. Dies liegt daran, dass die meisten Tests xpath verwenden.

Oder muss ich nur beim alten Selen bleiben, mit dem Sie auf versteckte Felder klicken können?

11
Chun ping Wang

Es gibt eine einfachere Möglichkeit, das Problem mit JavascriptExecutor zu umgehen.

Zum Beispiel:

document.getElementsByClassName('post-tag')[0].click();

Das obige Javascript würde auf das "Selenium" -Tag oben rechts auf dieser Seite (neben Ihrer Frage) klicken, auch wenn es (hypothetisch) ausgeblendet wäre.

Alles, was Sie tun müssen, ist diese JS-Anweisung über die Schnittstelle JavascriptExecutor wie folgt abzusetzen:

(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");

Dies würde die JS-Sandbox und das synthetische Klickereignis verwenden, um die Klickaktion auszuführen. Obwohl es den Zweck der WebDriver-Benutzeraktivitätssimulation zunichte macht, können Sie es in Nischenszenarien wie in Ihrem Fall effektiv einsetzen.

16
Ashwin Prabhu

es gibt eine Antwort, aber mehrere Vorschläge:

Antwort: Verwenden Sie den Selenium-unterstützten Treiber, um auf das ausgeblendete Element zu klicken

Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
Selenium.clickAt("xpath=//area[@alt='Mercury']", clickPoint);

Vorschlag 1: Erstellen Sie gefälschte Daten, insbesondere wenn viel erstellt werden muss und Sie nach FOSS suchen, und entscheiden Sie sich für JMeter.

Vorschlag 2: Um zu überprüfen, ob Javascript deaktiviert ist, deaktivieren Sie Javascript in der Firefox-Instanz selbst, z.

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setJavascriptEnabled(false);
1
Prashant Shukla

Es passt möglicherweise nicht zu Ihren Anforderungen, aber eine andere Lösung für einige könnte darin bestehen, das CSS zum Ausblenden eines Elements zu ändern.

Während Selen nicht ein Element mit display: none; findet wird ein Element mit den folgenden Eigenschaften finden:

.hide {
    position: absolute;
    top: -99em;
    left: -99em;
}

Anstatt jQuery.show/hide/toggle in Ihrer App zu verwenden, würden Sie jQuery.toggleClass('hide', true/false/unset_to_toggle) verwenden.

0
Wil