Метод SwitchTo для закодированного пользовательского интерфейса

Я работаю над тестированием пользовательского интерфейса для приложения.

Приложение имеет определенную функцию, которая работает в 2 окнах. При нажатии кнопки появляется новое окно, и затем пользователь делает выбор, после которого это окно закрывается, а затем пользователь продолжает выполнять действия с главным окном.

С Selenium я бы справился с этим, перебирая все дескрипторы окна и переключаясь, передавая URL-адрес страницы, которую я хотел, используя методdriver.SwitchTo().Window(handle). Однако с Coded UI я не нашел аналогичного решения. Используя класс Process, я могу сделать что-то похожее, что может сработать:

Process[] myList = Process.GetProcessesByName("iexplore");
foreach (Process item in myList)
if (item.MainWindowTitle.Contains("Window Title"))
{
item.Kill();
}

Проблема в том, что приложение, которое я тестирую, плохо спроектировано, и все окна во всем приложении имеют одинаковое имя, поэтому оно не будет работать.

Есть ли метод, который можно использовать для переключения на другое окно в кодированном интерфейсе? Или какой будет лучший подход?

2 ответа

Взгляните на этот вопрос, он может помочь: взаимодействие с несколькими экземплярами приложения в кодированном интерфейсе

Вы не делаете "переключение" в CUIT, каждое окно и элемент управления доступны через объект UITestControl. Если вы хотите что-то сделать в другом окне, вы создаете для него новый объект. Если вы не можете различить два окна с помощью свойств поиска, вы можете использовать Instance собственность или FindMatchingControls метод.

Чтобы поймать событие создания окна, вы можете использовать winhook. Это дает вам дескриптор окна каждого созданного окна. Используя это, вы можете узнать, является ли созданное окно ожидаемым, а затем использовать UITestControlFactory.FromWindowHandle создать UITestControl для взаимодействия с CUIT. Если у вас есть сгенерированный класс для этого окна, вы можете создать экземпляр этого класса и вызвать его CopyFrom способ передать ему элемент управления, созданный вами из дескриптора окна.

Я использую:

public static HtmlDocument WaitForPopup(string popupName, string text)
{
    BrowserWindow browser = new BrowserWindow();
    browser.SearchProperties.Add(BrowserWindow.PropertyNames.Name, popupName,
    PropertyExpressionOperator.Contains);

    browser.WindowTitles.Add(popupName);
    browser.WaitForControlExist();
    browser.WaitForControlReady();
    browser.SetFocus();

    HtmlDocument html = new HtmlDocument(browser);
    html.SearchProperties.Add(HtmlDocument.PropertyNames.InnerText, text,
    PropertyExpressionOperator.Contains);
    html.WaitForControlExist();
    html.WaitForControlReady();
    Playback.Wait(1000);

    return html;
}

Просто вызовите WaitForPopup("имя вашего окна", "некоторый постоянный текст в окне") и продолжайте тесты там. Обратите внимание, что этот метод вернет HTML нового окна, и вы можете использовать его в дальнейшем.

Другие вопросы по тегам