
TestComplete не видит форму после нажатия Del
#1
Отправлено 04 апреля 2012 - 20:05
#2
Отправлено 05 апреля 2012 - 04:37
1. Попробуйте после нажатия Del сделать Sys.Refresh()
2. Если не сработает - скорее всего в этой ситуации открывается совсем другое окно (хотя внешне оно может выглядеть так же)
Если ничего из вышеприведенного не сработает - запишите (именно запишите, а не напишите вручную) 2 скрипта: 1й удаляет с помощью меню и закрывает открывшееся окно, 2й делает то же самое, но удаляет с помощью кнопки Del. И оба скрипта постите сюда
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 05 апреля 2012 - 08:25
Это deadlock: ТС ждёт реакции приложения на нажатие Del, а приложение ждёт действия с диалогом для этой реакции. Читайте Calling Methods Asynchronously.
Дмитрий
#4
Отправлено 05 апреля 2012 - 20:55
У меня ощущение дежавю, кажется я уже видел этот вопрос месяц-два назад, может и не на этом форуме...
1. Попробуйте после нажатия Del сделать Sys.Refresh()
2. Если не сработает - скорее всего в этой ситуации открывается совсем другое окно (хотя внешне оно может выглядеть так же)
Если ничего из вышеприведенного не сработает - запишите (именно запишите, а не напишите вручную) 2 скрипта: 1й удаляет с помощью меню и закрывает открывшееся окно, 2й делает то же самое, но удаляет с помощью кнопки Del. И оба скрипта постите сюда
Записанные скрипты:
1. Удаление с помощью кнопочного меню:
function Test1() { var GWTalk; var contactList; GWTalk = Aliases.GWTalk; contactList = GWTalk.Main.contactList.contactList; contactList.dgvMain.ClickCell(49, 1); contactList.pnlToolStrip.tsbRemoveContact.Click(11, 13); GWTalk.MessageBoxEx.ztlpMain.ztlpControl.bOK.ClickButton(); }
2. Удаление с помощью клавиши Delete:
function Test2() { var GWTalk; var dataGridViewEx; GWTalk = Aliases.GWTalk; dataGridViewEx = GWTalk.Main.contactList.contactList.dgvMain; dataGridViewEx.ClickCell(49, 1); dataGridViewEx.Keys("[Del]"); GWTalk.MessageBoxEx.ztlpMain.ztlpControl.bOK.ClickButton(); }
Так работает и из моего скрипта. Но я пользуюсь полными именами объектов. И получаю имя кнопки из Object browser в таком виде: var btn = Sys.Process("GWTalk").WinFormsObject("MessageBoxEx").WinFormsObject("_tlpMain").WinFormsObject("_tlpControl").WinFormsObject("_bOK");
И в этом случае btn.ClickButton() уже не проходит. И форма, и тест продолжают висеть. Т.е. для работы скрипта нужно вместо такого кода:
var btn = Sys.Process("GWTalk").WinFormsObject("MessageBoxEx").WinFormsObject("_tlpMain").WinFormsObject("_tlpControl").WinFormsObject("_bOK"); btn.ClickButton();писать такой:
var GWTalk; GWTalk = Aliases.GWTalk; GWTalk.MessageBoxEx.ztlpMain.ztlpControl.bOK.ClickButton();и так все работает. Но почему то, что работает с мапированными именами, не работает с полными?
#5
Отправлено 06 апреля 2012 - 05:18
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#6
Отправлено 06 апреля 2012 - 05:43
Насколько я понял, это должно выгядеть так: Runner.CallObjectMethodAsync(grid, "Keys", "[Del]")?А пробовали по совету Дмитрия выше использовать асинхронный вызов (в данном случае надо асинхронно нажать Del)?
#7
Отправлено 06 апреля 2012 - 15:43
Насколько я понял, это должно выгядеть так: Runner.CallObjectMethodAsync(grid, "Keys", "[Del]")?
Да. Но я надеюсь, вы не ждали целый день ответа и попробовали? :)
Как результаты?
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#8
Отправлено 06 апреля 2012 - 18:14
Насколько я понял, это должно выгядеть так: Runner.CallObjectMethodAsync(grid, "Keys", "[Del]")?
Да. Но я надеюсь, вы не ждали целый день ответа и попробовали? :)
Как результаты?
Выходит так, что ожидал, поскольку этим проектом могу заниматься далеко не всегда. Увы, не сработало.:(
#9
Отправлено 06 апреля 2012 - 18:47
А вот почему это происходит - тут надо подробно смотреть проект, а не видя его можно и не узнать, и не выяснить ничего.
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#10
Отправлено 07 апреля 2012 - 05:50
Если выполнение "зависает" и не развисает через 10 секунд (auto-wait timeout), то всё-таки очень похоже на дэдлок. Проверить можно включив подсветку точки выполнения: Tools | Options... | Engines | General | Highlight execution point. Посмотрите на какой именно строке висит выполнение и пришлите сюда эту строку.
Дмитрий
#11
Отправлено 07 апреля 2012 - 06:26
Я так думаю, что если вариант с краткими именами работает, то надо пользоваться им и не привередничать :)
А вот почему это происходит - тут надо подробно смотреть проект, а не видя его можно и не узнать, и не выяснить ничего.
Да я, собственно говоря, так и делаю. Даже проще - посылаю Sys.Keys("[Enter]"), поскольку на форме фокус на нужной кнопке установлен по умолчанию.
#12
Отправлено 07 апреля 2012 - 06:29
Здравствуйте.
Если выполнение "зависает" и не развисает через 10 секунд (auto-wait timeout), то всё-таки очень похоже на дэдлок. Проверить можно включив подсветку точки выполнения: Tools | Options... | Engines | General | Highlight execution point. Посмотрите на какой именно строке висит выполнение и пришлите сюда эту строку.
Зависает, как видно из индикации выполнения теста, на поиске формы диалога подтверждения удаления (Waiting for WinFormsObject("MessageBoxEx")). Это же видно и с помощью рекомендованной Вами подсветки. Подсвечивается строка:
btn = Sys.Process("GWTalk").WinFormsObject("MessageBoxEx").WinFormsObject("_tlpMain").WinFormsObject("_tlpControl").WinFormsObject("_bOK");
#13
Отправлено 07 апреля 2012 - 13:00
// btn = Sys.Process("GWTalk").WinFormsObject("MessageBoxEx").WinFormsObject("_tlpMain").WinFormsObject("_tlpControl").WinFormsObject("_bOK"); var obj = Sys.Process("GWTalk"); obj = obj.WinFormsObject("MessageBoxEx"); obj = obj.WinFormsObject("_tlpMain"); obj = obj.WinFormsObject("_tlpControl"); btn = obj.WinFormsObject("_bOK");
Дмитрий
#14
Отправлено 07 апреля 2012 - 20:17
Будем исследовать дальше. Разбейте эту строку на подоперации и посмотрите, на какой именно из них будет происходить зависание.
// btn = Sys.Process("GWTalk").WinFormsObject("MessageBoxEx").WinFormsObject("_tlpMain").WinFormsObject("_tlpControl").WinFormsObject("_bOK"); var obj = Sys.Process("GWTalk"); obj = obj.WinFormsObject("MessageBoxEx"); obj = obj.WinFormsObject("_tlpMain"); obj = obj.WinFormsObject("_tlpControl"); btn = obj.WinFormsObject("_bOK");
Останавливается на строчке obj = obj.WinFormsObject("MessageBoxEx"). Это объект, представляющий из себя тот самый диалог подтверждения удаления.
#15
Отправлено 09 апреля 2012 - 06:30
Дмитрий
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных