C#Selenium Webdriver计数Xpath元素/ null检查

时间:2013-09-23 17:21:56

标签: c# xpath selenium webdriver

如何将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?因为如果它剂量= null,它将抛出一个空引用错误。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您正在寻找.FindElements

毕竟,请查看您正在使用的方法名称: FindElement 。 (无复数)

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

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

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

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

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

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