0

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

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

我从问题中选择了这个:有谁知道为什么 GetXpathCount() 在 C# 中不起作用?

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

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

4

2 回答 2

1

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

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

int example = driver.FindElements(By.XPath("(//td[contains(@sorttable_customkey, '" + Account + "')])/preceding::a[1]")).Count();
于 2013-09-23T17:50:04.380 回答
1

您正在寻找.FindElements.

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

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

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

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

所以null检查将是防御性的,但也是浪费的。更是如此,因为如果它无法获取您要求的元素(即与抛出异常相比) ,.FindElements它将只返回一个空集合。

因此,实际上,您只会得到一个NullReferenceExceptionifdriver为 null (这意味着您的整个测试都失败了)。

int numberOfElements = driver.FindElements(By.XPath("(//td[contains(@sorttable_customkey, '" + Account + "')])/preceding::a[1]")).Count;
于 2013-09-23T17:56:50.427 回答