我搜索了无数的网页,并没有得到我的问题的好答案。我使用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)
这种方式到目前为止有效,但我不认为这是最好的解决方案。如果有人能给我一个更好的方法,我很感激。
答案 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,如果您不想在超时后抛出异常,则必须捕获异常。