Перейти к содержимому

Фотография

Случайные ошибки


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 PavelT100

PavelT100

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 01 февраля 2007 - 09:03

Написали некоторое количество тестов на TestComplete 5.
Чаще всего они все проходят нормально. Но бывает иногда, что в случайном месте вырабратываются ошибки, например:

Cannot obtain the window with the window class 'Button', window caption '&Ecran' and index -1.

На строке :
Call p1.Window("#32770", "QQQ").Window("Button", "&Ecran").ClickButton

По событию ошибки научились записывать картинку
call Log.Picture(Sys.Desktop.Picture, "Sys.Desktop.Picture")

И на картинке ясно виден диалог с кнопкой "&Ecran"

Если тест снова запустить, то эта ошибка здесь не проявится, все пройдет нормально, но может возникнуть аналогичная на других диалогах.
В чем может быть дело ?
  • 0

#2 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 01 февраля 2007 - 09:21

вполне вероятно, что в некоторых случаях кнопка не успевает отрисоваться или что-то в этом роде

в этом случае поможет написание функции типа
function MessagePressButton(sButton)
{
  p1.Window("#32770", "*").Activate();
  BuiltIn.Delay(1000);
  p1.Window("#32770", "QQQ").Window("Button", sButton).ClickButton();
}

и вызывать как-то так
MessagePressButton("&Ecran")

(код этот я не тестировал, просто для примера написал).
Ну и неплохо бы проверку внутри делать на существование кнопки перед нажатием.

кроме того, попробуйте вместо "&Ecran" использовать "*Ecran"
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#3 ss12

ss12

    Новый участник

  • Members
  • Pip
  • 62 сообщений

Отправлено 01 февраля 2007 - 09:42

Можно еще вместо метода Window("Button", "&Ecran") использовать метод WaitWindow("Button", "&Ecran", 2000).
Теоретически, должно все успеть обновиться за это время.
  • 0

#4 Deus

Deus

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Гапченко Алексей Владимирович
  • Город:Украина, Харьков

Отправлено 01 февраля 2007 - 09:46

:acute:

Set w2 = p.WaitWindow("#32770", "Microsoft Internet Explorer", 1, 15000)
Call w2.Window("Button", "OK").ClickButton

  • 0

#5 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 01 февраля 2007 - 09:58

кстати, о птичках, точнее о WaitWindow...

Я тестирую приложение .NET, вместо WaitWindow используется метод WaitWinFormsObject

Так вот, я сталкивался с ситуацией, когда следующий код не работает:
var obj = Sys.Process(...).WaitWinFormsObject(...);
if (! obj.Exists()) Log.Error(...)

Вылазила ошибка о том, что obj = null

Вылазила ошибка спонтанно, в разных местах, отловить было практически нереально.
Решил проблему так:
if(!Sys.Process(...).WaitWinFormsObject(...).Exists())
  Log.Error(...);
else
  obj = Sys.Process(...).WinFormsObject(...);

Такой вариант не падает (по крайней мере до сих пор не падал)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#6 PavelT100

PavelT100

    Новый участник

  • Members
  • Pip
  • 3 сообщений

Отправлено 01 февраля 2007 - 13:38

Set w2 = p.WaitWindow("#32770", "Microsoft Internet Explorer", 1, 15000)
Call w2.Window("Button", "OK").ClickButton

Просмотр сообщения

Этото что же мне во всех тестах, которые я сделал с помощью Recorder надо Window заменять на WaitWindow ?
Как то это не весело. Я вот изменил немного задержки
в настройках проекта Properties|Playback|Delay between events, ms - в начале было 0, я поставил 500 - на мой взгляд ошибки стали появлятся реже, но может это мое субъективное мнение и эти настройки в данном случае вообще ни причем ?
  • 0

#7 Genka

Genka

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 01 февраля 2007 - 13:51

в настройках проекта Properties|Playback|Delay between events, ms - в начале было 0, я поставил 500 - на мой взгляд ошибки стали появлятся реже, но может это мое субъективное мнение


на мой взгляд, если проблема была именно в том, что контрол не успевал отрисовываться на форме, то изменение этой настройки Вам действительно поможет

однако теперь общее время выполнения всех скриптов увеличится, что не есть хорошо
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#8 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 01 февраля 2007 - 14:19

