如何在Selenium Webdriver,C#下测试页面上是否存在元素

时间:2013-04-16 21:05:22

标签: c# selenium-webdriver

我搜索了无数的网页,并没有得到我的问题的好答案。我使用C#在Selenium 2.30上。

我试过

if (browser.FindElement(By.XPath("xpath")).Displayed)

我试过

if (browser.FindElements(By.XPath("xpath")).Count !=0)

IWebElement element = browser.FindElement(By.XPath("xpath"));
if (element.Displayed == true)

它们仅在元素存在时才起作用,但如果不存在,它将拉出异常。但这不是必需的例外,我在else {}语句中有一些东西来处理它,我不希望webdriver在第一点就阻止我。

我现在正在做的是

IWebElement element = null;
try
{
   element = browser.FindElement(By.XPath("xpath"));
}
catch
{

}
if (element != null)

这种方式到目前为止有效,但我不认为这是最好的解决方案。如果有人能给我一个更好的方法,我很感激。

1 个答案:

答案 0 :(得分:1)

您这样做的方式是可以接受的,但有时您会尝试在执行先前操作(例如导航到某个页面)后运行此操作,并且通常最好给出超时值并使用以下WebDriverWait方法:

WebDriverWait _wait = new WebDriverWait(_driver, new TimeSpan(0, 0, timeout));
element = _wait.Until(x => x.FindElement(By.XPath(searchAttribute.attributeValue)));

这允许你等到页面上的元素存在到超时值(我在我测试的应用程序上使用5秒)。但是,很简单,您可以使用if(element == null)的代码,然后找不到它。如果您使用WebDriverWait,如果您不想在超时后抛出异常,则必须捕获异常。