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')]"))
工作代码 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')]"))