如何获得孩子div id,这是直接在一个父div下的孩子?

时间:2013-02-12 04:32:15

标签: java html css css-selectors selenium-webdriver

如果我有如下所示的标记,我想从其父div中单独访问每个eigth div并使用for循环打印其id。

<div class=abc>
  <div id="parent">
    <div id="one">
       <div id=........</div>
       <div id=........</div>
    <div id="two">
       <div id=........</div>
       <div id=........</div>
    <div id="three">
       <div id=........</div>
       <div id=........</div>
    <div id="four">
       <div id=........</div>
       <div id=........</div>
    <div id="five">
       <div id=........</div>
       <div id=........</div>
    <div id="six">
       <div id=........</div>
       <div id=........</div>
    <div id="seven">
       <div id=........</div>
       <div id=........</div>
    <div id="eight">
       <div id=........</div>
       <div id=........</div>
  </div>
</div>

但是当我打印(用Java)时,8个div中的每一个下面的每个div id也都在打印。如何在一个for循环中只得到每个8个div的id? 我正在使用selenium Web Driver自动化网站。我试过这样:

List<WebElement> eightdivs = driver.findElements(By.cssSelector("#abc div:nth-child(n)"));
     for(WebElement eachdiv : eightdivs)
      {
         System.out.println(eachdiv.getAttribute("id"));
      }

1 个答案:

答案 0 :(得分:0)

选择器:

#abc div:nth-child(n)

div中选择所有#abc元素作为其父级的第n个子元素。空间是后代选择器,这意味着父级可以是#abc或其中的任何内容。这意味着所有应该选择div,因为他们是父母的第n个孩子(尽管您的父元素是.abc#parent,但不是#abc,所以你使用的选择器实际上会返回 nothing

您应该将#abc更改为#parent,对>下的儿童使用子选择器#parent,并删除:nth-child(n)部分,因为它是多余的:

List<WebElement> eightdivs = driver.findElements(By.cssSelector("#parent > div"));

for (WebElement eachdiv : eightdivs)
{
    System.out.println(eachdiv.getAttribute("id"));
}