Max
Max

Reputation: 221

Check if Element exists in Selenium

I want to check if an element exists in Selenium, and if it does, assign it to a name.

Right now I have something that looks like this:

IWebElement size9 = driver.FindElement(By.CssSelector("a[data-value*='09.0']"));

However, when that element that has the value of 9 does not exist, it returns an error. Is there a way I can check to see if it exists, or something of that sort?

Upvotes: 9

Views: 30628

Answers (3)

Diego Montania
Diego Montania

Reputation: 346

Using Dazed's reply, I do a little modification to pass any selector.

//Method :
public bool ElementExists(By by)
{
     try 
     { 
         Driver.FindElement(by); 
     }
     catch (NoSuchElementException) 
     { 
          return false; 
     }
     catch (StaleElementReferenceException) 
     { 
          return false; 
     }
     return true;
}

//Usage:
if (ElementExists(By.XPath("...")))
   ...
if (ElementExists(By.Id("...")))
   ...
if (ElementExists(By.CssSelector("...")))
   ...

Upvotes: 0

Dazed
Dazed

Reputation: 1551

You should be able to do something like:

//Method :
public static bool IsElementPresent_byCssSelector(string elementName)
{
    try { Driver.FindElement(By.CssSelector(elementName)); }
    catch (NoSuchElementException) { return false; }
    catch (StaleElementReferenceException) { return false; }
    return true;
}

//Usage :
var test = driver.IsElementPresent_byCssSelector("a[data-value*='09.0']");

if(test)
{
    //do something
}

Upvotes: 0

Buaban
Buaban

Reputation: 5137

There are several options. I recommend these.
1. Create a method or web driver extension.

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. Count the element, get it if there are 1 or more elements.

By by = By.CssSelector("a[data-value*='09.0']");
var element = driver.FindElements(by).Count >= 1 ? driver.FindElement(by) : null;

Then you can check if(element != null) { ... }

Upvotes: 16

Related Questions