【问题标题】:Java Selenium how to select child elements if they exist from multiple same parent elementsJava Selenium如何从多个相同的父元素中选择子元素
【发布时间】:2018-02-07 05:00:19
【问题描述】:

我正在尝试从网页上获取联系信息。每个联系人都列在info 类中。我想要的信息可以在 nadrprimary phone 类中找到。我想要做的是遍历每个info 元素,检查它是否有这 3 个子元素,如果所有 3 个都存在,则将其添加到 ArrayList。

这是一个html中基本父子关系的例子

<div class = "info">
    <h2 class = "n">Header</h2>
        <div class = "info-section info-primary">
             <p class = adr> address here </p>
        <ul class = "phones> phone# </u>
        </div> 
</div>

感谢那些帮助我的人,我即将获得我想要的子元素。但是,我需要检查并确保每个父元素都包含这些子元素,然后将它们添加到我的列表中。

例如:一个联系人可能是

<div class = "info">
    <h2 class = "n">Company Name</h2>                                         
        </div> 
</div>

由于没有列出电话或地址,我不想从网页中获取它们,并转到下一个联系人。

【问题讨论】:

  • 你可以发布示例 html 吗?
  • @socalcheesehead 我添加了父子关系的样子,有帮助吗?

标签: java selenium parent-child


【解决方案1】:

由于您需要的所有信息都按标签和类显示在 html 上,因此您只需要编写一个能够过滤给您的选择器,而不仅仅是使用 Java 代码来做到这一点。

如果没有完整的 HTML,很难想象或认为为您编写选择器的更好方法(CssSelector 或 XPath 在这里看起来仍然是更好的选择)。因此,您可以尝试以下 CssSelector,或根据需要对其进行调整:

driver.findElements(By.cssSelector(".info > h2 .info .adr, .info > h2 .phones"));

【讨论】:

  • 是的,这看起来很接近我的需要。 ">" 字符是否表示元素的路径?
  • ">" 表示元素的直子。例如,您有一个具有这种结构的 html:Html - body - div - h2 - a。这样,h2div 的直系儿子,所以我可以使用div &gt; h2 获得它。如果我们检查 body 标签,它不是 h2 元素的 imadiate parent,所以我们不能使用 ">" 来获取从 body 开始的 h2 元素 - 它不会返回任何内容(body > div > h2 应该可以)。当我们不使用“>”字符时,我们说要检查元素的所有子元素,而不仅仅是立即
  • 在修改了你的建议后,我只能得到我想要的元素。但是,有些联系人没有列出地址或电话号码,我该如何检查并避免将其添加到我的列表中?
  • 啊,我会搞砸的,但我认为现在最困难的部分已经结束,因为我可以得到我想要的信息。感谢您的所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多