2011-11-17 13 views
6

Non posso per la vita di me capire cosa sta succedendo. il codice è semplice:click link selenium web driver funziona per ie non firefox

//WebDriver driver = new InternetExplorerDriver(); 
//WebDriver driver = new FirefoxDriver(); 
driver.get("http://www.yahoo.com"); 
driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']/a/span[2]")).click(); 

Io uso ff o ie driver. ma l'ultima riga di codice è uguale. funziona per ie, ma non ff. la cosa divertente è che sto ottenendo xpath da firefug ff quindi xpath è corretto per ff. ff versione 7.0.1. È solo il collegamento Mail sulla colonna sinistra del sito yahoos. Perche'e'cosi difficile?

+1

Ho appena provato a riprodurre il problema, ma l'espressione XPath '// * [@ id = 'pa-u_14782488-bd']/a/span [2]' non restituisce alcun elemento. Questo è il problema con gli ID dinamici. Non durano per sempre. Inoltre, stai ovviamente cliccando su un link. Quindi prova a fare clic sul collegamento e non su alcuni dei suoi elementi interni ''. –

risposta

0

Il selenio ha difficoltà a volte con elementi incorporati all'interno degli elementi di collegamento (<a>). Prova il tuo codice senza l'ultima parte di XPath. Quindi:

//*[@id='pa-u_14782488-bd']/a 

Assicurati di pubblicare anche la versione di selenio che si sta utilizzando in modo che altri si può dare un aiuto più dettagliata.

+0

grazie. ho provato, ma senza risultato. ancora non funziona per ff. sto usando selenio 2.11.0 – emacs

+0

Penso che abbia a che fare con yahoo spostando la pagina web verso il basso quando la loro home page viene caricata da ff. Noto che non muove la pagina. quello potrebbe essere buttare via l'autista o qualcosa del genere. qualche idea? – emacs

+0

Ho notato che quando selenium lancia firefox ff sposta la pagina web verso il basso in modo che l'elemento su cui sto facendo clic si trovi nella parte superiore della pagina. Ho provato diversi elementi e ha fatto la stessa cosa. Il problema con lo spostamento della pagina su yahoo, fa apparire una barra dei messaggi in cima alla pagina che coprirà l'elemento. Mi chiedo se questo sta causando il problema. Penso DAVVERO CHE È IL PROBLEMA. – emacs

0

non utilizzare xpath search .. è altamente instabile e non aiuta affatto il tuo caso. Anche il tuo codice di selenio è ora strettamente accoppiato con il markup e qualsiasi modifica al markup come l'introduzione di un contenitore (i.e div) fallirà il test.

è possibile utilizzare lo scoping per ottenere qualcosa di simile. Esempio:

var container=driver.findElement(By.xpath("//*[@id='pa-u_14782488-bd']")); 

var spans=container.findElements(By.tagName("span")); 

spans[1].Click(); 

Anche io non capisco come questo funziona, però, cos si dispone di un collegamento e per sto indovinando per scopi styling si hanno due spanne al suo interno, ma cliccando su uno di essi deve ancora far scattare la stessa azione cliccando sul click correcT? o mi manca qualcosa ??

Potrebbe essere proprio il caso che firefox stia consegnando i tuoi eventi in modo errato.

+0

I'd essere interessato a vedere il risultato della ricerca sulla stabilità di xpath. Sicuramente xpath, css o comunque si trova che l'elemento restituirà lo stesso IWebElement su cui viene eseguito Click() o mi manca qualcosa? –

2

Come Slanec menzionato questo tipo di siti uso dinamico id, quindi una scelta migliore nel caso di cui sopra specificata sarebbe quella di utilizzare attributo "title", che ha minore probabilità di cambiare .. se si vuole andare con XPath, questo funzionerà,

driver.findElement(By.xpath("//*[@title='Mail']")).click(); 

opzione Ancora meglio sarà quella di utilizzare link testuale, perché funziona allo stesso modo l'utente manualmente fare clic su ...

driver.findElement(By.linkText("MAIL")).click(); 
Problemi correlati