2014-10-01 32 views
2

使用C#和硒webdriver的,我能夠得到的是否通過使用下面的代碼中存在的元素的句柄:selenium webdriver(c#)ExpectedConditions - 如果一個元素不存在時如何獲得句柄?

new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login)))); 

但我怎麼能檢查相反?即一個元素不存在?

+1

想一想 - 如何驗證一些不存在的東西?你可以做的唯一檢查是檢查它的存在,等待超時,然後_assume_它不存在。 – Mrchief 2014-10-01 17:17:00

回答

2

據我所知,Selenium沒有Exists屬性,這將是非常有用的。相反,如果例如元素不存在,Selenium會拋出異常。這已經進行了測試,以確保一個網頁上不存在的元素有點有趣。

我把看到的元素是否Displayed,幷包裹在一個try-catch的方法:

bool displayed = false; 
try 
{ 
    wait = new WebDriverWait(driver, TimeSpan.FromSeconds(2)); 
    wait.Until(driver => driver.FindElement(ByLocator)); 
    displayed = driver.FindElement(ByLocator).Displayed; 
} 
catch 
{ 
} 
+3

另一種選擇是,如果盲目捕捉異常會以錯誤的方式揉搓你,那就是使用'.FindElements',如果沒有匹配該定位器的元素,將返回一個空列表。 – Arran 2014-10-01 17:57:57

+1

你可以這樣做,但是你需要測試列表的「計數」。我想到了這種方法,但決定捕捉異常是一個小工作。 – Richard 2014-10-01 18:04:22

+1

不一定是'Count',而是'.Any',這樣LINQ可以很容易地告訴你「我有任何項目」而不是「我有X個項目」。所以'.FindElements(選擇器).Any()'...但是,我知道你的意思,兩者沒有多大區別。 – Arran 2014-10-01 18:53:11

0

使用「顯示」是一個壞主意,因爲「顯示」的意思是「可見」 。如果元素將具有「顯示:無;」 CSS樣式,它會被標記爲不存在。 但是這個元素依然存在!只是不可見!

最好使用功能是這樣的:

public bool IsExist() 
{ 
    if (element == null || element.Size.Width < 1) 
    { 
      return false; 
    } 

    return true; 
} 

正如你看到它的檢查空對象和元素的寬度。 我認爲更有可能的元素將不會顯示(不可見)比它將有寬度< 1 =)

相關問題