1

我搜索了无数网页,但没有得到很好的答案。我使用 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)

这种方式到目前为止有效,但我认为这不是最好的解决方案。如果有人可以向我展示更好的方法,我将不胜感激。

4

1 回答 1

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,如果您不希望它在超时后抛出,则必须捕获该异常。

于 2013-04-16T23:07:18.213 回答