2009-09-18 19 views
5

Uso Selenium RC con la modalità chrome per Firefox per automatizzare i test case per un'applicazione web. Sto scrivendo gli script in Java usando il framework TestNG ed Eclipse. Ora per il punto principale:Selenium RC Problemi con XPath

Ho problemi con Selenium RC per il riconoscimento di determinati XPath. Convalido i miei XPath con l'estensione XPath-Checker per Firefox che non mostra alcun errore. Poi lo proverò in Selenium IDE per assicurarmi che venga riconosciuto XPath. Anche IDE riconosce l'elemento. Ma il Selenium RC non lo riconosce. C'è qualcosa che posso fare per correggere questo?

In particolare, sto cercando di fare clic su un particolare dato da:

html/body/form/div[@id='someid1']/div[@class='someClass']/div[@id='someid2']/div[@id='someid3']/div[@id='someid4']/div[@title='titleOfTheElement'] 

Poi ho provato anche:

//div[@title='titleOfTheElement'] 
xpath=//div[@title='Automated User'] 
xpath=/descendant::div[@title='Automated User'] 

Ancora niente!

1) Qualcuno può suggerire cosa potrebbe essere sbagliato o se il selenio è noto per avere problemi con XPath?

2) Non c'è nessun addon (simile al correttore XPath) che ci aiuta a vedere le cose come vede il Selenium RC? In questo modo potremmo essere sicuri che RC riconoscerà gli XPath.

Grazie,
Mugen

Ecco il codice Selenio:

selenium.click("somelink"); 
selenium.waitForPageToLoad("30000"); 

boolean flag=false 
    do{ 
    if (selenium.isTextPresent("Some text on the page which loads last")) 
    { 
     flag=true 
    } 
    }while(flag=false); 


selenium.click("locator for area which is driving me crazy"); 

Ora l'ultimo passo, se dovessi fare clic in qualsiasi altro punto della pagina (che significa qualche altro localizzatore) il fare clic funzionerebbe.

Il codice HTML per la zona si presenta così:

<div id="someid1" style="overflow: hidden;"> 
<div id="someid2" title="title1" class="someclass">title1</div> 
<div id="someid3" title="title2" class="someclass">title2</div> 
<div id="someid4" title="required title" class="someclass">required title</div> 
<div id="someid5" title="title3" class="someclass">title3</div> 
<div id="someid6" title="title4" class="someclass">title4</div> 
<div id="someid7" title="title5" class="someclass">title5</div></div> 

Grazie carico per la ricerca in questo. :-)

+0

È possibile pubblicare i comandi RC Selenium? Stai aspettando che la pagina venga caricata prima di inviare il comando clic? –

risposta

6

Non sono sicuro se sia corretto avere un div con un attributo title. Non c'è un altro attributo che potresti usare per localizzare l'elemento?

Comunque, ecco la versione css del localizzatore, nel caso in cui funziona:

css=div[title='Automated User'] 
+0

Grazie per la risposta! Usare css funziona alla grande! Ho sbagliato a provare css come css = div [@ title = 'Utente automatico'] - stupido me! – Mugen

+0

Felice di vederlo funzionato :) – Santi

0

Sei sicuro che la pagina sia caricata correttamente con RC, cioè vedi il browser aperto e la pagina caricata?

+0

Grazie per aver risposto Jeremy. Sì, sono in grado di vedere la pagina aperta correttamente. Gli XPath per altre aree sembrano funzionare correttamente. È in una particolare area che non riconoscerà affatto. Cliccando su diversi elementi in questa particolare area si apportano alcune modifiche a un altro div nella pagina. Questo potrebbe essere collegato al problema? – Mugen

2

Abbiamo avuto una volta un problema con le espressioni XPath durante l'esecuzione di test Selenium su Firefox.

  • Hai provato a eseguire gli stessi test con browser diversi?
  • Mi ricordo che abbiamo sostituito tutti i nomi degli elementi con i segni di asterisco (*) e che ha aiutato. cioè

    // * [@ id = 'someid1']/* [@ class = 'someClass']/* [@ id = 'someid2']

2

dal vostro esempio, si dovrebbe essere in grado utilizzare l'ID dell'elemento bersaglio:

selenium.click("id=someid4"); 

Anche se ho il sospetto che gli ID vengono generati in modo dinamico e non si riesce a utilizzare questo metodo.

non vedo alcuna ragione per cui il seguente XPath non avrebbe funzionato:

selenium.click("//div[@title='required title']"); 

Altri modi per indirizzare sarebbe:

selenium.click("css=div[title='required title']"); 
selenium.click("css=.someclass:nth-child(4)"); //must be 4th child of parent element 

è il vostro elemento div obiettivo reale? Risponde a un evento click? Se c'è un elemento figlio che risponde al clic, allora dovrai scegliere come target quello. Inoltre, si potrebbe provare la risoluzione dei problemi con i seguenti comandi:

mouseDown 
mouseUp 
fireEvent 
+0

Grazie il mio div non era il vero obiettivo "non ha risposto" ha dovuto ottenere il selenio per premere il tag nidificato :-) – Blundell

0

potrebbe essere il vostro script è più veloce della pagina web .so cercare di attendere per qualche tempo. come è possibile utilizzare waitForCondition("selenium.isElementPresent("ElementID")","20000");

Come sembra non essersi comportato con xpath.try questo potrebbe essere di aiuto.

Problemi correlati