risposta

10

Ignorando i problemi non WATIR di avere tag in primo luogo, o richiedendo attributi univoci dai tuoi sviluppatori (o da te stesso), puoi sempre accedere a un elemento tramite i suoi elementi padre o per indice.

Ad esempio: Testo

@browser.div(:name => "content").span(:index => 1) 
#this is the first span element inside this div 

È possibile lavorare attraverso comunque molti elementi unici che è necessario prima di raggiungere l'elemento arco bambino, senza l'utilizzo di XPath. Ovviamente, è necessario un solo elemento genitore unico per raggiungere quell'elemento figlio specifico, e ci si allontana dal bambino.

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text 

altro esempio, assumendo che rappresenta l'ennesimo campata sulla pagina: @ browser.span (: index =>n)

Il by-index approccio è molto fragile e incline per rompere quando qualsiasi aggiornamento è fatto alla pagina, comunque.

+1

Si noti che è solo il PRIMO span se si utilizzano versioni precedenti di Watir che utilizzano una indicizzazione basata, con Watir 2.x o Watir-Webdriver che utilizzano l'indicizzazione basata su zero (come Ruby) ': index => 1' sarebbe la seconda istanza di una span all'interno del div –

9

Se ha testo:

browser.span(:text => "Text") 

Se si conosce solo una parte del testo è possibile utilizzare espressioni regolari:

browser.span(:text => /Text/) 
8

Ci sono fondamentalmente tre modi per affrontare questa sfida particolare. Zeljko ha indirizzato il primo che è basato su che cos'è all'interno di l'elemento come testo conosciuto. Adam affronta il modo più comune, qual è racchiude o contenenti l'elemento le esaminerò la terza via, che è ciò che è racchiuso-by o accanto l'elemento.

Se si dispone di un elemento noto all'interno di quello desiderato, è possibile iniziare con quello e utilizzare il metodo .parent per ottenere l'elemento 'contenitore'. Questo può anche essere usato per trovare un elemento 'fratello' usando .parent per arrivare a quello che vuoi tramite un contenitore comune come una riga della tabella. Il primo utilizzo è abbastanza ovvio, ma il secondo è probabilmente più comune e molto utile quando si lavora con le tabelle.

Ad esempio, diciamo che hai una tabella con più righe di dati in cui una colonna è numeri di parte univoci e un'altra colonna ha collegamenti "aggiungi al carrello".Ora, se si desidera aggiungere una parte specifica al carrello, è possibile utilizzare indice combinato con il testo 'aggiungi al carrello' utilizzando il codice come questo sulla base di esso che è il 5 ° legame con quel testo specifico

browser.link(:text => 'add to cart', :index => 4).click 

Ma questo è fragile perché non appena i risultati cambiano, (il che può accadere molto con i dati in tempo reale) la tua parte non è più la quinta in quella tabella e il tuo test si interromperebbe. Avresti bisogno di qualche verifica per trovare la parte giusta e non qualcos'altro su quella riga. Tuttavia, in watir si può fare qualcosa di simile:

browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click 

Nel caso di una cella di tabella, il genitore della cella di solito è una riga della tabella, e, quindi, in parole povere questo si traduce in 'trovare il cellulare con "parte n. 123-45", quindi nella stessa riga, trova e fai clic sul link "aggiungi al carrello". (anche se immagino che l'abbia capito solo leggendo il codice.)

Puoi usare questo per ottenere qualsiasi "fratello" o anche solo il "genitore" stesso dove c'è qualche elemento unico vicino o all'interno dell'oggetto devi interagire con

Probabilmente si può fare qualcosa di simile a quello con Xpath, ma buona fortuna ha senso quando legge il codice cinque settimane dopo. Questa è una delle ragioni per cui preferisco di gran lunga Watir e Watir-Webdriver vs Selenio.

+2

Non avrei mai potuto immaginare tante risposte a un semplice problema. –

+3

Un problema semplice, ma presentato in una forma molto generale senza alcun contesto o HTML circostante. Da qui la varietà di risposte ognuna delle quali è molto meno generale della domanda. Il mio si rivolge a una nicchia più ristretta. Hmmm mi viene in mente una modifica utile. –

+1

@DaveMcNulla, La mia risposta modificata ha messo le altre risposte in un altro più contesto ora? –

Problemi correlati