TestComplete/JScript — использование переменной в пути к объекту

Я использую TestComplete с JScript для тестирования веб-страницы с элементами, которые я объявляю как переменную, чтобы упростить тестирование элемента позже. Все они имеют такой путь:

var check1 = Window.Panel(1).Panel(2).Panel(0).Panel(0).Panel(0).Panel(0).Panel(1).Panel(0).Label(0).Checkbox(0)

Элементы являются динамическими, поэтому невозможно сказать, сколько их при запуске теста. Я надеялся, что есть какой-то способ пройтись по циклу и объявить элементы, но это включало бы объявление элемента следующим образом:

var check1 = Window.Panel(1).Panel(2).Panel(0).Panel(0).Panel(0).Panel(0).Panel(1).Panel(0).Label(x).Checkbox(0)

где x — переменная счетчика. Проблема в том, что TestComplete видит это как литеральный путь и не распознает x как переменную.

Есть ли способ сделать это с помощью TestComplete с использованием JScript? Или преобразовать строку в объект? Думаю, я тоже могу с этим работать.


person Brandy    schedule 12.02.2016    source источник
comment
Можете ли вы поместить сюда код, который присваивает значение «x»?   -  person Dmitry Nikolaev    schedule 12.02.2016
comment
х=1; Это просто переменная, которая может увеличиваться в цикле.   -  person Brandy    schedule 12.02.2016
comment
Вы можете использовать метод aqConvert.VarToInt для неявного преобразования значения переменной в целое число. Однако он должен иметь допустимый целочисленный тип даже без преобразования. Поскольку я не вижу, как вы объявляете переменную 'x' и манипулируете ею, я подозреваю, что с этим что-то не так.   -  person Dmitry Nikolaev    schedule 15.02.2016


Ответы (1)


Я предполагаю, что, поскольку вы сохраняете ссылку в переменной check1, переменная x обновляется, но x в переменной check1 по-прежнему сохраняет исходное значение (1).

Временное решение. Оставьте первую часть пути статической в ​​переменной, затем обновите x и назначьте его метке.

var path = Window.Panel(1).Panel(2).Panel(0).Panel(0).Panel(0).Panel(0).Panel(1).Panel(0);

// path to the Checkbox
path.Label(x).Checkbox(0);

// or if you want to loop over it
for (var x = 0, len = 8; i < len; x += 1) {
    if (path.Label(x).Checkbox(0).value === 'something') {
        console.log('hooray!');
    }
}
person Dedicated    schedule 14.02.2016
comment
Это то, что я пытаюсь решить. Какой-то способ использовать переменную, чтобы она получала новое значение при цикле. Это часто встречается в моем тестировании, поэтому это избавит меня от многих обходных путей, которые мне нужно сделать. - person Brandy; 16.02.2016
comment
Я скорректировал свой ответ. Если у вас есть еще вопросы или если это неясно, дайте мне знать. - person Dedicated; 16.02.2016
comment
Извините, что так долго не мог ответить вам, но я наконец-то смог опробовать этот метод. Это сработало идеально. Я могу динамически объявлять объекты. На самом деле я немного подправил его, чтобы использовать цикл while вместо цикла for. Я храню объекты в массиве. - person Brandy; 01.03.2016
comment
Приятно это слышать, имейте в виду, что цикл for немного быстрее и не зацикливается вечно, как цикл while. - person Dedicated; 01.03.2016
comment
Да, я понимаю, но поскольку я не знаю, сколько элементов я отображаю, я не могу использовать цикл for. У меня есть условие выхода: если элемент не существует, выйдите из цикла. - person Brandy; 07.03.2016