【问题标题】:Can I get a web element inside another web element?我可以在另一个 Web 元素中获取一个 Web 元素吗?
【发布时间】:2023-03-15 19:57:01
【问题描述】:

哟,我听说你喜欢网络元素...

所以我想知道是否可以按类、id 或任何其他选择器找到 Web 元素,然后在其中按类等找到另一个元素。

背景

我有一些容器,其 id 包含我想按类放入列表中的元素集合,问题是如果我尝试 getElements(By.class) 它会拾取一些我不想要的元素之外的元素.

已尝试

我试过用XPATH来做这件事,但感觉像硬编码一样脏。由于这些测试应该是健壮的,我认为必须有更好的方法。

这段代码捕获了我想要的元素之外的元素

public double checkStars(){
    List<WebElement> starsOn = driver.findElements(By.className("on"));
    return starsOn.size();
}

问题

在将搜索限制在另一个 Web 元素内时,我可以选择一个 Web 元素吗?如何完成?

【问题讨论】:

    标签: java selenium testing


    【解决方案1】:

    是的。您可以在元素内找到另一个元素,前提是该元素是该元素的子元素。像这样:

    WebElement eleParent=driver.findElement(Locator);
    WebElement eleChild=eleParent.findElement(Locator);
    

    如果您的定位器是 XPath,请小心!!!

    【讨论】:

    • 这真的很酷,所以我可以抓取页面的一部分,然后仅在其中查找元素集合。 :) 欢呼 Mrunal,简洁的回答
    • 欢迎您。如果这解决了您的问题,您可以接受它作为答案吗?以便其他人也能快速找到。
    【解决方案2】:

    你应该看看 CSS 选择器。这通常是完成此任务的更快方法。这是 google.com 页面的一个简单示例。它会抓取右上角的两个链接(A 标签),Gmail 和图片。

    FirefoxDriver driver = new FirefoxDriver();
    driver.get("https://www.google.com");
    List<WebElement> links = driver.findElements(By.cssSelector("#gbw a.gb_P"));
    for (WebElement link : links)
    {
        System.out.println(link.getText().trim());
    }
    

    此 CSS 选择器 #gbw a.gb_P 读取为查找具有 id (#) gbw 的元素,该元素具有带有类 (.) gb_P 的后代 A 标记。 CSS 选择器是非常强大的工具,可以做相当复杂的事情,而且比 XPath 更快、更不脆弱(通常)。

    CSS Selector reference

    【讨论】:

    • 感谢 JeffC +1 的简洁回答。我的问题是我在页面上有一些具有相同 css 选择器的项目,这不会完全抓住它们。但对于有权修改 html 和 css 的人来说仍然是一个很好的答案。作为测试人员,我无法改变它。
    • 如果您可以使用已接受的答案,即使用两个不同的定位器,您很可能可以将此答案与一个包含两个定位器的 CSS 选择器一起使用,这就是我试图传达的内容。如果您提供一些 HTML 和您正在寻找的元素,我可以帮助您构建一个...如果您此时对此感兴趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多