Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Solved] Как для WebDriver + C# задать явное ожидание элемента с условием его видимости


(Serhii) #1

Как для WebDriver + C# задать явное ожидание элемента с условием его видимости?
В документации указан простой пример, но по нему сложно понять как его переделать под другое условие ожидания елемента (видимость и т.д)

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement"));
    });

При запуске из Visual Studio падает тест в формате C#, который отрабатывает в формате HTML на Selenium IDE
(Jane Tymoschuk) #2

не знаю с# но могу предположить

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
Boolean condition = wait.Until<Boolean>((d) =>
    {
        return d.FindElement(By.Id("someDynamicElement")).IsDisplayed();
    });

(Sergey Korol) #3

По аналогии с java -> ExpectedConditions:

IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(3))
IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(By.Id("foo")));

(Serhii) #4

Да, спасибо. Заработало.
Немного переписал под себя , может кому-то пригодиться.

public static void WaitAndVisible(this IWebDriver driver, By by)
{
    IWait<IWebDriver> wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement element = wait.Until(ExpectedConditions.ElementIsVisible(by));
}