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

时间:2015-02-17 23:04:19

标签: c# selenium href partial

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

在c#中,FindElements返回ReadOnlyCollection<IWebElement>个对象,而不是List个对象。如果您更改linkList定义,则应该有效:

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

您可能还需要添加此using

using System.Collections.ObjectModel;