Как я могу узнать после TAB, где находится фокус и как работать с этим компонентом в RFT?

Я работаю с RFT и хотел бы знать, как получить объект, где находится Фокус, и иметь возможность работать с объектом после этого. Например мой скрипт запускается, чем я пишу getScreen().inputKeys("{TAB}") и

  1. Я хотел бы знать, какой компонент имеет Focus

  2. и после этого я хотел бы знать, как я могу получить свойства этого сфокусированного объекта, например

.getProperty(".text"); or .getProperty(".name");

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

Заранее спасибо,

Крис


person Krisztián    schedule 28.11.2013    source источник
comment
А вопрос...?   -  person StanislavL    schedule 28.11.2013
comment
Я не думаю, что это возможно.   -  person Alessandro Da Rugna    schedule 29.11.2013


Ответы (2)


Вы можете сделать это, используя простой метод, например

private void hasFocus(TestObject to) {
    boolean hasFocus = ((Boolean)to.getProperty(".hasFocus")).booleanValue();
    if (!hasFocus)
        throw new RuntimeException(to.getNameInScript()+" has an invalid focus order!");
}

и вызов этого метода после каждого нажатия TAB; предоставление тестового объекта, который, как ожидается, получит фокус в качестве параметра. Пример кода скрипта:

    browser_htmlBrowser().inputKeys("{TAB}");
    hasFocus(firstObj());

    browser_htmlBrowser().inputKeys("{TAB}");
    hasFocus(secondObj());
person Cagin Uludamar    schedule 11.12.2013

Я бы выполнил поиск по объектам, для которых свойство «.hasFocus» установлено в «true». Оттуда вы можете просто запустить метод в цикле, чтобы убедиться, что текущий сфокусированный элемент является тем, который вам нужен. Я также лично рекомендовал бы (если возможно) проверить свойство ".id", поскольку для данной (веб)страницы это гарантированно будет уникальным идентификатором... тогда как я не совсем уверен, что ".name "собственность есть.

public void testMain(Object[] args) {
    ArrayList<String> focusOrder = new ArrayList<String>();
    String currentlyFocusedObjectName = "";

    // Add element names to the list
    focusOrder.add("Object1");
    focusOrder.add("Object2");
    // ...
    focusOrder.add("Objectn");

    // Iterate through the list, tabbing and checking ".name" property each time
    for (String s: focusOrder) {
        TestObject currentObject = getCurrentlyFocusedElement();

        // Tab
        getScreen().inputKeys("{TAB}");

        if (currentObject != null) {
            currentlyFocusedObjectName = getCurrentlyFocusedElement().getProperty(".name")
                .toString();

            // Do other stuff with the object
        }
        else {
            currentlyFocusedObjectName = "";
        }

        // Verify that the currently focused object matches the current iteration in the list.
        vpManual(s + "HasFocus", currentlyFocusedObjectName, s).performTest();
    }
}

private TestObject getCurrentlyFocusedElement() {

    RootTestObject root = RootTestObject.getRootTestObject();
    TestObject[] focusedObjects = root.find(atProperty(".hasFocus", "true");
    TestObject currentlyFocusedObject = null;

    // Check to ensure that an object was found
    if (focusedObjects.length > 0) {
        currentlyFocusedObject = focusedObjects[0];
    }
    else {
        unregister(focusedObjects);
        return null;
    }

    // Clean up the object
    unregister(focusedObjects);

    return currentlyFocusedObject;
}
person Jonathan Thompson    schedule 31.12.2013