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

Selenium: How to find element by partial href?

工作代码 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;
     }
}

我不认为问题出在您的选择器上,我认为这是您尝试 return FindElements 的结果的对象。

在 c# 中,FindElements return 是一个 ReadOnlyCollection<IWebElement> 对象,而不是 List 对象。如果您更改 linkList 定义,它应该可以工作:

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

您可能还需要添加此 using:

using System.Collections.ObjectModel;

初始选择器的问题是您缺少选择器前面的 //// 告诉 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')]"))

如果要查找包含 text 而不是 href 属性的 link,可以使用

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