Столкнулись со странным поведением TestComplete при работе с обычным окном File Download.

Такое окно появляется при попытке загрузить файл из интернета при работе в Internet Explorer.

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


Были перепробованы следующие способы:
  1. Простое нажатие (использование метода Click() )
  2. Использование клавиатурного сочетания Alt-o (срабатывает в ручном режиме без проблем)
  3. Фокусировка кнопки (с помощью метода SetFocus() и с использованием клавиши Tab) с последующим нажатием клавиши Пробел и Enter
  4. Использование метода Click() для самого окна, а не для кнопки непосредственно
  5. Использование методов MouseDown()/MouseUp() и DragMouse()
  6. Использование функции 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, в котором происходит проход табуляцией по всем элементам окна. Для этого окна данный факт не имеет особого значения, так как элементов в нем мало.

09/01/08 14:56:28
С аналогичной проблемой столкнулся, но только при использовании QTP: после первого click на кнопке устанавливался фокус, все проходило без ошибок, но кнопка не нажималась. При этом простой вызов два раза метода Click() у кнопки не срабатывал - иногда кнопка нажималась с первого раза и получал ошибку при попытке повторного нажатия (эмпирическим путем было установлено, что подобное поведение зависит от фазы луны).
Проблема решилась проверкой существования и доступности кнопки после первого click`a и повторного click`a, если первый не вызвал ожидаемого действия
Ответить
09/01/08 15:17:29
в принципе в таких случаях можно попробовать даже безо всяких проверок просто делать двойной щелчок. В случае с кнопками прокатит нормально. Труднее может быть со всякими списками, там где щелчок раскрывает/закрывает список
Ответить
09/02/08 15:48:16
Двойной клик - это не dblClick, а два раза простой Click :)
Проблема в том, что если срабатывает первый клик, то при нажатии кнопки Save появляется новый диалог сохранения файла и кнопка, на которой должен произойти второй click становится недоступной (диалог сохранения блокирует исходный диалог) - не знаю как ведет себя TestComplete, но QTP сильно ругается по этому поводу (подозреваю, что и TestComplete будет вести себя похожим образом)
Ответить
09/02/08 16:07:47
да, ТестКомплит тоже ругается. Я ж потому и говорю: если вместо одинарного клика сделать DblClick, то по идее все отработает в обоих случаях (и когда по одиночному клику отрабатывает событие, и когда не отрабатывает). Собственно, можно попробовать как-нибудь на досуге
Ответить
Для того, чтобы оставлять комментарии, вы должны войти под своим логином.