Selenium:如何通过部分 href 查找元素?

Posted

技术标签:

【中文标题】Selenium:如何通过部分 href 查找元素?【英文标题】:Selenium: How to find element by partial href? 【发布时间】:2015-04-18 19:42:37 【问题描述】:

工作代码1:

Driver.Instance.FindElement( By.XPath("//a[contains(@href,'" + PartialLinkHref + "')]" ));

工作代码2:

ReadOnlyCollection<IWebElement> linkList = Driver.Instance.FindElements(By.TagName("a"));
for (int i = 0; i < linkList.Count ; i++)

     if (linkList[1].GetAttribute("href").Contains(PartialLinkHref))
     
          element.SetElement(linkList[i]);
          return element;
          break;
     

【问题讨论】:

什么是PartialLinkHref 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。 【参考方案1】:

您的初始选择器的问题是您缺少选择器前面的//// 告诉 XPath 搜索整个 html 树。

这应该可以解决问题:

Driver.Instance.FindElement(By.XPath("//a[contains(@href, 'long')]"))

如果要查找元素的子元素,请改用.//,例如

var element = Driver.Instance.FindElement("..some selector..")
var link = element.FindElement(".//a[contains(@href, 'long')]"))

如果你想找到包含文本而不是href属性的链接,你可以使用

Driver.Instance.FindElement(By.XPath("//a[contains(text(), 'long')]"))

【讨论】:

【参考方案2】:

我认为问题不在于您的选择器,我认为这是您尝试将 FindElements 的结果返回到的对象。

在 c# 中,FindElements 返回 ReadOnlyCollection&lt;IWebElement&gt; 对象,而不是 List 对象。如果您更改 linkList 定义,它应该可以工作:

ReadOnlyCollection<IWebElement> linkList = Driver.Instance.FindElements(By.TagName("a"));

您可能还需要添加此using

using System.Collections.ObjectModel;

【讨论】:

以上是关于Selenium:如何通过部分 href 查找元素?的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver C#通过href路径查找元素

Selenium c#如何通过JavaScript查找元素?

Python通过xpath查找元素通过selenium读取元素信息

Python + Selenium网页元素定位id 定位

如何通过表格中的部分文本查找元素,每行有多行和单元格?

Python Selenium查找随机生成的元素ID