2013-03-03 12 views
5

Próbuję poruszać się po stronie internetowej przy pomocy xpath i otrzymuję mieszane wyniki. To właśnie używam:Selenium WebElement xpath Java

driver.findElement(By.xpath("//div[contains(@class, 'x-grid3-cell-inner x-grid3-col-0')]")); 

To faktycznie działa świetnie, ale problem Używam do tego w ten sposób:

<div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on">92300</div> 
<div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on">92475</div> 
<div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on">92476</div> 
<div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on">92301</div> 
<div class="x-grid3-cell-inner x-grid3-col-0" unselectable="on">92474</div> 

Kiedy biegnę, że XPath w moim teście Selen zawsze dotrzesz pierwszy div . Jak mogę edytować swoją xpath, aby pobrać 4. div (92301) lub inny div, który nie jest pierwszym na liście?

Odpowiedz

8

Użyj tego XPath (//div[contains(@class, 'x-grid3-cell-inner x-grid3-col-0')])[4], aby uzyskać 4 thdiv.

Aby znaleźć div który zawiera 92301 tekst, użyj tego XPath:

//div[contains(text(), '92301')] 
+0

Dziękuję Kirill! Działa to świetnie, ale czasami dane wstawiane przez użytkownika przed lub po tym, czego szukam, co może zmienić pozycję. Czy istnieje inny sposób na znalezienie elementu div za pomocą 92301, jeśli przed nim zapisano kilka nowych elementów div? – cbohannon

+0

@ user2055841, zaktualizowałem swoją odpowiedź. –

3

można użyć albo WebElement.findElements():

driver.findElements(By.xpath(...)).get(3) 

lub modyfikować XPath do:

driver.findElement(By.xpath("(//div[contains(@class, 'x-grid3-cell-inner x-grid3-col-0')])[4]")); 
+0

Dzięki, mantrid. To jest bardzo pomocne. Daje mi to, o co mi chodzi. Będę również szukał bardziej dynamicznego sposobu robienia tego, ponieważ to, co robię, może nie zawsze być na pozycji 4. – cbohannon

Powiązane problemy