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;