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