簡體   English   中英

Java Selenium XPath-將所有元素都放在特定元素下

[英]Java selenium xpath - getting all elements under a specific element

這是我正在搜索的簡化的HTML結構:

<div class="main">
...other stuff...
       <td class="child">44</td>
       <td class="child">59</td>
       <td class="child">11</td>
</div>
<div class="main">
...other stuff...
       <td class="child">5</td>
       <td class="child">14</td>
       <td class="child">98</td>
</div>
...this kind of structure repeats with similar numbers a few more times but with identical class names

我需要提取第一個找到的主類下的所有數字,因此我進行了查詢以搜索第一個主類,以及所有具有特定類的td。 有人可以給我一個提示我做錯了什么,因為此查詢為我提供了所有“主” div中所有“ td”類“ child”的數字:

List<WebElement> koefi = driver.findElements(By.xpath("//div[@class='main'][1]//td[@class='child']"));

我在做什么錯或者我的邏輯是對的,但是我錯過了html的其他部分,因為結構太繁瑣了,所以我沒有將其粘貼到這里。

謝謝!!

ps:我也嘗試過這種方法,但是我還是用“ child”類獲得所有td的內容,而不僅僅是第一個“ main”。

List<WebElement> koefi = driver.findElements(By.xpath("//*[1][@class='main']//td[@class='child']"));

更新:我設法解決了我的問題,方法是首先獲取.findElement函數默認找到的“ main” div的第一次出現:

WebElement element = driver.findElement(By.xpath("//*[1][@id='main']"));

然后使用.findElements函數提取“子”類:

List<WebElement> kk = element.findElements(By.className("child"));

我仍然無法弄清楚為什么.findElements不能與我的xpath一起工作,或者工作得太好,它提取每個“主要”類,而不僅提取第一個。 而且原始HTML太大了,無法粘貼到這里,所以我不想打擾你們!

一個更干凈的解決方案是首先獲取具有main類的所有div ,如下所示:

List<WebElement> allDivs = driver.findElements(By.className("main"));

然后,按照您的指定,找到所有class為childtd ,如下所示:

List<WebElement> tds = allDivs[0].findElements(By.className("child"));

之后,只需遍歷所有“ tds”並讀出您的值即可。

您在評論中說

“主要”不是直接的兄弟姐妹

因此,我懷疑您犯了與XPath中//定義相關的常見錯誤。 路徑

//div[@class='main'][1]

選擇文檔中的第一個“主”分區。 其原因是///descendant-or-self::node()/的簡寫(包括前斜杠和后斜杠),因此該路徑的實際含義是

/descendant-or-self::node()/child::div[@class='main'][1]

當它完全展開時,您會意識到[1]child::步驟有關,而不是對后代的搜索,即,您將獲得文檔中所有具有“ main”類並且是第一個元素的div元素。 div-with-class-main位於其各自的父元素下。 如果您的實際HTML是

<div>
  <div class="main">...</div>
</div>
<div>
  <div class="main">...</div>
</div>

然后XPath會選擇他們兩個(他們都是父母中的第一個)。 如果只需要文檔中的第一個,則應使用descendant::

/descendant::div[@class='main'][1]

這只會給您第一個匹配的后代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM