【问题标题】:C# Selenium Webdriver Count Xpath Elements / null checkC# Selenium Webdriver Count Xpath Elements / null 检查
【发布时间】:2013-09-28 16:50:50
【问题描述】:

如何将 xpath 的计数转换为 int?

int example = driver.FindElement(By.XPath("(//td[contains(@sorttable_customkey, '" + Account + "')])/preceding::a[1]")).Count;

我从问题中选择了这个:Does anyone know why GetXpathCount() doesn't work in C#?

我似乎无法让它工作,我尝试将上面的内容转储到一个列表并计算列表,但这也不起作用。

也有点离题,但有没有办法检查 driver.FindElement(By.XPath("exp")) == null 吗?因为如果它 dose = null 它会抛出一个空引用错误。

【问题讨论】:

  • 我似乎无法让它工作”是一个非常糟糕的问题描述。如果你需要帮助,你必须描述问题。

标签: c# xpath selenium webdriver


【解决方案1】:

如果您对多个元素使用相同的定位器,则可以使用FindElements

它将返回 ReadOnlyCollection,使用它可以获得count 个元素:

int example = driver.FindElements(By.XPath("(//td[contains(@sorttable_customkey, '" + Account + "')])/preceding::a[1]")).Count();

【讨论】:

    【解决方案2】:

    您正在寻找.FindElements

    毕竟,看看你正在使用的方法名称:FindElement。 (没有复数)

    因此,计数将始终为 1 ;)

    查看.FindElements,这将有一个.Count 属性(因为它本质上是一个返回的List)。

    至于空值检查,这取决于你,但它是不必要的。 Selenium 的源代码显示它永远不会从那里返回 null。它要么是您要求的元素,要么如果获取它有困难则抛出异常。

    所以null 过牌是防御性的,但也是浪费的。更重要的是,如果 .FindElements 在获取您要求的元素时遇到问题(即与引发异常相比),它只会返回 一个空集合

    因此,实际上,如果driver 为空(这意味着您的整个测试失败),您只会得到NullReferenceException

    int numberOfElements = driver.FindElements(By.XPath("(//td[contains(@sorttable_customkey, '" + Account + "')])/preceding::a[1]")).Count;
    

    【讨论】:

    • 我以为我昨晚尝试了这个并且它抛出了一个错误,尽管我连续编码了 12 个小时,所以我可以做其他错误的事情。不管怎样,谢谢,也谢谢你,Santoshsarma 都是正确的。
    • "因此,计数将始终为 1" 更糟糕的是,没有 FindElement().Count 属性,因为 FindElement() 返回的不是集合 :-)
    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多