Еще по теме:
1. При работе с объектным репозиторием (Resources -> Object Repository...), если выбрать фильтр "Local Objects", то некорректно работает функция "Update from Application". Данная функция активна для локальных объектов, однако после ее применения ничего не происходит - описание объекта не обновляется.
Если выставить значение фильтра "All Objects", то все работает корректно.
Интересно узнать, это такая фича или бага? И если это фича, то каковы причины такого поведения программы?
2. Теперь совсем по теме.
У тестовых объектов в QTP есть хороший метод Exist, который позволяет узнать, существует ли указанный объект или нет. В качестве параметра ему можно задать тайм-аут, сколько времени ожидать появления объекта, прежде чем вернуть False.
Единственный недостаток этого метода в том, что при отсутствии любого из родительских объектов, QTP начинает ждать этот родительский объект, и при этом использует тайм-аут, указанный для этого типа объекта по умолчанию.
Поясню на примере:
'В случае. когда Exist применяется к браузеру, все хорошо:
If Browser("Welcome: Mercury Tours").Exist(5) Then
MsgBox "Found"
Else
MsgBox "Not found"
End If
'если у нас нет указанного браузера, то через 5 секунд мы получим сообщение "Not Found".
'Теперь используем тот же самый подход, но для одного из полей:
If Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Exist(5) then
MsgBox "Found"
Else
MsgBox "Not found"
End If
'Вот в этом случае, если у нас нет браузера, то сообщение "not found" мы аолучим вовсе не через 5 секунд, а где-то через минуту. Потому что QTP, не найдя браузера, 'станет ожидать его в течение времени, указанного в настройке Browser Navigation timeout (File->Settings, вкладка Web).
'Аналогично, если он не найдет страницу, то будет использован тайм-аут для страницы.
С одной стороны, данное поведение программы понятно. И в чем-то даже логично.
Но очень хочется иметь метод (пусть он будет как-нибудь по-другому называться), который бы использовал указанный тайм-аут на синхронизацию всей цепочки, чтобы можно было точно знать, что на этой строке у нас скрипт дольше, чем указано, зависать не будет.
3. И еще про Exist. Единственный раз, когда в документации сказано, в каких попугаях измеряется тайм-аут, это в описании метода Exist в статье с заголовком Web Environment
Цитата из справки: "Optional. An ULong object.
The length of time (in milliseconds) to search for the object before returning a True or False value. "
Однако, здесь попугаи указаны неверно. Написано, что таймаут задается в
миллисекундах, в то время как на самом деле это тайм-аут в
секундах.
Во всех остальных случаях при описании метода ничего не говорится о размерности параметра.
Просьба исправить это досадное недоразумение в документации.