按属性查找元素
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 和所有的工作版本。假设我们需要找到一个属性为您可以使用 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']"))
当然,您需要将element
、attribute
和value
替换为您的真实姓名。您还可以使用通配符查找“任何元素”:
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']");
【讨论】:
以上是关于按属性查找元素的主要内容,如果未能解决你的问题,请参考以下文章