@LaFable

Как обновить данные в табе?

Добрый день.
Я занимаюсь автоматизацией тестирования ui приложений.
У нас есть приложение WPF. Тестирую при помощи CodedUITest, поиск элементов при помощи FindByName.
После внедрения Docking у нас появились табы, но появилась проблема с обновлением информации в табе.
Например:
Открываем область с определенным набором контролов (открывается в мастер табе), работаем с этими контролами. Затем открываем область с другим набором контролов (область открывается в том же самом табе, то есть мастер таб перерисовывается). А в коде не видно, что элементы в табе изменились.
Раньше это решалось при помощи постоянного переоткрытия табов, коряво но работало.

Недавно разработчики для ускорения работы гридов внедрили подмен темплейтов. И теперь возникла такая проблема:
допустим в табе есть выпадающий список(popup) и кнопка. Сначала работаем с popup, выбираем значение, а дальше жмем кнопку. Но при попытке нажать кнопку вываливается ElementNotAvailableException.
Если сначала нажать на кнопку, то все работает. Разработчики говорят, что это как раз связано с подменом темплейтов, а нам надо научиться обновлять данные в табе, чтобы отлавливать новое состояние.
Интересно что тесты падают не всегда.

Собственно вопрос:
просмотрел много форумов, но так и не нашел, как обновлять информацию в табе. Разработчики говорят, что это должно быть реализовано в тестах. Для примера выкладываю часть кода. Выбор элемента в выпадающем списке и нажатие на кнопку.

internal void Choose(AutomationElement element, string value)
        {
            if (NameProperty(element) != value)
            {
                Open(element);

                AutomationElement valueInPopup = FindByName(PART_ListBox(), value);

                ChooseValueInPopup(valueInPopup, value);
            }
        }

        private void ChooseValueInPopup(AutomationElement element, string value)
        {
            AutomationElement valueInPopup = FindByName(element, value);
            LeftClickElement(valueInPopup);

            Thread.Sleep(1000);
        }

        private void ClickSaveEventButton()
        {
            AutomationElement saveButton = FooterSaveButton();
            LeftClickElement(saveButton);

            WaitBusyElementWithoutParameter(saveButton, BusyIndicator);
        }


Очень нужна помощь. Заранее благодарен.
  • Вопрос задан
  • 109 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы