我想检查Selenium中是否存在元素,如果存在,则将其指定给名称。
现在我有一些看起来像这样的东西:
i
但是,如果不存在值为9的元素,则会返回错误。有没有办法可以检查它是否存在,或者某种东西?
答案 0 :(得分:11)
有几种选择。我推荐这些。
1。创建方法或Web驱动程序扩展。
public static IWebElement FindElementIfExists(this IWebDriver driver, By by)
{
var elements = driver.FindElements(by);
return (elements.Count >=1) ? elements.First() : null;
}
// Usage
var element = driver.FindElementIfExists(By.CssSelector("a[data-value*='09.0']"));
2。计算元素,如果有一个或多个元素,则获取它。
By by = By.CssSelector("a[data-value*='09.0']");
var element = driver.FindElements(by).Count >= 1 ? driver.FindElement(by) : null;
然后您可以查看if(element != null) { ... }
答案 1 :(得分:0)
您应该可以执行以下操作:
public static bool IsElementPresent_byCssSelector(string elementName)
{
try { Driver.FindElement(By.CssSelector(elementName)); }
catch (NoSuchElementException) { return false; }
catch (StaleElementReferenceException) { return false; }
return true;
}
var test = driver.IsElementPresent_byCssSelector("a[data-value*='09.0']");
if(test)
{
//do something
}
答案 2 :(得分:0)
使用 Dazed's reply,我做了一些修改以传递任何选择器。
//Method :
public bool IfElementExists(By by)
{
try
{
Driver.FindElement(by);
}
catch (NoSuchElementException)
{
return false;
}
catch (StaleElementReferenceException)
{
return false;
}
return true;
}
//Usage:
if (IfElementExists(By.XPath("...")))
...
if (IfElementExists(By.Id("...")))
...
if (IfElementExists(By.CssSelector("...")))
...