однако теперь общее время выполнения всех скриптов увеличится, что не есть хорошо

Просмотр сообщения


Более того, ошибки всё равно могут возникать, так как время "проявления" контрола на форме может увеличиться в зависимости от различных факторов.
  • 0

#9 Deus

Deus

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Гапченко Алексей Владимирович
  • Город:Украина, Харьков

Отправлено 01 февраля 2007 - 14:54


Set w2 = p.WaitWindow("#32770", "Microsoft Internet Explorer", 1, 15000)
Call w2.Window("Button", "OK").ClickButton

Просмотр сообщения

Этото что же мне во всех тестах, которые я сделал с помощью Recorder надо Window заменять на WaitWindow ?
Как то это не весело. Я вот изменил немного задержки
в настройках проекта Properties|Playback|Delay between events, ms - в начале было 0, я поставил 500 - на мой взгляд ошибки стали появлятся реже, но может это мое субъективное мнение и эти настройки в данном случае вообще ни причем ?

Просмотр сообщения

Recorder это конечно хорошо, но имхо лучше писать все ручками, тогда все будет работать быстрее и качественнее и непонятных ошибок будет мало :dirol:
p.s. расстановка дилеев может помочь только в частном случае, если вы будете тестировать на другом сервере, то в таком случае прийдется опять подбирать дилеи.
  • 0

#10 Dmitry N

Dmitry N

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 04 февраля 2007 - 10:01

Здравствуйте, Павел.

Этото что же мне во всех тестах, которые я сделал с помощью Recorder надо Window заменять на WaitWindow ?

Нет, не во всех. Надо менять только там, где есть вероятность того что объект не будет найден. Если менять везде, то везде надо обязательно проверять возвращённые объекты на существование. Если этого не делать, то в случае ошибки её будет гораздо труднее отловить - упадёт не та строка, где объект не найден, а какая-нибудь последующая, где он используется.

Конкретно что касается вашей проблемы, у меня есть предположение что перед тем как окно p1.Window("#32770", "QQQ") появляется, аналогичное окно закрывается. То есть, открываются два одинаковых окна одно за другим, и ошибка происходит со вторым окном. Если это так, то причина ошибки в том что скрипт пытается работать ещё со старым окном (ТС успевает его схватить до того, как оно уничтожится). Если это так, то вот такой код должен решить проблему:
 Do 
    Set wnd = p1.Window("#32770", "QQQ")
    Set btn = wnd.WaitWindow("Button", "&Ecran")
  Loop Until btn.Exists 
  Call btn.ClickButton

  • 0
С уважением,
Дмитрий

#11 objective

objective

    Новый участник

  • Members
  • Pip
  • 47 сообщений

Отправлено 08 февраля 2007 - 15:40

Вообщем-то TC не успевает обновить дерево объектов.

Для того чтобы TC успевал увидеть нужный объект можно просто вызвать Refresh для parent нужного объекта (который возвращает null - или не видится).

К примеру Sys.Refresh приводит к обновлению child дерева объектов.
Хорошо работает в ограниченном пространстве памяти, правда замедляет исполнение скрипта.
  • 0

#12 Deus

Deus

    Новый участник

  • Members
  • Pip
  • 61 сообщений
  • ФИО:Гапченко Алексей Владимирович
  • Город:Украина, Харьков

Отправлено 09 февраля 2007 - 07:56

:good:

Также можно проверять свойство readyState различных объектов, должно быть или 4, или complete.
  • 0

#13 frett

frett

    Новый участник

  • Members
  • Pip
  • 29 сообщений
  • ФИО:Alfred
  • Город:SPb

Отправлено 09 февраля 2007 - 09:44

здраствуйте

внесу свои 5 копеек
иногда бывает, что номер инстанса объекта во время выполнения скрипта отличается от номера показываемого Object Browser
тогда естественно ТС разводит руками и говорит "не нашел"

Sys.Refresh() наверное может выручить , но если критичны задержки, то можно сделать так (для JScript):

button = Wnd.Window("Button", "&Ecran");
if ( !button.Exists )
}
button = Wnd.Window("Button", "&Ecran",1);
}
button.Click();

единственное, нужно знать какой номер инстанса правильный
(можно уточнить, если записать в лог ChildList окна и найти в нем описание своего объекта)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных