无法抓取动态表中的元素,其中我们只有 td 标签的文本



我有一个表,其数据根据添加和删除的内容而变化。表中有多个列名称、数量、类型、状态。我所拥有的只是名称文本,我需要找到具有该名称的行的状态字段。

问题是具有相同类名的html标签,我尝试抓取父级和兄弟姐妹,一切都失败了。请在下面找到表格的 html 结构:

    <table>
    <thead> </thead>
    <tbody>
    <tr> 
       <td class = "c1"> 
         <a class = txtclass> text1  </a>
       </td>
       <td class = "c1"> Qty </td>
       <td class = "c2"> type </td>
       <td class = "c3"> 
         <div id = "1" class = "status1"> /div>
       </td>
    </tr>
    <tr> 
        <td class = "c1"> 
           <a> text2  </a>
        </td>
        <td class = "c1"> Qty </td>
        <td class = "c2"> type </td>
        <td class = "c3"> 
            <div id = "2" class = "status2"> /div>
        </td>
   </tr>
   </tbody>
   </table>

所以我所拥有的只是 text2,我需要获取该行的状态。

我该如何继续。我试过了

  List<WebElement> ele = driver.findElements(By.xpath("//*[@class =     'txtClass'][contains(text(),'text')]"));
        for(WebElement el1:ele)
        {
            WebElement parent = el1.findElement(By.xpath(".."));
            WebElement child1= parent.findElement(By.xpath("//td[4]/div"));
        System.out.println(child1.getAttribute("class"));
        }

这给了我表中第一行状态的类名。和我试过一样

  WebElement child = el1.findElement(By.xpath("//following-sibling::td[4]/div[1]"));

我得到了表中第一行的相同类名。我想由于 的类名对于所有子元素都是相同的,它将始终抓取第一行元素,而不是从行中获取元素。

请帮助我被困在这里很长时间,如果您需要任何其他详细信息,请告诉我。

您正在尝试使用 -

el1.findElements(By.xpath("//following-sibling::td[4]/div[1]"));

它将存在的所有元素与页面中的格式td[4]/div[1]匹配并检索第一个匹配项。

您必须使用以下xpath来抓取status根据您的文本div下呈现的内容。

driver.findElement(By.xpath(".//tr/td[contains(.,'text1')]/following-sibling::td[3]/div")).getAttribute("class");

如果您需要提取所有状态,请尝试以下代码-

 List<WebElement> allElements = driver.findElements(By.xpath(".//tr/td[contains(.,'text2')]/following-sibling::td[3]/div"));
 for(WebElement element:allElements)
 {
    String status = element.getAttribute("class");
    System.out.println(status);
}

我认为这种方法适合您:

获取所有包含属性状态的div 元素:

List<WebElement> listChildStatus = driver.findElements(By.xpath(".//tr[.//a[contains(.,'text')]]//div"));

获取包含属性状态的特定div 元素:

WebElement childStatus = driver.findElement(By.xpath(".//tr[.//a[contains(.,'{TEXT}')]]//div"));

{TEXT} = 您拥有的文本值

您需要找到带有文本的元素,向上一级,然后获取具有状态的同级

WebElement statusElement = driver.findElement(By.xpath(".//td[a[contains(text(),'text2')]]/following-sibling::td[3]/div"));
String status = statusElement.getAttribute("class"); // will be status2

如果你不想在索引上中继,你可以使用 last() 来查找最后一个同级

WebElement statusElement = driver.findElement(By.xpath(".//td[a[contains(text(),'text2')]]/following-sibling::td[last()]/div"));

相关内容

最新更新