web-dev-qa-db-de.com

Klickbefehl in Selenium Webdriver funktioniert nicht

Ich habe kürzlich einen Export meines Selenium IDE -Codes in den Selenium-Webtreiber durchgeführt. Ich habe festgestellt, dass viele der Befehle, die in IDE funktionierten, entweder nicht funktionieren oder der Selenium-Webtreiber behauptet, überhaupt nicht unterstützt zu werden. Bisher habe ich mich nacheinander mit diesen Problemen befasst, was alles andere als ideal ist ...

Momentan arbeite ich daran herauszufinden, warum das Klicken auf eine Schaltfläche mit dem Webtreiber nicht funktioniert, während es zuvor in Selenium IDE funktioniert hat. Mein Browser ist FF 13 und mein Betriebssystem ist Ubuntu.

Code-Auszug

WebElement loginButton = driver.findElement(By.name("submit"));
loginButton.click();

Ich hatte es zuvor versucht

driver.findElement(By.name("submit")).click();

die obige Zeile schlug jedoch ebenfalls fehl. Das Element wird ausgewählt, aber es meldet uns nicht so an, wie ich es möchte. Ich habe andere Seiten mit ähnlichen Problemen gefunden, aber ihr Problem schien mit dem Internet Explorer und nicht mit Firefox zu sein. Ich möchte nicht einmal über die Probleme nachdenken, die IE mir später auf den Weg bringen werden.

vielen Dank,

P.S. Ein Tipp für eine bessere Möglichkeit, von Selenium IDE auf Selenium Webdriver zu migrieren, ohne alle Tests zu verlieren, die ich geschrieben habe, könnte dieses Problem ebenfalls lösen.

35

Wenn Sie sicher sind, dass das Element vorhanden ist, können Sie dies versuchen, um den Klick zu simulieren - wenn .Click() nicht funktioniert

driver.findElement(By.name("submit")).sendKeys(Keys.RETURN);

oder

driver.findElement(By.name("submit")).sendKeys(Keys.ENTER);
76
TheLifeOfSteve

Es ist wichtig zu beachten, ob eine Schaltfläche aktiviert ist oder nicht. Sie können immer noch darauf klicken und nichts wird umfallen und das Element ist da, aber es ist nicht bereit, darauf geklickt zu werden, also tut es einfach nichts.

Ich habe Webdriver benutzt und es hat mich fast den ganzen Tag gekostet, das herauszufinden!

Die folgende Methode scheint zuverlässig zu funktionieren (in meiner Umgebung für eine Taste!)

    private void TryClick(By selector)
    {
        var wait = WaitUpTo(TimeSpan.FromSeconds(10));
        var element = wait.Until(ExpectedConditions.ElementIsVisible((selector)));

        //really important bit!
        WaitUpTo(TimeSpan.FromSeconds(5))
            .Until(d => element.Enabled);

        element.Click();
    }

du verwendest es so ähnlich wie

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));
8
JonnyRaa

Bitte lesen Sie hier https://code.google.com/p/Selenium/issues/detail?id=6756 In Krux

Öffnen Sie die Systemanzeigeeinstellungen und stellen Sie sicher, dass die Schriftgröße auf 100% eingestellt ist. Es hat überraschend funktioniert

3
Nishant

Ich habe Firefox verwendet und aus irgendeinem Grund wurde der Klickbefehl nicht ausgeführt, obwohl er in den letzten 2 Monaten funktioniert hat. Ich hatte das Gefühl, sendKeys zu benutzen, und diese Seite löste das Problem. Jetzt benutze ich sendKeys (Keys.Enter)

2
user2743318

Vielen Dank für alle Antworten an alle! Ich habe eine Lösung gefunden. Es stellte sich heraus, dass ich in meiner Frage nicht genügend Code angegeben habe.

Das Problem war NICHT mit der click () - Funktion, sondern im Zusammenhang mit der bei meinem Projekt verwendeten cas-Authentifizierung. In Selenium IDE mein Login-Test führte einen "open" -Befehl an der folgenden Stelle aus,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security

Das hat funktioniert. Ich habe den Test in einen Selenium-Web-Treiber exportiert, der diesen Ort natürlich bewahrt hat. Der Befehl in Selenium Webdriver lautete:

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security");

Aus Gründen, die ich noch nicht verstanden habe, ist das obige gescheitert. Als ich es änderte,

driver.get(baseUrl + "MOREURL/");

Der Klickbefehl begann plötzlich zu funktionieren ... Ich werde diese Antwort bearbeiten, wenn ich herausfinden kann, warum genau dies der Fall ist.

Hinweis: Ich habe die oben genannten URLs verdeckt, um das Produkt meines Unternehmens zu schützen.

2

An beiden Versionen Ihres Codes ist nichts falsch. Was auch immer das verursacht, das ist es nicht.

Haben Sie Ihren Locator dreimal überprüft? Dein Element hat definitiv name = submit nicht id = submit?

2
el roso