Selenium:如何通过部分 href 查找元素?
Posted
技术标签:
【中文标题】Selenium:如何通过部分 href 查找元素?【英文标题】:Selenium: How to find element by partial href? 【发布时间】:2015-04-18 19:42:37 【问题描述】:工作代码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;
【问题讨论】:
什么是PartialLinkHref
?
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
【参考方案1】:
您的初始选择器的问题是您缺少选择器前面的//
。 //
告诉 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')]"))
【讨论】:
【参考方案2】:我认为问题不在于您的选择器,我认为这是您尝试将 FindElements
的结果返回到的对象。
在 c# 中,FindElements
返回 ReadOnlyCollection<IWebElement>
对象,而不是 List
对象。如果您更改 linkList
定义,它应该可以工作:
ReadOnlyCollection<IWebElement> linkList = Driver.Instance.FindElements(By.TagName("a"));
您可能还需要添加此using
:
using System.Collections.ObjectModel;
【讨论】:
以上是关于Selenium:如何通过部分 href 查找元素?的主要内容,如果未能解决你的问题,请参考以下文章
Selenium WebDriver C#通过href路径查找元素
Selenium c#如何通过JavaScript查找元素?