2014-10-01 68 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 =)

相关问题