使用C#和硒webdriver的,我能夠得到的是否通過使用下面的代碼中存在的元素的句柄:selenium webdriver(c#)ExpectedConditions - 如果一個元素不存在時如何獲得句柄?
new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login))));
但我怎麼能檢查相反?即一個元素不存在?
使用C#和硒webdriver的,我能夠得到的是否通過使用下面的代碼中存在的元素的句柄:selenium webdriver(c#)ExpectedConditions - 如果一個元素不存在時如何獲得句柄?
new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut)).Until(ExpectedConditions.ElementExists((By.Id(login))));
但我怎麼能檢查相反?即一個元素不存在?
據我所知,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
{
}
另一種選擇是,如果盲目捕捉異常會以錯誤的方式揉搓你,那就是使用'.FindElements',如果沒有匹配該定位器的元素,將返回一個空列表。 – Arran 2014-10-01 17:57:57
你可以這樣做,但是你需要測試列表的「計數」。我想到了這種方法,但決定捕捉異常是一個小工作。 – Richard 2014-10-01 18:04:22
不一定是'Count',而是'.Any',這樣LINQ可以很容易地告訴你「我有任何項目」而不是「我有X個項目」。所以'.FindElements(選擇器).Any()'...但是,我知道你的意思,兩者沒有多大區別。 – Arran 2014-10-01 18:53:11
使用「顯示」是一個壞主意,因爲「顯示」的意思是「可見」 。如果元素將具有「顯示:無;」 CSS樣式,它會被標記爲不存在。 但是這個元素依然存在!只是不可見!
最好使用功能是這樣的:
public bool IsExist()
{
if (element == null || element.Size.Width < 1)
{
return false;
}
return true;
}
正如你看到它的檢查空對象和元素的寬度。 我認爲更有可能的元素將不會顯示(不可見)比它將有寬度< 1 =)
想一想 - 如何驗證一些不存在的東西?你可以做的唯一檢查是檢查它的存在,等待超時,然後_assume_它不存在。 – Mrchief 2014-10-01 17:17:00