2014-03-25 55 views
0

我有一個帶有兩個選項卡的網頁。如何只計算網頁上顯示的元素。 Selenium

當我得到一個選項卡上的元素計數它給我算兩個標籤,但不能在一個我點擊了。

所以如果我要檢查存在TAB1的,而不是TAB2元素我不能這樣做,因爲我得到兩個標籤相同的結果。

if (driver.FindElements(By.XPath("//div[contains(text(), 'Dummy Text')]")).Count != 0) 
{ 
    // Failed Test message ; 
} 

在TAB1我期待數應爲0,不顯示和TAB2計數此文本應該8,但雙方的標籤數爲8

我怎樣才能得到它們的元素計數顯示在我的頁面上,而不是在後臺?

我相信這是因爲網頁和硒對標籤的考慮兩個選項卡爲同一網頁的內容。

+1

就像一個提示,使用'.Any'而不是'.Count!= 0' ...'任何'只會迭代元素直到它找到一個,而'Count'將迭代整個列表,然後*然後*查看它是否大於0. – Arran

回答

1

Selenium將返回DOM中的所有對象,而不僅僅是那些對用戶可見的對象。

我不相信有任何XPath或CSS選擇器,它允許您選擇唯一可見的元素。我可以想象一個潛在的令人討厭的XPath,它可以確保沒有父級顯示:沒有,但不知道這是否會起作用,聽起來太可怕,也很複雜,甚至沒有考慮到。

您需要通過每個返回的元素進行迭代,並檢查「顯示」返回false。我會試圖擴展Driver類以使FindDisplayedElements方法可以爲您打包此功能。

但是這種方法可以在API調用的方面是昂貴的,如果你正在使用RemoteWebDriver。另一種方法是確保父對象被隱藏,因爲所有的孩子也會繼承該行爲

+0

感謝您給我關於使用「顯示」的想法。這在Tabs上工作,而不是找到我之前嘗試的「count」。 – sachin

相關問題