Come gestire la tabella Web in Selenium webdriver

Che cos'è una tabella Web? Selenium?

A Tabella Web in Selenium è un WebElement utilizzato per la rappresentazione tabellare di dati o informazioni. I dati o le informazioni visualizzate possono essere statici o dinamici. È possibile accedere alla tabella Web e ai relativi elementi utilizzando le funzioni e i localizzatori WebElement in Selenium. Un tipico esempio di tabella web sarebbero le specifiche del prodotto visualizzate su una piattaforma di e-commerce.

Lettura di una tabella Web HTML

Ci sono momenti in cui abbiamo bisogno di accedere a elementi (solitamente testi) che si trovano all'interno delle tabelle HTML. Tuttavia, è molto raro che un web designer fornisca un attributo id o nome a una determinata cella nella tabella. Pertanto non possiamo utilizzare i soliti metodi come “By.id()”, “By.name()” o “By.cssSelector()”. In questo caso, l’opzione più affidabile è accedervi utilizzando il metodo “By.xpath()”.

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 dovrebbe quindi iniziare con "//table".

Selenium Esempio di tabella Web

Passaggio 2: aggiungi gli elementi figlio

L'elemento immediatamente sotto È quindi possiamo dirlo è il “figlio” di . E anche, è il "genitore" di . Tutti gli elementi figlio in XPath vengono posizionati a destra del relativo elemento genitore, separati da una barra "/" come il codice mostrato di seguito.

Selenium Esempio di tabella Web

Passaggio 3: aggiungere i predicati

IL l'elemento ne contiene due tag. Ora possiamo dire che questi due i tag sono “figli” di . Di conseguenza possiamo dirlo è il genitore di entrambi i elementi.

Un'altra cosa che possiamo concludere è che i due gli elementi sono fratelli. I fratelli si riferiscono agli elementi figli che hanno lo stesso genitore.

Per arrivare al a cui desideriamo accedere (quello con la scritta “quarta cella”), dobbiamo prima accedere al file secondo e non il primo. Se scriviamo semplicemente “//table/tbody/tr”, accederemo al primo etichetta.

Quindi, come possiamo accedere al secondo Poi? La risposta a questa domanda è usare predicati.

I predicati sono numeri o attributi HTML racchiusi tra una coppia di parentesi quadre “[ ]” che distinguono un elemento figlio dai suoi fratelli. Dal momento che a cui dobbiamo accedere è il secondo, useremo “[2]” come predicato.

Selenium Esempio di tabella Web

Se non utilizzeremo alcun predicato, XPath accederà al primo fratello. Pertanto, possiamo accedere al primo utilizzando uno di questi codici XPath.

Selenium Tabella Web utilizzando XPath

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

Il prossimo elemento a cui dobbiamo accedere è il secondo . Applicando i principi appresi dai passaggi 2 e 3, finalizzeremo il nostro codice XPath in modo che sia come quello mostrato di seguito.

Tabella Web in Selenium utilizzando XPath

Ora che abbiamo il localizzatore XPath corretto, possiamo già accedere alla cella che volevamo e ottenere il suo testo interno utilizzando il codice seguente. Si presuppone che tu abbia salvato il codice HTML sopra come "newhtml.html" nel tuo C Drive.

Tabella Web in Selenium utilizzando XPath

public static void main(String[] args) {
	String baseUrl = "http://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 discussi sopra si applicano alle tabelle nidificate. Le tabelle nidificate sono tabelle situate all'interno di un'altra tabella. 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 "//genitore/figlio" e predicato della sezione precedente, dovremmo essere in grado di ottenere il codice XPath di seguito.

Come accedere alle tabelle nidificate in Selenium


Il codice WebDriver riportato di seguito dovrebbe essere in grado di recuperare il testo interno della cella a cui stiamo accedendo.

Accesso alle tabelle nidificate in Selenium

public static void main(String[] args) {
	String baseUrl = "http://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 è scritto in profondità nel codice HTML in modo tale che il numero da utilizzare per il predicato sia molto difficile da determinare, possiamo invece utilizzare l'attributo univoco di quell'elemento.

Nell'esempio seguente, la cella "Da New York a Chicago" si trova in profondità Mercury Codice HTML della home page di Tours.

Selenium Esempio di tabella Web che utilizza gli attributi come predicati

Selenium Esempio di tabella Web che utilizza gli attributi come predicati

In questo caso 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 to Chicago” si trova nella prima del quarto , quindi il nostro XPath dovrebbe essere come mostrato di seguito.

Selenium Esempio di tabella Web con attributi come predicati

Ricordatelo quando inseriamo il codice XPath Java, dovremmo usare il carattere di escape barra rovesciata “\” per le virgolette doppie su entrambi i lati di “270” in modo che l'argomento stringa di By.xpath() non venga terminato 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 = "http://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 il numero o l'attributo di un elemento è estremamente difficile o impossibile da ottenere, il modo più rapido per generare il codice XPath è utilizzare Inspect Element.

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

Selenium Esempio di tabella Web con attributi come predicati

Passo 1

Usa Firebug per ottenere il codice XPath.

Selenium Esempio di tabella Web con attributi come predicati

Passo 2

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

Selenium Esempio di tabella Web con attributi come predicati

Passo 3

Aggiungi alla parte rimanente del codice il prefisso "//" e copialo nel codice WebDriver.

Selenium Esempio di tabella Web con attributi

Il codice WebDriver riportato di seguito sarà in grado di recuperare con successo il testo interno dell'elemento a cui stiamo accedendo.

Selenium Esempio di tabella Web con attributi

public static void main(String[] args) {
	String baseUrl = "http://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();
}

Sommario

  • By.xpath() viene comunemente utilizzato per accedere agli elementi di WebTable in Selenium.
  • Se l'elemento è scritto in profondità nel codice HTML in modo tale che il numero da utilizzare per il predicato sia molto difficile da determinare, possiamo invece utilizzare l'attributo univoco di quell'elemento per Selenium ottieni l'elemento della tabella.
  • Gli attributi vengono utilizzati come predicati prefissandoli con il simbolo @.
  • Utilizza Ispeziona elemento per accedere a WebTable in Selenium