C # Selenium: отсутствие интервала опроса приводит к сбою условия - PullRequest
0 голосов
/ 23 мая 2018

Я использую пользовательское условие, которое нажимает кнопку до тех пор, пока она не переходит в метод, который выглядит следующим образом:

public bool UntilGone(By targetLocator)
    {
        Waits.Default.Until(ExpectedConditions.ElementToBeClickable(targetLocator));

        return Waits.Default.Until(d =>
        {
            try
            {
                _Action.Invoke(d.FindElement(targetLocator));
            }
            catch (StaleElementReferenceException) { }
            catch (NoSuchElementException) { }

            Thread.Sleep(200); // this one here

            return ExpectedConditions.InvisibilityOfElementLocated(targetLocator).Invoke(d);

        });
    }

По какой-то причине, пока я не добавил Thread.Sleep(200), он не выполнил условие и бросилисключение тайм-аута.

Почему это?Элемент по-прежнему исчезает после щелчка, он все равно пытается щелкнуть по нему, перехватить все исключения, выполнить условие невидимости и правильно завершить ожидание.Но это не так.Исключение тайм-аута предполагает, что элемент считается видимым, когда его явно нет.Что мне здесь не хватает?Почему Thread.Sleep имеет значение?

1 Ответ

0 голосов
/ 23 мая 2018

Метод, который вы опубликовали, на самом деле не щелкает элемент.Он просто ждет, когда он станет кликабельным.Я не уверен, почему сон повлияет на что-либо.

Я бы написал эту функцию по-другому.Я бы также предложил вам дать более информативное имя, я выбрал ClickAndWaitUntilInvisible().Приведенный ниже метод ожидает, чтобы элемент стал активным, щелкает по нему, а затем ожидает, что элемент станет невидимым.Возвращает true в случае успеха, false в противном случае.

public bool ClickAndWaitUntilInvisible(By targetLocator)
{
    try
    {
        Waits.Default.Until(ExpectedConditions.ElementToBeClickable(targetLocator)).Click();
        return Waits.Default.Until(ExpectedConditions.InvisibilityOfElementLocated(targetLocator));
    }
    catch (TimeoutException)
    {
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...