使用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