Come gestire la tabella Web in Selenium

โšก Riepilogo intelligente

Selenium La gestione delle tabelle Web consente agli ingegneri QA di leggere i dati tabellari da righe e colonne HTML utilizzando XPath, CSS e Selenium 4 localizzatori relativi. Questo articolo illustra tabelle statiche, tabelle nidificate, predicati di attributo e tecniche di intelligenza artificiale per griglie dinamiche.

  • ๐Ÿงฑ Anatomia XPath: Ogni localizzatore di tabelle inizia con //table e accede a tbody, tr e td tramite predicati.
  • ๐Ÿ” Righe dinamiche: findElements restituisce un elenco di WebElements, consentendo ai cicli di contare le righe e leggere le celle in fase di esecuzione.
  • ๐Ÿช„ Selenium 4: I localizzatori relativi sopra, sotto e vicino semplificano l'individuazione delle celle attorno a un elemento di ancoraggio noto.
  • ๐Ÿง  Localizzatori IA: Gli strumenti di auto-riparazione rilevano gli spostamenti di colonna e ripristinano l'identitร  della riga senza modifiche manuali XPath.
  • ๏ธ Ispeziona collegamento: Gli strumenti di sviluppo del browser copiano un XPath completo che รจ possibile ridurre alla prima tabella per una maggiore affidabilitร .

Selenium Esempio di XPath per una tabella Web

Che cos'รจ una tabella Web? Selenium?

A Tabella Web in Selenium รˆ un WebElement utilizzato per la rappresentazione tabellare di dati o informazioni. I dati visualizzati possono essere statici o dinamici. Le celle e le righe delle tabelle Web sono accessibili tramite i metodi del WebElement combinati con i localizzatori. Un esempio tipico รจ la griglia delle specifiche del prodotto mostrata nella pagina di un prodotto di un sito di e-commerce.

Lettura di una tabella web HTML

Spesso i tester hanno bisogno di accedere a elementi, solitamente valori di testo, all'interno di tabelle HTML. Tuttavia, i web designer raramente forniscono un attributo id o name alle singole celle. Pertanto, metodi come By.id(), By.name() o By.cssSelector() raramente funzionano. In questo scenario, l'opzione piรน affidabile รจ By.xpath() perchรฉ attraversa le relazioni padre-figlio all'interno del tag table.

Come gestire la tabella Web in Selenium

Considera il codice HTML riportato di seguito per la gestione delle tabelle web Selenium.

Come scrivere XPath per la tabella in Selenium

Noi useremo XPath per ottenere il testo interno della cella contenente il testo "quarta cella".

Come scrivere XPath per la tabella in Selenium

Passaggio 1: impostare l'elemento principale (tabella)

I localizzatori XPath in WebDriver iniziano sempre con una doppia barra "//" seguita dall'elemento padre. Dato che abbiamo a che fare con tabelle web in Selenium, l'elemento genitore dovrebbe sempre essere the etichetta. La prima porzione del ns Selenium Il localizzatore di tabelle XPath deve quindi iniziare con "//table".

Selenium Esempio di tabella Web

Passaggio 2: aggiungi gli elementi figlio

L'elemento direttamente sotto รˆ , COSรŒ รจ figlio di . Viceversa, รจ il genitore di Tutti gli elementi figli in XPath vengono posizionati a destra del loro elemento padre, separati da una barra "/", come mostrato di seguito.

Selenium Esempio di tabella Web

Passaggio 3: aggiungere i predicati

IL l'elemento contiene due etichette. Questi due i tag sono figli di , COSรŒ รจ il genitore di entrambi. I due Gli elementi sono fratelli. I fratelli e le sorelle sono elementi figli che condividono lo stesso genitore.

Per raggiungere il che contiene la โ€œquarta cellaโ€, dobbiamo prima accedere alla secondo , non il primo. Scrivendo solo โ€œ//table/tbody/trโ€ si indirizzerebbe al primo etichetta.

Quindi come accediamo al secondo ? La risposta รจ usare predicati. I predicati sono numeri o attributi HTML racchiusi tra parentesi quadre โ€œ[ ]โ€ che distinguono un elemento figlio dai suoi elementi fratelli.Poichรฉ la riga che ci serve รจ la seconda, utilizziamo โ€œ[2]โ€ come predicato.

 Selenium Esempio di tabella Web

Se omettiamo il predicato, XPath restituisce il primo fratello. Pertanto, entrambi i codici XPath seguenti raggiungeranno il primo .

Selenium Tabella Web utilizzando XPath

