2012-07-26 15 views
32

Ho appena effettuato un'esportazione del mio codice IDE di selenio sul driver del selenio. Ho scoperto che molti dei comandi che hanno funzionato in IDE non funzionano o le affermazioni del driver Web del selenio non supportano affatto. Finora ho affrontato questi problemi uno alla volta che non è l'ideale ...il comando di clic nel webdriver selenio non funziona

Attualmente sto lavorando per scoprire perché fare clic su un pulsante non funziona con il driver web mentre aveva precedentemente lavorato in selenio IDE. Il mio browser è FF 13 e il mio sistema operativo è Ubuntu.

frammento di codice

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

precedenza avevo provato

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

tuttavia la linea di cui sopra non è riuscito pure. L'elemento viene selezionato, ma non ci accede come vorrei. Ho trovato altre pagine con problemi simili, ma il loro problema sembrava essere con Internet Explorer e non con Firefox. Non voglio nemmeno pensare ai problemi che IE mi darà in fondo alla strada.

grazie,

P.S. Un suggerimento su come migrare da IDE selenio a Selenium Webdriver senza perdere tutti i test che ho scritto potrebbe risolvere anche questo problema.

+0

hai cercato di affermare la 'loginButton.isDisplayed() (nel mio ambiente per un tasto!); '? –

+2

quando dici che l'operazione click() non è riuscita? Ricevi errori o eccezioni.Per favore pubblicali per capire perché l'operazione click() fallisce. –

risposta

67

Se si sa per certo che l'elemento è presente, si potrebbe provare questo per simulare il click - se .Click() non funziona

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

o

driver.findElement(By.name("submit")).sendKeys(Keys.Enter); 
+1

isnt Keys.Enter? –

+0

@PavelJanicek o uno farà il trucco ma modificato per mostrare entrambi;) – TheLifeOfSteve

+3

wow. Non lo sapevo Voto per insegnarmi qualcosa di nuovo :) –

1

Non c'è niente di sbagliato in entrambe le versioni del codice. Qualunque cosa stia causando questo, non è quello.

Avete triplicato controllato il vostro localizzatore? Il tuo elemento ha sicuramente name = submit not id = submit?

2

Grazie per tutte le risposte tutti! Ho trovato una soluzione, risulta che non ho fornito abbastanza codice nella mia domanda.

Il problema era NON con la funzione click() dopotutto, ma in relazione all'autenticazione cas utilizzata con il mio progetto. In Selenium IDE il mio test di accesso ha eseguito un comando "aperto" nella seguente posizione,

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

Che ha funzionato. Ho esportato il test sul selettore del selenio che naturalmente ha conservato quella posizione. Il comando in Selenium Webdriver era,

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

Per ragioni che non ho ancora capito, quanto sopra non è riuscito. Quando ho cambiato,

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

Il comando click improvvisamente ha iniziato a lavorare ... Mi permetterà di modificare questa risposta se riesco a capire perché proprio questo è.

Nota: ho oscurato gli URL utilizzati in precedenza per proteggere il prodotto della mia azienda.

+0

Hai detto che non è riuscito su IE non su Firefox. Sei sicuro che questa situazione sia causata solo dalla posizione? –

+0

Per favore modifica la domanda originale invece di postare un aggiornamento come risposta. –

1

Stavo usando firefox e qualche ragione, non stava prendendo il comando click anche se da 2 mesi che funzionava. La mia sensazione è stata quella di utilizzare SendKeys e questa pagina ha risolto il problema. Ora sto usando Sendkeys (Keys.Enter)

5

A la cosa principale a cui prestare attenzione è se un pulsante è abilitato o meno. Puoi ancora fare clic su di essi e nulla cadrà e l'elemento è lì ma non è pronto per essere cliccato, quindi non fa nulla.

Ho utilizzato il webdriver e mi ha dedicato gran parte della giornata a capirlo!

Il seguente metodo sembra funzionare in modo affidabile

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

lo si utilizza qualcosa come

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