Localizzazione di elementi

Localizzazione di un elemento

Una delle tecniche fondamentali da imparare quando si usa WebDriver è come trovare elementi nella pagina. WebDriver offre un certo numero di selectortypes incorporati, tra cui trovare un elemento tramite il suo attributo ID:

Come visto nell’esempio, la localizzazione di elementi in WebDriver viene fatta sull’oggetto istanzaWebDriver. Il metodo findElement(By) restituisce un altro tipo di oggetto fondamentale, il WebElement.

  • WebDriver rappresenta il browser
  • WebElement rappresenta un particolare nodo DOM (un controllo, ad esempio un link o un campo di input, ecc.)

Una volta che si ha un riferimento a un elemento web che è stato “trovato”, si può restringere l’ambito della ricerca usando la stessa chiamata su quell’istanza dell’oggetto:

Lo si può fare perché entrambi i tipi WebDriver e WebElement implementano l’interfaccia SearchContext. In WebDriver, questo è conosciuto come un’interfaccia basata sul ruolo.Le interfacce basate sul ruolo permettono di determinare se un’implementazione particolare del driver supporta una data caratteristica. Queste interfacce sono chiaramente definite e cercano di aderire ad avere solo un singolo ruolo di responsabilità. Potete leggere di più sul design di WebDriver e quali ruoli sono supportati in quali driver nella sezione Some Other WhichMust Be Named.

Conseguentemente, l’interfaccia By usata sopra supporta anche un certo numero di strategie di localizzazione aggiuntive. Una ricerca annidata potrebbe non essere la strategia di localizzazione del formaggio più efficace, poiché richiede l’invio al browser di due comandi separati; prima la ricerca nel DOM di un elemento con ID “cheese”, poi la ricerca di “cheddar” in un contesto più ristretto.

Per migliorare leggermente le prestazioni, dovremmo provare a usare un localizzatore più specifico: WebDriver supporta la ricerca di elementi tramite localizzatori CSS, permettendoci di combinare i due precedenti localizzatori in un’unica ricerca:

Localizzazione di più elementi

È possibile che il documento con cui stiamo lavorando abbia una lista ordinata del formaggio che ci piace di più:

<ol id=cheese> <li id=cheddar>… <li id=brie>… <li id=rochefort>… <li id=camembert>…</ol>

Poiché più formaggio è indiscutibilmente migliore, e sarebbe ingombrante dover recuperare ciascuno degli elementi singolarmente, una tecnica superiore per recuperare il formaggio è quella di fare uso della versione pluralizzata findElements(By). Questo metodo restituisce una collezione di elementi web. Se viene trovato un solo elemento, restituisce comunque una collezione (di un elemento). Se nessun elemento corrisponde al localizzatore, verrà restituita una lista vuota.

Strategie di selezione degli elementi

Ci sono otto diverse strategie di localizzazione degli elementi integrate in WebDriver:

Locator Description
nome della classe Localizza elementi il cui nome di classe contiene il valore di ricerca (i nomi di classe composti non sono ammessi)
selettore css Localizza gli elementi che corrispondono ad un selettore CSS
id Localizza gli elementi il cui attributo ID corrisponde al valore di ricerca
name Localizza gli elementi il cui attributo NAME corrisponde al valore di ricerca
link text Localizza gli elementi di ancoraggio il cui testo visibile corrisponde al valore di ricerca
Testo parziale del link Localizza gli elementi di ancoraggio il cui testo visibile contiene il valore di ricerca. Se più elementi corrispondono, verrà selezionato solo il primo.
Nome del tag Localizza gli elementi il cui nome del tag corrisponde al valore di ricerca
xpath Localizza gli elementi che corrispondono ad un’espressione XPath

Consigli sull’uso dei selettori

In generale, se gli ID HTML sono disponibili, unici e costantemente prevedibili, sono il metodo preferito per localizzare un elemento in una pagina. Tendono a lavorare molto velocemente, e rinunciano a molta elaborazione che viene con complicati attraversamenti del DOM.

Se gli ID unici non sono disponibili, un selettore CSS ben scritto è il metodo preferito per localizzare un elemento. XPath funziona bene come i selettori CSS, ma la sintassi è complicata e spesso difficile da controllare. Sebbene i selettori XPath siano molto flessibili, non sono tipicamente testati nelle prestazioni dai fornitori di browser e tendono ad essere piuttosto lenti.

Le strategie di selezione basate su linkText e partialLinkText hanno degli svantaggi, in quanto funzionano solo sugli elementi di collegamento. Inoltre, esse richiamano internamente i selettori XPath in WebDriver.

Il nome del tag può essere un modo pericoloso per individuare gli elementi. Ci sono spesso più elementi dello stesso tag presenti nella pagina, il che è utile soprattutto quando si chiama il metodo findElements(By) che restituisce una collezione di elementi.

La raccomandazione è di mantenere i vostri localizzatori il più compatti e leggibili possibile. Chiedere a WebDriver di attraversare la struttura del DOM è un’operazione costosa, e più si può restringere l’ambito della propria ricerca, meglio è.

Localizzatori relativi

Selenium 4 porta i localizzatori relativi che sono precedentemente chiamati localizzatori amichevoli. Questa funzionalità è stata aggiunta per aiutarti a localizzare elementi che sono vicini ad altri elementi.I localizzatori relativi disponibili sono:

  • above
  • below
  • toLeftOf
  • toRightOf
  • near

il metodofindElement ora accetta un nuovo metodo withTagName()che ritorna un RelativeLocator.

Come funziona

Selenium usa la funzione JavaScriptgetBoundingClientRect()per trovare gli elementi relativi. Questa funzione restituisce le proprietà di un elemento comeright, left, bottom e top.

Consideriamo il seguente esempio per capire i localizzatori relativi.

above()

Ritorna l’elemento Web che appare sopra l’elemento specificato

below()

Ritorna l’elemento Web, che appare sotto l’elemento specificato

toLeftOf()

Restituisce l’elemento WebElement, che appare a sinistra dell’elemento specificato

toRightOf()

Ritorna l’elemento WebElement, che appare a destra dell’elemento specificato

near()

Ritorna l’elemento WebElement, che è al massimo 50px lontano dall’elemento specificato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *