【问题标题】:Selenium: How to find element by partial href?Selenium:如何通过部分 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;
     }
}

【问题讨论】:

标签: c# selenium href partial


【解决方案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&lt;IWebElement&gt; 对象,而不是 List 对象。如果您更改 linkList 定义,它应该可以工作:

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

    您可能还需要添加此using

    using System.Collections.ObjectModel;
    

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2016-01-14
      • 2019-09-30
      • 2013-04-19
      • 2018-10-20
      • 2016-05-27
      • 2023-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多