【问题标题】:selecting elements at different levels选择不同级别的元素
【发布时间】:2015-12-01 16:28:48
【问题描述】:

之前我们在 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>
  
      

我们将有一个元素(表格)并执行 findBy 和 xpath = th[div[text()]] 来获取每个标题(是的,有些是空白的)。我们必须按顺序找到它们,因为这是下面值的顺序。现在,我们无法控制的开发人员决定将一些设置为 span 而一些不设置,如

<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>

所以我的 findBy 将不再起作用。我尝试了几个新的 xpath,包括 th[div[text()] OR div[span[text()]]]th[div[文本()] | div[span[text()]]] 但都不起作用。我在某处读到了一些关于 not(self:) 的内容,但不明白。

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

谢谢

【问题讨论】:

    标签: java selenium xpath windows-7


    【解决方案1】:

    有更深的路径。您没有将thspan 结合起来,如下所示:

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

    【讨论】:

      【解决方案2】:

      这个怎么样:

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

      上面的 XPath 将匹配包含 div 元素的 th,其中 div 包含非空文本节点(文本节点在 span 或任何其他元素内或直接在 @ 内都无关紧要987654326@).

      【讨论】:

        【解决方案3】:

        如果你对 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 &gt; TR &gt; TH &gt; DIV:找到一个 ID 为 (#) someTablsID 有一个子 (>) TR 有一个子 (>) TH 有一个子 (>) 的元素)DIV。从那里你可以抓取文本,无论它是否真的在孩子SPAN中,你都会得到它。

        CSS Selector reference

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-09
          • 2014-02-02
          • 1970-01-01
          • 2015-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多