2013-09-23 74 views
0

如何將xpath的計數轉換爲int? Does anyone know why GetXpathCount() doesn't work in C#?C#Selenium Webdriver計數Xpath元素/ null檢查

我似乎無法得到它的工作,我嘗試傾銷上面的列表和計數列表中,但這樣做也行不通:

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

我從問題就撿起。

也排序主題,但有沒有辦法來檢查是否driver.FindElement(By.XPath(「exp」))== null?因爲如果dose = null,它會拋出一個空引用錯誤。

+0

「_I似乎無法讓它工作_」是一個相當差的問題描述。如果你需要幫助,你必須描述這個問題。 –

回答

1

您正在尋找.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; 
+0

我以爲昨晚我嘗試了這個,它是在拋出一個錯誤,雖然我編碼了12個小時,所以我可以完成其他錯誤。無論如何感謝和感謝你以及Santoshsarma都是正確的。 – Sam

+0

「_因此,count總是1_」更糟糕的是,沒有FindElement()。Count屬性,因爲FindElement()返回的不是一個集合:-) –

1

如果您有多個元素的相同定位符,則可以使用FindElements

它將返回ReadOnlyCollection,使用,你可以得到元素count

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