如何将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,它将抛出一个空引用错误。
答案 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;