2012-07-26 7 views
32

Ich habe gerade einen Export von meinem Selen IDE-Code zu Selen-Web-Treiber gemacht. Ich habe festgestellt, dass viele der Befehle, die in der IDE funktionierten entweder nicht funktionieren oder Selen-Web-Treiber behauptet, überhaupt nicht zu unterstützen. Bis jetzt habe ich diese Probleme eins nach dem anderen in Angriff genommen, was nicht gerade ideal ist ...klicken Sie auf Befehl in selen webdriver funktioniert nicht

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

Code Snippet

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

hatte ich vorher

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

jedoch die obige Zeile ebenfalls versagt. Das Element wird ausgewählt, aber es meldet sich nicht wie gewünscht an. Ich habe andere Seiten mit ähnlichen Problemen gefunden, aber ihr Problem schien mit Internet Explorer nicht Firefox zu sein. Ich will nicht einmal über die Probleme nachdenken, die mir der Weg geben wird.

danke,

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

+0

Sie versuchte 'behaupten loginButton.isDisplayed() (für eine Taste in meiner Umgebung!); '? –

+2

wenn Sie sagen, dass die click() Operation fehlgeschlagen ist? Erhalten Sie irgendwelche Fehler oder Ausnahmen.Bitte veröffentlichen Sie sie, um zu verstehen, warum der Vorgang click() fehlschlägt. –

Antwort

67

Wenn Sie sicher sind, dass das Element vorhanden ist, können Sie dies versuchen, 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); 
+1

ist es Keys.Enter? –

+0

@PavelJanicek entweder wird man den Trick tun, aber bearbeitet, um beide zu zeigen;) – TheLifeOfSteve

+3

wow. Das wusste ich nicht. Upvote, um mir etwas Neues beizubringen :) –

1

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

Haben Sie Ihren Locator verdreifacht? Ihr Element hat definitiv name = submit not id = submit?

2

Danke für alle Antworten jeder! Ich habe eine Lösung gefunden, stellt sich heraus, dass ich nicht genug Code in meiner Frage bereitgestellt habe.

Das Problem war NICHT mit der Funktion click() schließlich, aber stattdessen im Zusammenhang mit Cas-Authentifizierung mit meinem Projekt verwendet. In Selenium IDE ausgeführt Anmeldungs ​​Test ein "open" -Befehl an den folgenden Speicherort,

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

Das funktionierte. Ich habe den Test auf Selenium webdriver exportiert, der diesen Ort natürlich erhalten hat. Der Befehl in Selenium Webdriver war,

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

Aus Gründen habe ich noch zu verstehen, die oben genannten fehlgeschlagen. Als ich es geändert,

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

Der Klickbefehl zu arbeiten beginnt plötzlich ... Ich werde diese Antwort bearbeiten, wenn ich herausfinden kann, warum genau das ist.

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

+0

Sie sagten, dass es auf IE nicht auf Firefox gescheitert ist. Sind Sie sicher, dass diese Situation nur durch den Standort verursacht wurde? –

+0

Bitte bearbeiten Sie die ursprüngliche Frage, anstatt ein Update als Antwort zu posten. –

1

Ich benutzte Firefox und irgendeinen Grund, es nahm nicht den Klickbefehl obwohl von den letzten 2 Monaten es funktionierte. Mein Gefühl war, sendKeys zu verwenden und diese Seite löste das Problem. Jetzt bin ich mit Sendkeys (Keys.Enter)

5

A Die Hauptsache ist, ob eine Schaltfläche aktiviert ist oder nicht. Sie können immer noch auf sie klicken und nichts wird umkippen und das Element ist da, aber es ist nicht bereit, darauf angeklickt zu werden, tut also nichts.

Ich habe Webdriver verwendet und es hat mich fast den ganzen Tag genommen, um dies herauszufinden!

Die folgende Methode scheint zuverlässig zu arbeiten

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(); 
    } 

Sie es verwenden, so etwas wie

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