Я пытаюсь автоматизировать тестирование пользовательского интерфейса. У меня есть окно, которое вычисляет что-то на основе некоторых текстовых полей, как только вы нажимаете кнопку. У меня правильно нажимается кнопка, но я не могу правильно получить результат вычисления, потому что метод Calculate () вызывается после того, как я проверяю правильный ответ в тесте.
InvokePattern pattern = element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
pattern.Invoke();
Вызов Invoke () не блокируется, поэтому он немедленно возвращается и затем начинает проверять, сработал ли calculate()
, даже если он еще не был вызван. Как я могу изменить вызов Invoke () так, чтобы он ждал, пока не будет вызван метод calc ()?
Элемент
является AutomationElement
для моей кнопки.
private void Button_Click(object sender, RoutedEventArgs e)
{
double v1 = 0;
double v2 = 0;
if(Double.TryParse(tbVal1.Text, out v1) && Double.TryParse(tbVal2.Text, out v2))
{
double output = v1 + v2;
tbAnswer.Text = "The answer is " + output.ToString();
}
}
EDIT:
В итоге я выбрал другой путь к своему решению, подписавшись на событие InvokePattern.InvokedEvent. Это позволило мне поместить любую необходимую логику в обработчик событий, чтобы реагировать на вызов AutomationElement.
InvokePattern pattern = element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, element, TreeScope.Element,
new AutomationEventHandler(OnUIAutomationEvent));
pattern.Invoke();
Дайте мне знать, если мне нужно добавить что-нибудь еще. Спасибо!