Passaggio 4: aggiungere gli elementi secondari successivi utilizzando i predicati appropriati

Il prossimo elemento di cui abbiamo bisogno รจ il secondo Applicando le regole dei passaggi 2 e 3, si ottiene l'XPath mostrato di seguito.

Tabella Web in Selenium utilizzando XPath

Ora che abbiamo il localizzatore XPath corretto, possiamo accedere alla cella e leggerne il testo interno utilizzando il codice seguente. Questo presuppone che tu abbia salvato la pagina HTML come "newhtml.html" nell'unitร  C.

Tabella Web in Selenium utilizzando XPath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Tabella Web in Selenium utilizzando XPath

Accesso alle tabelle nidificate

Gli stessi principi si applicano alle tabelle annidate. I tavoli annidati sono tavoli posizionati all'interno di un altro tavolo.. Di seguito รจ mostrato un esempio.

Come accedere alle tabelle nidificate in Selenium

Per accedere alla cella con il testo "4-5-6" utilizzando i concetti di genitore/figlio e predicato della sezione precedente, possiamo comporre l'XPath mostrato di seguito.

Come accedere alle tabelle nidificate in Selenium

Il codice WebDriver riportato di seguito recupera il testo interno della cella selezionata.

Accesso alle tabelle nidificate in Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

L'output seguente conferma che l'accesso alla tabella interna รจ stato eseguito correttamente.

Accesso alle tabelle nidificate in Selenium

Utilizzo degli attributi come predicati

Se l'elemento si trova in profonditร  nel codice HTML, dove contare gli elementi fratelli diventa complicato, possiamo utilizzare l'attributo unique di quell'elemento.

Nell'esempio seguente, la cella โ€œNew York to Chicagoโ€ รจ sepolta molto all'interno Mercury Home page dei tour.

Selenium Esempio di tabella Web che utilizza gli attributi come predicati

Selenium Esempio di tabella Web che utilizza gli attributi come predicati

Possiamo utilizzare l'attributo univoco della tabella (width="270") come predicato. Gli attributi vengono utilizzati come predicati prefissandoli con il simbolo @. Nell'esempio sopra, la cella โ€œNew York a Chicagoโ€ si trova nella prima del quarto , quindi il nostro XPath dovrebbe essere simile a quello mostrato di seguito.

Selenium Esempio di tabella Web con attributi come predicati

Ricorda che quando inserisci l'XPath all'interno Java, eseguire l'escape delle virgolette doppie attorno a "270" con una barra rovesciata in modo che la stringa By.xpath() non venga terminata prematuramente.

Selenium Esempio di tabella Web con attributi come predicati

Ora siamo pronti per accedere a quella cella utilizzando il codice seguente.

Selenium Esempio di tabella Web con attributi come predicati

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Esempio di tabella Web con attributi come predicati

Scorciatoia: usa Ispeziona elemento per accedere alle tabelle in Selenium

Se l'indice o l'attributo di un elemento รจ difficile da ottenere, il modo piรน rapido per generare l'XPath รจ utilizzare la funzione "Ispeziona elemento" negli strumenti per sviluppatori dei browser moderni.

Considera l'esempio seguente tratto da Mercury Home page dei tour.

Selenium Esempio di tabella Web con attributi come predicati

Fase 1

Fai clic con il pulsante destro del mouse sulla cella di destinazione e seleziona "Ispeziona" per visualizzare il percorso DOM, quindi copia l'intero XPath.

Selenium Esempio di tabella Web con attributi come predicati

Fase 2

Cerca il primo elemento genitore "tabella" ed elimina tutto alla sua sinistra.

Selenium Esempio di tabella Web con attributi come predicati

Fase 3

Anteponi una doppia barra "//" al restante XPath e copialo nel codice di WebDriver.

Selenium Esempio di tabella Web con attributi

Il codice WebDriver riportato di seguito recupera il testo interno dell'elemento annidato in profonditร .

Selenium Esempio di tabella Web con attributi

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Come contare righe e colonne in una tabella web dinamica

Le tabelle web dinamiche, come dashboard o risultati di ricerca, visualizzano un numero diverso di righe ad ogni caricamento. Per gestirle, utilizzare findElements per recuperare ogni in una List, quindi scorri per leggere ogni cella. Il frammento di codice seguente conta le righe e legge ogni cella in una tabella il cui ID รจ "customers".

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Avvolgi il localizzatore in un WebDriverWait con visibilityOfAllElementsLocatedBy quando la tabella viene caricata tramite AJAX. Ciรฒ impedisce riferimenti a elementi obsoleti su griglie con rendering lento.

Selenium 4 Localizzatori relativi per le tabelle web

Selenium 4 hanno introdotto localizzatori relativi che individuano gli elementi in base alla posizione visiva. Sono utili quando gli indici XPath si interrompono perchรฉ le righe vengono riordinate. I metodi above(), below(), toLeftOf(), toRightOf()e near() tutti accettano un WebElement di tipo anchor.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

I localizzatori relativi rimangono leggibili anche quando l'ordine delle colonne cambia. Abbinali ad attese esplicite per ottenere i risultati migliori nelle pagine basate sui dati.

Strumenti di intelligenza artificiale per la gestione di tabelle web dinamiche

Le piattaforme di test assistite dall'IA riducono la manutenzione dei localizzatori su griglie che cambiano spesso. Strumenti come Testim, Mable Funzionalizza Utilizzano la visione artificiale e i modelli DOM per rilevare gli spostamenti di colonna e i localizzatori di autoriparazione. Identificano le righe in base al testo dell'intestazione e alla similaritร  delle celle, anzichรฉ tramite indici XPath fissi.

Per puro Selenium progetti, biblioteche come Healenium Avvolgi WebDriver e riscrivi i localizzatori non funzionanti in fase di esecuzione. Combina questi strumenti con WebDriverWait per mantenere stabili gli script delle tabelle dinamiche senza dover riscrivere i selettori dopo ogni modifica dell'interfaccia utente.

Sintesi

  • By.xpath() รจ il modo piรน affidabile per accedere alle celle di una tabella Web in Selenium.
  • Se contare i fratelli risulta difficile, si puรฒ utilizzare un attributo univoco come predicato, preceduto dal simbolo @.
  • findElements restituisce una lista che supporta il conteggio delle righe nelle tabelle dinamiche.
  • Selenium 4 localizzatori relativi (sopra, sotto, vicino) riducono la dipendenza da XPath posizionale.
  • La funzione "Ispeziona elemento" negli Strumenti per sviluppatori accelera la generazione di XPath per le celle annidate in profonditร .
  • Strumenti di intelligenza artificiale come TestimLocalizzatori autoriparanti di Mabl e Healenium per griglie variabili.

DOMANDE FREQUENTI

Una tabella Web in Selenium รจ un WebElement che visualizza dati tabellari in righe e colonne. Puรฒ essere statico o dinamico. I tester accedono alle sue celle tramite metodi WebElement combinati con localizzatori XPath o CSS, poichรฉ le tabelle raramente espongono ID univoci sulle singole celle.

La maggior parte delle celle di una tabella non possiede un attributo id o name, quindi By.id() e By.name() non funzionano. XPath attraversa la struttura padre-figlio degli elementi table, tbody, tr e td, il che lo rende il localizzatore di celle piรน affidabile.

Utilizzare driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€)).size() per contare le righe e //table[@id='tbl']//tr[1]/td per il conteggio delle colonne. Il metodo findElements restituisce una List che supporta size() per totali di riga rapidi.

Selenium 4 ha introdotto i localizzatori relativi come above(), below(), toLeftOf(), toRightOf() e near(). Questi aiutano a individuare le celle posizionate attorno a una cella di ancoraggio nota, il che รจ utile quando gli indici XPath cambiano nelle tabelle dinamiche.

Scorri le righe con findElements, quindi leggi ogni cella con getText(). Crea l'XPath dinamicamente utilizzando la concatenazione di stringhe, ad esempio //tr["+i+"]/td["+j+"]. Attendi il caricamento della tabella con WebDriverWait prima di leggere i valori.

Sรฌ. Strumenti basati sull'intelligenza artificiale come TestimMabl e Functionize utilizzano la visione artificiale e i modelli DOM per rilevare i confini delle tabelle, dedurre le intestazioni e ripristinare automaticamente i localizzatori quando le colonne si spostano. Ciรฒ riduce la manutenzione di XPath per le dashboard dinamiche.

I modelli di intelligenza artificiale apprendono gli schemi delle righe dalle esecuzioni precedenti e abbinano le celle utilizzando la similaritร  del testo anzichรฉ indici fissi. Quando una riga viene spostata o una colonna viene riordinata, il localizzatore basato sull'IA trova comunque l'obiettivo senza riscrivere l'XPath.

findElement restituisce un singolo WebElement e genera un'eccezione NoSuchElementException se mancante. findElements restituisce una List e restituisce un elenco vuoto se non viene trovata alcuna corrispondenza. Utilizzare findElements quando si cercaping sulle righe o sulle colonne della tabella.

Riassumi questo post con: