xpath functions dynamic xpath selenium
Questo tutorial spiega l'uso delle funzioni XPath nell'identificazione degli elementi con esempi:
Prima di automatizzare qualsiasi sito web è necessario identificare correttamente l'oggetto prima di poter eseguire qualsiasi operazione sullo stesso. Come sappiamo, il modo più semplice per identificare l'elemento è tramite attributi come ID, Nome, Link, Classe o qualsiasi altro attributo univoco disponibile con il tag in cui risiede l'elemento.
Ciò è possibile solo quando questi attributi sono presenti e / o sono univoci in modo che l'oggetto venga identificato correttamente.
=> Dai un'occhiata alla guida per principianti al selenio qui.
Cosa imparerai:
Panoramica delle funzioni XPath
Parliamo dello scenario in cui gli attributi non sono immediatamente disponibili.
Dichiarazione problema
Come identifichiamo l'elemento se i localizzatori come ID, Nome, Classe, Collegamento, ecc. Non sono disponibili nel tag dell'elemento?
Questo può essere compreso chiaramente con l'esempio fornito:
Accedere Twitter
Come puoi vedere nello screenshot qui sopra, l'intestazione 'Accedi a Twitter' non ha attributi allegati. Detto questo, non possiamo utilizzare nessuno dei localizzatori come ID, Classe, Link o Nome per identificare questo elemento.
quale processo richiede build e test automatizzati per verificare il software durante lo sviluppo
Il plugin Firepath dello strumento Firefox ha generato il seguente XPath:
// * (@ id = ’page-container’) / div / div (1) / h1
Non consigliamo di utilizzare il precedente XPath come struttura della pagina o ID poiché potrebbe cambiare dinamicamente. Se utilizziamo questo XPath instabile, potremmo dover modificare l'XPath più frequentemente, il che richiede più tempo per la manutenzione. Questo è un caso in cui non possiamo utilizzare l'espressione XPath generica con localizzatori come id, class, name o link.
Soluzione
Identificazione dell'elemento utilizzando le funzioni XPath tramite testo
Dato che abbiamo il testo visibile 'Accedi a Twitter' disponibile con noi, faremo uso di quanto segue Funzioni XPath per identificare in modo univoco l'elemento.
- contiene () (Per testo)
- inizia con () (Per testo)
- testo()
Le funzioni XPath come contains (), starts-with () e text () se usate con l'aiuto del testo “Accedi a Twitter” ci aiuterebbero a identificare correttamente l'elemento e sullo stesso possono essere eseguite ulteriori operazioni.
# 1) Metodo Contains ():
Sintassi: Per trovare l'elemento web 'Accedi a Twitter', utilizza una delle seguenti espressioni XPath che includono il metodo contains ().
Per testo
- // h1 (contiene (text (), ’Accedi a’))
- // h1 (contiene (text (), ’in to Twitter’))
Nota: 1 nodo corrispondente indica che l'elemento web è stato identificato con successo.
Dall'esempio precedente, è chiaro che il metodo contains () non necessita del testo assoluto (completo) per identificare correttamente l'elemento. Il testo parziale è sufficiente per identificarlo correttamente. Tuttavia, il testo parziale selezionato dovrebbe essere unico. L'utente può facilmente identificare l'elemento anche se l'orientamento della pagina viene modificato con l'aiuto del metodo contains ().
Si noti che anche se si utilizza il testo assoluto 'Accedi a Twitter' con il metodo contains (), l'elemento verrebbe identificato correttamente.
# 2) Metodo Inizia con ():
Sintassi: Per trovare l'elemento web 'Accedi a Twitter', utilizza le seguenti espressioni XPath di esempio che hanno il metodo starts-with ().
Per testo
- // h1 (starts-with (text (), ’Log in’))
- // h1 (starts-with (text (), ’Log in to’))
Dall'esempio sopra, è chiaro che il metodo delle funzioni XPath starts-with () richiede almeno la prima parola ('Log') del testo visibile per identificare in modo univoco l'elemento. Funziona anche sul testo parziale e non funzionerà se non includiamo la prima parola del testo parzialmente visibile.
Si noti che anche se si utilizza il testo assoluto 'Accedi a Twitter' con il metodo inizia con (), l'elemento verrà identificato correttamente.
XPath non valido per inizia con (): // h1 (starts-with (text (), ’in to Twitter’))
Nota: Nessun nodo corrispondente indica che l'elemento web non è stato identificato.
# 3) Metodo Text ():
Sintassi: Per trovare l'elemento web 'Accedi a Twitter', utilizza la seguente espressione XPath con metodo text ().
In questa espressione, usiamo il testo assoluto che è presente tra il tag di inizio. Se usiamo la funzione text () con Xpath parziale come facciamo in contiene () e inizia con (), non saremmo in grado di trovare l'elemento.
Xpath non valido per text ():
Identificazione dell'elemento utilizzando le funzioni XPath per attributo
Usiamo le funzioni XPath (contiene o inizia con) con attributo quando sono disponibili alcuni valori di attributo identificati in modo univoco nel tag contenitore. Gli attributi sono accessibili utilizzando il simbolo '@'.
Questo può essere compreso chiaramente con il dato esempio:
Accedere Google
# 1) Metodo Contains ():
Sintassi: Per identificare in modo univoco l'elemento del pulsante 'Mi sento fortunato' con l'aiuto della funzione XPath contiene () con l'aiuto dell'attributo.
(i) Per attributo di valore:
- // input (contiene (@ value, ’Feeling’))
- // input (contiene (@ value, ’Lucky’))
Dalle immagini sopra, si comprende che l'utilizzo del valore dell'attributo con il metodo 'Feeling' o 'Lucky' con il metodo contains () identificherà in modo univoco l'elemento. Tuttavia, è importante notare che anche se usiamo il contenuto completo dell'attributo Value, identificherà l'elemento correttamente.
(ii) Attributo Per nome:
//input(contains(@name=’btnI’))
Il caso non valido per la funzione XPath con l'attributo:
Dobbiamo stare molto attenti nel selezionare l'attributo da usare con il metodo contains () e starts-with (). Se il valore dell'attributo non è univoco, non saremo in grado di identificare in modo univoco l'elemento.
Supponiamo che se prendiamo l'attributo 'tipo' quando identifichiamo il pulsante 'Mi sento fortunato', l'XPath non funzionerà.
2 nodi corrispondenti indicano che l'elemento non è stato identificato correttamente. Qui il valore dell'attributo type non è univoco.
# 2) Metodo Inizia con ():
Il metodo starts-with () con l'attributo è molto utile quando dobbiamo trovare gli elementi la cui parte precedente dell'attributo rimane fissa mentre la parte successiva continua a cambiare. Questo approccio è molto utile quando gli oggetti cambiano dinamicamente il valore dei suoi attributi. Questo può essere utilizzato anche se vogliamo catturare tipi simili di elementi.
Vai a accesso a Facebook
Ispeziona la prima casella di testo 'Nome' e la seconda casella di testo 'Cognome' del modulo di iscrizione.
Viene identificata la prima casella di testo 'Nome'.
La seconda casella di testo 'Cognome' è identificata.
In entrambe le caselle di testo identificate per la registrazione a Facebook, la parte iniziale degli attributi id rimane invariata.
ID nome = 'u_0_2'
Cognome id = ’u_0_4'
Questo è lo scenario in cui possiamo usare l'attributo starts-with () per ottenere tutti gli elementi sotto tale tipo di attributo id. Tieni presente che utilizziamo questi due campi solo come riferimento. Tuttavia, potrebbero esserci più campi sullo schermo con ID che iniziano con 'u_0_'.
Inizia con () (per id attributo)
//input(starts-with(@id,”u_0_”))
Nota importante: Qui abbiamo usato virgolette doppie invece di virgolette singole. Ma le virgolette singole funzioneranno anche con il metodo inizia con.
11 nodi corrispondenti indicano che questo XPath ha identificato tutti gli elementi che gli ID iniziano con 'u_0_'. L'ultima parte dell'id (2 per il nome, 4 per il cognome, ecc.) Determina come identifichiamo in modo univoco l'elemento.
Possiamo usare l'attributo della funzione inizia con dove abbiamo bisogno di raccogliere il tipo simile di elementi in un elenco e sceglierne uno in modo dinamico bypassando l'argomento in un metodo generico per identificare in modo univoco l'elemento.
Si prega di seguire l'esempio di seguito per utilizzare la funzione inizia con a nostro vantaggio.
Codice di esempio:
/* Generic Method */ public void xpathLoc(String identifier){ //The below step identifies the element “First Name” uniquely when the argument is “2” WebElement E1=d1.findElement(By.xpath('//input(starts-with(@id,”u_0_”+identifier ))')); E1.sendKeys(“Test1”); /* This step enters the value of First Name as “Test 1” */ } /* Main Method */ public static void main(String() args) { xpathLoc(“2”); --- This step calls the xpathLoc() method to identify the first name. }
Nota: Eclipse potrebbe non consentire l'uso di virgolette doppie. Potrebbe essere necessario ricorrere a codice diverso per rendere XPath dinamico.
Il codice di esempio viene fornito come riferimento. Puoi migliorarlo per adattarlo a tutti gli elementi e alle operazioni che vuoi eseguire e ai valori che vuoi inserire (nel caso dei campi di testo) per rendere il codice più versatile.
Conclusione
Questo articolo spiega come possiamo utilizzare le funzioni XPath contains (), starts-with () e text () con attributi e testo per identificare in modo univoco gli elementi sulla struttura HTML DOM.
Di seguito sono riportate alcune delle osservazioni che possiamo trarre per le funzioni XPath:
- Usa il metodo 'contains ()' in XPath se conosci il testo o l'attributo visibile della costante parziale.
- Utilizzare il metodo 'inizia con ()' in XPath se si conosce il testo o l'attributo visibile della costante parziale iniziale.
- Puoi anche usare il metodo contains () e starts-with () con testo o attributo assoluto.
- Usa il metodo 'text ()' in XPath se sei a conoscenza del testo visibile assoluto.
- Non puoi utilizzare il metodo text () con il testo parziale.
- Non puoi utilizzare il metodo starts-with () se il testo iniziale non viene utilizzato in XPath o se il testo iniziale cambia costantemente.
Nel prossimo tutorial impareremo come utilizzare gli assi XPath con le funzioni XPath per migliorare ulteriormente la posizione degli elementi sulla pagina web disponibile.
=> Leggere attraverso la serie di formazione Easy Selenium.
Lettura consigliata
- Localizzatori di selenio: identificare gli elementi web utilizzando XPath in selenio (esempi)
- Gestione di tabelle Web, frame ed elementi dinamici in Selenium Script - Selenium Tutorial # 18
- Funzioni stringa Python
- Post-processore Xpath Extractor in JMeter
- Selenio Trova elemento per tutorial di testo con esempi
- Esercitazione sul selenio di cetriolo: integrazione con WebDriver di selenio Java di cetriolo
- Un tutorial completo su XPath - XML Path Language
- Introduzione a Selenium WebDriver - Selenium Tutorial # 8