【问题标题】:Selenium verify if an element is a child of another in JavaSelenium 验证一个元素是否是 Java 中另一个元素的子元素
【发布时间】:2017-01-25 01:47:30
【问题描述】:

我在尝试导航的页面中有一系列嵌套元素。下面的html是简化版:

<div>
  <h1 id="This is an id">The header is an identifier</h1>
  <table>
      <tr></tr>
      <tr>
         <ul>
           <li>
             <a>
               <span>This my target</span>
  </table>
</div>
        
        <h1>Also text</h1>
        <a>
        <span>This target has the same text<span>
         

顶部 div 的结构可以非常显着。我正在尝试使用 xpath 和 text contains 查找元素。但是,我无法验证目标确实是正确 div 内的目标。如果我每次都不知道它的确切布局,是否有办法以某种方式扩展 dom 树?

【问题讨论】:

  • 你需要识别div吗?还是带有文本的元素?
  • 我正在扫描页面以查找文本,我需要确保我找到的文本来自 div 而不是它之外。问题是 dom 布局会在运行时发生变化,所以我不会提前知道跨度在该 div 内有多远。
  • 你怎么知道哪个div是正确的?

标签: java html selenium dom


【解决方案1】:

您可以尝试使用 &gt; 操作与 CSS 选择器。

示例:要访问"This my target",您可以使用 driver.findElement(By.cssSelector("li&gt;a&gt;span"));

【讨论】:

    【解决方案2】:

    要检查 div 内的文本,您可以编写如下路径:

    //div//*[contains(text(), 'my text')]
    

    如果您需要检查特定 div 内部,则应首先识别该 div。

    例如,如果 div 具有 class="my_class" 之类的属性,则使用:

    //div[@class='my_class']//*[contains(text(), 'my text')]
    

    您可以在w3schools xpath syntax找到更多路径示例

    【讨论】:

    • 如果我不知道 [contains(text(), 'text')] 的深入程度,* 语法是否有效?
    • * 选择任何标签, // 尽可能下潜
    猜你喜欢
    • 2019-02-12
    • 2016-06-29
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多