2014-04-08 14 views
5

Nel mio progetto WebDriver, ho pianificato di aggiungere Jsoup per ottenere "padre" e "fratelli" e poche altre funzionalità. Devo trovare un elemento tramite Jsoup e fare clic sul suo genitore usando WebDriver. Ciò significa che ho bisogno di convertire un oggetto elemento Joup in oggetto WebElement. Per favore fatemi sapere come posso farlo, se questo è fattibile.

Se non è possibile integrare Jsoup e WebDriver in questo modo, si prega di discutere su come posso ottenere genitori e tutti utilizzando WebDriver.
Inoltre, è possibile elencare TUTTI i possibili elementi presenti in un particolare WebElement?Come integrare Jsoup con WebDriver?

risposta

5

È piuttosto interessante che stiamo seguendo un approccio simile, integrando JSoup e Selenium WebDriver. Riesco a capire il tuo problema in particolare trattando un sito web dinamico basato su qualche framework Javascript che non ha ID o attributi stabili.

La nostra soluzione si presenta come la seguente, e, auspicabilmente, potrebbe essere un consiglio per voi:

  • webDriver.getPageSource() per ottenere il codice HTML corrente
  • uso JSoup per analizzare questo sorgente HTML, e leva selettore Jsoup (che è molto più potente di selenio) per individuare l'elemento di destinazione
  • ottenere genitori o fratelli di questo elemento
  • scrivere una funzione di iterazione per ottenere elemento xPath, come // corpo/div [2]/modulo [1]/input [3]
  • webDriver.findElement (By.xpath (...)) per individuare elemento in context selenio

CURA

L'idea della funzione di iterazione è:

  • prima cosa controllare le tag del tuo nodo genitore, se è il corpo, allora l'iterazione termina
  • in caso contrario, quindi usa getSiblings per verificare l'indice del nodo tra tutti i nodi con lo stesso tag, ad esempio il 3 ° div, quindi equivale a div [3]
  • iterare al nodo padre, e fare le stesse procedure

Una volta che il XPath del nodo figlio, e il nodo genitore, basta sostituire genitore nodo XPath per essere stringa vuota all'interno XPath nodo figlio, finalmente può ottenere il relativo xpath.

+0

@SmartekWorks .. Grazie per il vostro consiglio. È abbastanza simile a quello che pensavo inizialmente. Ma il problema che stavo affrontando è determinare l'xPath relativo dall'elemento Jsoup. Potete per favore aiutarmi a condividere i tuoi pensieri su come scrivere una funzione di iterazione per ottenere xPath relativo? –

+0

@AbhishekMukheree per favore controlla le mie risposte modificate – SmartekWorks

+0

@SmartekWorks .. Grazie mille per l'idea. Durante l'applicazione di questo nel mio progetto, ho trovato una difficoltà in più, quando parte di una pagina html. JSoup analizza tutto (inclusa la parte nascosta), ma WebDriver non considera la parte nascosta. Quindi, a volte capita che xPath, determinato da JSoup, non sia valido per WebDriver, poiché ci sono anche alcune parti nascoste. E type = "hidden" non è nemmeno presente nella maggior parte dei casi. Hai mai avuto problemi simili? –

0

È possibile utilizzare i selettori XPath per selezionare gli elementi principali e secondari
Domande correlate
Select parent using xpath
XML xpath, get the parent element till a specific element
Getting child nodes using xpath?

+0

Come faccio a determinare xPath di un elemento utilizzando Jsoup, in modo che possa eseguire l'operazione di WebDriver utilizzando quel xPath? Per aggiungere altro, la pagina Web che sto utilizzando contiene elementi di tipo dojo-dati e i valori degli attributi cambiano ogni 3 secondi di aggiornamento automatico. –

+1

@AbhishekMukherjee: Havent ha provato Jsoup ma è possibile utilizzare direttamente Xpath con il webdriver per identificare il genitore/figlio – xyz

+0

@Karna .. Il problema principale del mio progetto è che non è possibile un xPath predeterminato. Sta cambiando di tanto in tanto. Quindi devo attraversare usando Jsoup. Il problema è: anche se ottengo l'elemento indented usando Jsoup, non posso usare quell'elemento come WebElement per applicare le API di WebDriver. –

0

Cosa sull'esecuzione di findElements con XPath: .//* sul vostro elemento particolare? Inoltre, esaminare xpath parent::* e following-sibling::*. Per il caso particolare capisco, non c'è bisogno di Jsoup.

+0

@Erki .. Il problema principale del mio progetto è che non esiste un xPath predeterminato. Sta cambiando di tanto in tanto. Quindi devo attraversare usando Jsoup o qualsiasi altro modo. Il problema è: anche se ottengo l'elemento indented usando Jsoup, non posso usare quell'elemento come WebElement per applicare le API di WebDriver. –