选择不同级别的元素

时间:2015-12-01 16:28:49

标签: java selenium xpath windows-7

以前我们在div级别有一个包含列名的表,如下所示:



<TABLE id = 'someTablsID'>
  <TR>
    <TH>
      <DIV>&NBSP</DIV>
    </TH>
    <TH>
      <DIV>Last Name</DIV>
    </TH>
    <TH>
      <DIV>First Name</DIV>
    </TH>
    <TH>
      <DIV>Age</DIV>
    </TH>
  </TR>
</TABLE>
  
      
&#13;
&#13;
&#13;

我们会有一个元素(表)并做一个 findBy with xpath = th [div [text()]]得到每个标题(是的,有些是空白的)。我们必须按顺序找到它们,因为这是下面值的顺序。现在,我们无法控制的开发人员决定使用span而不是一些,如

&#13;
&#13;
<TABLE id = 'someTablsID'>
  <TR>
    <TH>
      <DIV>&NBSP</DIV>
    </TH>
    <TH>
      <DIV>
        <SPAN>Last Name</SPAN>
      </DIV>
    </TH>
    <TH>
      <DIV>
        <SPAN>First Name</SPAN>
      </DIV>
    </TH>
    <TH>
      <DIV>
        <SPAN>Age</SPAN>
      </DIV>
    </TH>
  </TR>
</TABLE>
&#13;
&#13;
&#13;

所以我的findBy将不再工作了。我尝试了几个新的xpaths,包括 th [div [text()] OR div [span [text()]]] th [div [text()] | div [span [text()]]] 但都没有奏效。我在某处读过一些关于不(自我:)但却不理解的事情。

表达我需要的xpath的好方法是什么?

谢谢

3 个答案:

答案 0 :(得分:0)

有更深的道路。您未将thspan合并,如下所示:

th[div[span[text()]]]

答案 1 :(得分:0)

这个怎么样:

th[div[.//text()[normalize-space()]]]

上述XPath将匹配包含th元素的div div包含非空文本节点(文本节点位于span内或任何其他元素或直接在div)内。

答案 2 :(得分:0)

如果您对CSS选择器没问题,可以使用下面的代码打印文本。

List<WebElement> elements = driver.findElements(By.cssSelector("#someTablsID > tr > th > div"));
for (WebElement element : elements)
{
    System.out.println(element.getText().trim());
}

我发现自己更容易使用CSS选择器... YMMV。

读取CSS选择器#someTablsID > TR > TH > DIV:查找具有ID(#)someTablsID的元素,该元素具有子(&gt;)TR,其中包含子(&gt;){ {1}}有一个孩子(&gt;)TH。从那里你可以获取文本,无论它是否真正在孩子DIV中,你都会得到它。

CSS Selector reference