IWindow: получить отображаемые дочерние элементы/преобразовать в TestObject

Я хотел бы иметь возможность динамически извлекать все объекты, принадлежащие IWindow, а затем преобразовывать их в TestObjects. Я перечисляю все доступные IWindows, используя:

IWindow[] windows = root.getTopWindows();

Затем пользователь выберет IWindow на основе его заголовка (используя windows[i].getText() для определения правильного заголовка). Затем я хотел бы иметь возможность извлечь все его дочерние элементы, чтобы я мог выполнять над ними операции на более позднем этапе. Для экземпляров TestObject я уже могу извлечь все дочерние элементы, но как мне перейти от захвата IWindow к получению TestObjects, составляющих его пользовательский интерфейс?


person JB2    schedule 06.10.2014    source источник


Ответы (1)


Я уверен, можно ли получить TestObjects из IWindow или преобразовать IWindow в TestObject. Возможно, есть другой способ найти окна — через DomainTestObjects. Я знаю, что это не совсем ответ на вопрос, но может быть что-то:

public void displayDomainsAndTopObjects()
{
    DomainTestObject[] dtos = getDomains();
    for (DomainTestObject dto : dtos)
    {
        System.out.println("--- " + dto.getName() + " ---");
        TestObject[] tos = dto.getTopObjects();
        for (TestObject to : tos)
        {
            System.out.println(to.getDescriptiveName());
        }
    }
}

Может быть, вы можете найти обходной путь таким образом? Например. отображение всех открытых браузеров:

public void displayBrowsers()
{
    DomainTestObject[] dtos = getDomains();

    List<DomainTestObject> htmlDomains = new ArrayList<DomainTestObject>();
    for (DomainTestObject dto : dtos)
    {
        if (dto.getName().equals("Html"))
        {
            htmlDomains.add(dto);
        }
    }

    List<BrowserTestObject> browsers = new ArrayList<BrowserTestObject>();
    for (DomainTestObject htmlDomain : htmlDomains)
    {
        TestObject[] tos = htmlDomain.getTopObjects();
        for (TestObject to : tos)
        {
            if (to.getProperty(".class").equals("Html.HtmlBrowser"))
            {
                browsers.add((BrowserTestObject) to);
            }
        }
    }

    System.out.println("Found " + browsers.size() + " browsers:");
    for (BrowserTestObject browser : browsers)
    {
        System.out.println(browser.getProperty(".documentName"));
    }
}
person Roland    schedule 07.10.2014
comment
Спасибо, Роланд. Это похоже на действительно хороший обходной путь! Просто вопрос: что такое домены в контексте RFT? - person JB2; 07.10.2014
comment
Домен представляет собой объектную модель поддерживаемой области, например. Java, HTML, Net, Процесс. getDomains() возвращает массив, содержащий объекты DomainTestObjects для всех работающих в данный момент доменов. Я думаю, что это объект самого высокого уровня, который вы можете получить, чтобы найти дополнительные TestObjects в RFT. - person Roland; 07.10.2014
comment
Хорошо, спасибо. getDomains() возвращает только один домен с именем Process. Он не содержит дочерних элементов (нет отображаемых дочерних элементов, нет верхних объектов и т. д.)... есть идеи, что вызывает это? - person JB2; 07.10.2014
comment
Не совсем. Когда я запускаю код, я получаю домены Net, ActiveX, Win (с несколькими окнами), Siebel, Java, Html (с некоторыми браузерами и диалогами) и Process. Запуск RFT 8.5.1.2 (Java) на Win7. Вы запускаете некоторые приложения, которые активированы, например. активированный IE? Тогда, по крайней мере, домены Html и Java должны быть запущены. - person Roland; 07.10.2014
comment
Ммм, странно. Запуск RFT 8.5 также на Win7. Да, у меня запущено несколько активированных приложений... IE, пример Java-приложения, Блокнот и т. д. - person JB2; 07.10.2014