Перейти к содержимому

edd1977

Регистрация: 18 мая 2018
Offline Активность: 30 мая 2018 14:06
-----

Мои сообщения

В теме: Как работают WaitForControlXXX методы в Coded UI тестах?

22 мая 2018 - 12:27

В результате экспериментов над простыми формами и ЭУ пришел к следующему выводу:

 

функции WaitForControlXXX работают следующим образом: они действительно останавливают текущий поток (тот самый, которому принадлежит алгоритм тестового метода), при этом возможны исходы:

1. условие выполнилось и мы досрочно прервали ожидание и пошли по алгоритму дальше.

2. Условие не выполнилось, но закончился интервал ожидания, который скорее всего равен WaitForReadyTimeout * ThinkTimeMultiplier (по факту у меня интервал немного превышал 1 мин, но о возможном превышении где-то пишется и в msdn).

При этом для 2), если условие не выполнилось, а интервал превышен - никаких остановок и исключений не будет - тихо и молча алгоритм побежит дальше, как и в случае 1.

Рабочей оказались такого рода конструкции:

 

while (!third.Exists)

  third.WaitForControlExist();
...
while (!third.Enabled)
  third.WaitForControlEnabled();
...
 
Особо остановлюсь на свойстве Enabled. Мне казалось, что оно будет ложным, если ЭУ не видим (Visible = Collapsed), однако я жестоко ошибся и у контролов, которые спрятаны Enabled = true, что объясняло поведение программы, описанное в теме. Поскольку проверки на видимость в стандартной библиотеке UITesting нет, пришлось найти эквивалент. У меня он заработал на 100%, если кто-то знает как сделать прнавильнее - поделитесь идеей. Я сделал так:
 
while (!ConditionVisible(second))
  second.WaitForControlCondition(ConditionVisible);
Mouse.Click(second);
, где условие такая функция:
 
bool ConditionVisible(UITestControl ctrl)
        {
            Point pt = new Point();
            return ctrl.TryGetClickablePoint(out pt);
        }
 
Теперь все работает, как я и предполагал в заголовке своего сабжекта: тест запускается и ждет, пока я не нажму кнопку 1. После чего кнопка 2 стаановится видимой и нажимается автоматически, что приводит к появлению кнопки 3, на которую так же можно будет нажать из теста.