Uso di Watir, esiste un modo per accedere a un elemento senza attributi?Accesso a un elemento senza attributi in Watir
Ad esempio:
<span>Text</span>
vorrei evitare di usare XPath, ma se questo è l'unico modo è cool.
Uso di Watir, esiste un modo per accedere a un elemento senza attributi?Accesso a un elemento senza attributi in Watir
Ad esempio:
<span>Text</span>
vorrei evitare di usare XPath, ma se questo è l'unico modo è cool.
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.
Se ha testo:
browser.span(:text => "Text")
Se si conosce solo una parte del testo è possibile utilizzare espressioni regolari:
browser.span(:text => /Text/)
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.
Non avrei mai potuto immaginare tante risposte a un semplice problema. –
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. –
@DaveMcNulla, La mia risposta modificata ha messo le altre risposte in un altro più contesto ora? –
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 –