【问题标题】:Find element by attribute按属性查找元素
【发布时间】:2014-12-05 21:45:50
【问题描述】:

我正在尝试查找具有属性的元素。好吧,我可以在 Selenium 中找到具有 Id、tagName、Xpath 和所有其他预定义方法的元素。但是,我正在尝试编写一个专门返回 WebElement 的方法,给定属性名称和值作为输入。

List<WebElement> elements = webDriver.findElements(By.tagName("Attribute Name"));
for(WebElement element : elements){
    if(element.getText().equals("Value of Particular Attribute")){
        return element;
    }
    else{
        return null;
    }
}

假设 XPath 不是一个选项,还有其他更好的方法吗?

【问题讨论】:

  • 您能否添加一个 HTML 示例来说明您要匹配的内容?
  • 为什么 XPath 没有帮助?
  • 您的问题似乎是关于匹配属性,但您的示例是匹配元素的文本,与属性无关。
  • 好吧,这个应用程序有时会被非开发人员使用,如果他们无法追踪 XPath,我需要他们使用任何可用于特定元素的属性。我已经有了 find by - Id、CSS、tagName、XPath 和所有的工作版本。假设我们需要找到一个属性为 且值为 的图像,并假设没有提到 Id、类名等(我试图找出最坏的情况),如何获取元素网址和网址?
  • 我相信“假设 XPath 不是一个选项”是一个有效的假设。答案经常批评问题实际上不回答。就像你在夏天想买一件暖和的夹克,而销售人员质疑你为什么这样做,并试图卖给你一件薄 T 恤。通常,你觉得你不需要解释你的生活或你的理由,只需要一件温暖的外套。你是从这个人那里买的吗?简而言之:我认为首先我们必须尊重提出问题的人,尝试回答问题,然后才能提供其他选择。

标签: java selenium selenium-webdriver


【解决方案1】:

您可以使用 CSS 轻松完成这项任务。

公式为:

element[attribute='attribute-value']

如果有的话,

<a href="mysite.com"></a>

您可以通过以下方式找到它:

By.cssSelector("a[href='mysite.com']");

这可以使用任何可能的属性。

此页面提供了有关如何制定有效的 css 选择器以及匹配它们的属性的良好信息:http://ddavison.io/css/2014/02/18/effective-css-selectors.html

【讨论】:

  • element[attribute='attribute-value'] 按预期工作,谢谢!
【解决方案2】:

我不明白你的要求:

假设 XPath 不是一个选项...

如果这只是您的一个不正确假设,那么 XPath 是完美选项!

webDriver.findElements(By.xpath("//element[@attribute='value']"))

当然,您需要将elementattributevalue 替换为您的真实姓名。您还可以使用通配符查找“任何元素”:

webDriver.findElements(By.xpath("//*[@attribute='value']"))

【讨论】:

  • 投了反对票,因为该问题明确声明“Xpath 不是一个选项”。所以,答案不符合问题的要求。
  • @AlmirCampos 不过,我发现答案很有用。我问自己:这个答案对我有帮助吗,它会帮助其他人吗?对我来说,答案是肯定的。
  • 适用于非标准元素,正是我不知道我需要的:const arasUserMenuDD = await driver.findElements(By.xpath("//aras-dropdown[@data-id='com.aras.innovator.cui_default.mwh_user_menu']"));`
【解决方案3】:

改用 CSS 选择器:

List<WebElement> elements = webDriver.findElements(By.cssSelector("*[attributeName='value']"));

编辑:CSS 选择器代替 XPath

【讨论】:

    【解决方案4】:

    根据文档:

    By.id 按 ID 属性定位元素。此定位器使用 CSS 选择器 *[id='$ID']不是 document.getElementById。其中 id 是要搜索的 ID

    所以您可以使用下面的代码来搜索具有任何给定属性作为 ID 和值的 DOM 元素

    By.id("element[attribute='attribute-value']"); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多