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

工作代码1:

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

工作代码2:

 ReadOnlyCollection 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; } } 

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

我不认为问题是你的选择器,我认为这是你试图将FindElements的结果返回给的对象。

在c#中, FindElements返回一个ReadOnlyCollection对象,而不是List对象。 如果您更改了linkList定义,它应该工作:

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

您可能还需要using以下方法添加:

 using System.Collections.ObjectModel;