How to add custom ExpectedConditions for Selenium?

0
0

I’m trying to write my own ExpectedConditions for Selenium but I don’t know how to add a new one. Does anyone have an example? I can’t find any tutorials for this online.

In my current case I want to wait until an element exists, is visible, is enabled AND doesn’t have the attr “aria-disabled”. I know this code doesn’t work:

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
return wait.Until<IWebElement>((d) =>
{
return ExpectedConditions.ElementExists(locator)
&& ExpectedConditions.ElementIsVisible
&& d.FindElement(locator).Enabled
&& !d.FindElement(locator).GetAttribute("aria-disabled")
}

EDIT: A little additional info: the problem I am running into is with jQuery tabs. I have a form on a disabled tab and it will start filling out fields on that tab before the tab becomes active.

  • You must to post comments
0
0

An “expected condition” is nothing more than an anonymous method using a lambda expression. These have become a staple of .NET development since .NET 3.0, especially with the release of LINQ. Since the vast majority of .NET developers are comfortable with the C# lambda syntax, the WebDriver .NET bindings’ ExpectedConditions implementation only has a few methods.

Creating a wait like you’re asking for would look something like this:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait
.Until<IWebElement>((d) =>
{
IWebElement element = d.FindElement(By.Id("myid"));
if (element.Displayed &&
element
.Enabled &&
element
.GetAttribute("aria-disabled") == null)
{
return element;
}
return null;
});

If you’re not experienced with this construct, I would recommend becoming so. It is only likely to become more prevalent in future versions of .NET.

  • You must to post comments
Showing 1 result
Your Answer
Post as a guest by filling out the fields below or if you already have an account.
Name*
E-mail*
Website