Окно File Download: непонятное поведение TestComplete
@ Пн, 5 ноября 2007, 16:30Столкнулись со странным поведением TestComplete при работе с обычным окном File Download.
Такое окно появляется при попытке загрузить файл из интернета при работе в Internet Explorer.

Проблема заключалась в том, что TestComplete при попытке нажать на кнопку Open выводил в лог файл сообщение об успешном окончании этого действия, однако на самом деле нажатия не происходило.
Были перепробованы следующие способы:
- Простое нажатие (использование метода Click() )
- Использование клавиатурного сочетания Alt-o (срабатывает в ручном режиме без проблем)
- Фокусировка кнопки (с помощью метода SetFocus() и с использованием клавиши Tab) с последующим нажатием клавиши Пробел и Enter
- Использование метода Click() для самого окна, а не для кнопки непосредственно
- Использование методов MouseDown()/MouseUp() и DragMouse()
- Использование функции WinAPI SendMessage()
В некоторых случаях удавалось добиться необходимого результата, однако лишь на один проход скрипта. В следующий раз тот же самый код не отрабатывал должным образом.
В итоге был найден стабильно работающий вариант, который, правда, выглядит несколько странно:
function MegaClick( obj )
{
for( i = 1; i <= 2; i++ )
{
if( obj.Focused )
obj.Parent.Keys( "[Tab]" );
while( ! obj.Focused )
obj.Parent.Keys( "[Tab]" );
}
obj.Click();
}
По какой-то необъяснимой причине кнопку необходимо фокусировать дважды, для чего введен цикл for. После этого метод Click() отрабатывает правильно.
Безусловно, это не является хорошим примером, и может служить лишь в качестве воркэраунда. Как минимум, нет необходимости в цикле while, в котором происходит проход табуляцией по всем элементам окна. Для этого окна данный факт не имеет особого значения, так как элементов в нем мало.

Проблема решилась проверкой существования и доступности кнопки после первого click`a и повторного click`a, если первый не вызвал ожидаемого действия
Проблема в том, что если срабатывает первый клик, то при нажатии кнопки Save появляется новый диалог сохранения файла и кнопка, на которой должен произойти второй click становится недоступной (диалог сохранения блокирует исходный диалог) - не знаю как ведет себя TestComplete, но QTP сильно ругается по этому поводу (подозреваю, что и TestComplete будет вести себя похожим образом)