按属性查找元素

Posted

技术标签:

【中文标题】按属性查找元素【英文标题】: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 恤。通常,你觉得你不需要解释你的生活或你的理由,只需要一件温暖的外套。你是从这个人那里买的吗?简而言之:我认为首先我们必须尊重提出问题的人,尝试回答问题,然后才能提供其他选择。 【参考方案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']"); 

【讨论】:

以上是关于按属性查找元素的主要内容,如果未能解决你的问题,请参考以下文章

xpath按元素和属性查找节点,其中包含具有特定id的子元素

DOM_02之查找及元素操作

javascript dom查找元素常用方法

DOM_02

使用 HTML DOM 在文档中查找元素

使用 selenium 函数按名称查找元素时元素不可交互,但在通过 xpath 方法使用查找元素时有效