Selenium C# WebDriver: Wait Until Element is Present

Selenium C# WebDriver: Wait Until Element is Present

21 May 2024 Stephan Petzl Leave a comment Tech-Help

Ensuring that an element is present before your WebDriver interacts with it is a fundamental aspect of robust test automation. This article will guide you through various methods to achieve this in Selenium using C#. We will explore practical examples to help you implement these techniques effectively in your test scripts.

Explicit Waits

Explicit waits allow you to specify conditions and wait for them to occur before proceeding with the next step in your automation script. This can be crucial for scenarios where elements take some time to appear on the page.

Using WebDriverWait and ExpectedConditions

One of the most common methods is to use WebDriverWait in conjunction with ExpectedConditions. Below is a sample implementation:

using SeleniumExtras.WaitHelpers;

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

This code will wait up to 10 seconds for the element with the ID “login” to be present in the DOM.

Custom Extension Methods

For a more reusable approach, you can create extension methods that add a timeout parameter to the FindElement method. This allows you to specify different timeouts for different elements.

Creating the Extension Method

public static class WebDriverExtensions
    public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds)
        if (timeoutInSeconds > 0)
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
            return wait.Until(drv => drv.FindElement(by));
        return driver.FindElement(by);

Using the Extension Method

var driver = new FirefoxDriver();
var btn = driver.FindElement(By.CssSelector("#login_button"), 10);
var employeeLabel = driver.FindElement(By.CssSelector("#VCC_VSL"), 10);
Assert.AreEqual("Employee", employeeLabel.Text);

This approach is particularly useful for enhancing code readability and reusability across different test scripts.

Implicit Waits

Implicit waits are another option, where you set a default wait time for the WebDriver instance. This wait time will apply to all FindElement calls.

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

While this is simpler to implement, it may not be suitable for all scenarios, especially when you need different wait times for different elements.


Choosing the right wait strategy depends on your specific requirements and the nature of the web elements you are dealing with. Explicit waits offer more control and flexibility, while implicit waits provide a simpler, albeit less versatile, solution.

For comprehensive test automation, consider using tools like Repeato. Repeato is a no-code test automation tool for iOS and Android, designed to create, run, and maintain automated tests for your apps. With its intuitive test recorder and computer vision-based approach, Repeato makes it easy to handle dynamic web elements and complex test scenarios. For more information, visit our documentation or blog.

Like this article? there’s more where that came from!