Ожидание выполнения операции
#1
Отправлено 31 марта 2010 - 13:08
Могу ли я как-то отловить это время ожидания?
Спасибо за ответы. :)
#2
Отправлено 31 марта 2010 - 15:48
#3
Отправлено 31 марта 2010 - 17:26
Как правило, завершение операции проявляется в изменении состояния тех или иных элементов. То есть, можно попробовать привязаться к этому. Соответственно, вам нужно будет использовать какую-либо вариацию Wait-метода, в котором в качестве таймаут-параметра надо указать максимальное время, в течение которого по-хорошему данная операция должна завершиться.Или задам вопрос по другому: можно ли как-то отловить момент, в который завершится обработка операции. Которая происходит после нажатия на кнопку.
#4
Отправлено 31 марта 2010 - 19:09
Как правило, завершение операции проявляется в изменении состояния тех или иных элементов. То есть, можно попробовать привязаться к этому. Соответственно, вам нужно будет использовать какую-либо вариацию Wait-метода, в котором в качестве таймаут-параметра надо указать максимальное время, в течение которого по-хорошему данная операция должна завершиться.
К этому могу лишь добавить, что получить состояние курсора мыши можно с помощью АПИ функции GetCursorState, н опроблема в том, что она принимает в качестве out-параметра указатель на структуру, а ТестКомплит не умеет работать с АПИ функциями, которые используют указатели.
Чтобы узнать побольше о том, как дождаться появление какого-то окна или контрола, или же дождаться пока свойство примет определенное значение, к которому можно привязать ожидание, почитайте вот эту главу
http://tctutorial.ru/synch/
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#5
Отправлено 01 апреля 2010 - 06:56
#6
Отправлено 01 апреля 2010 - 06:59
Доброе время суток всем!Чтобы узнать побольше о том, как дождаться появление какого-то окна или контрола, или же дождаться пока свойство примет определенное значение, к которому можно привязать ожидание, почитайте вот эту главу
http://tctutorial.ru/synch/
Почему-то иногда (очень редко, но всё равно надоедает)))) такая последовательность команд
Set cmbName = groupBox1.WaitWinFormsObject("cmbName", 10000) Call cmbName.WaitProperty("Exists", 10000) Call cmbName.WaitProperty("Enable", 10000) Call cmbName.ClickItem("вариант текста из комбобокса")пролетает всего за 1 секунду, и объект на выходе - не Enable.
То есть эта цепочка может 10 раз отработать правильно (вся цепочка крутится в цикле), а на 11 - ошибка "window is disabled" на ClickItem, причём вся цепочка занимает всего 1 секунду (по логу), а не хотя бы 10 секунд - уж WaitWinFormsObject точно должен ждать 10 секунд.
И очень часто этот тест целиком замечательно проходит без ошибок.
Как переделать эту цепочку, чтобы повысить стабильность?
#7
Отправлено 01 апреля 2010 - 08:51
Cвойство называется не Enable, а Enabled.Call cmbName.WaitProperty("Enable", 10000)
#8
Отправлено 01 апреля 2010 - 09:13
if (yourobject.WaitProperty("Exists", true, 10000) &&yourobject.WaitProperty("Enabled", true, 10000) && yourobject.WaitProperty("Visible", true, 10000))
{
actions
}
#9
Отправлено 01 апреля 2010 - 09:35
#10
Отправлено 02 апреля 2010 - 12:45
Конечно. Набирал руками, вот и дрогнула рука)))Cвойство называется не Enable, а Enabled.
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?
#11
Отправлено 02 апреля 2010 - 13:24
Конечно. Набирал руками, вот и дрогнула рука)))Cвойство называется не Enable, а Enabled.
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?
Вы неправильно используете метод Waitproperty. В параметрах передается сначало свойство а потом его значение (как писал выше tda1557)
тоесть в вашем случае:
cmbName.WaitProperty("Enabled", true, 10000)
#12
Отправлено 05 апреля 2010 - 07:20
Конечно. Набирал руками, вот и дрогнула рука)))В параметрах передается сначало свойство а потом его значение
тоесть в вашем случае:cmbName.WaitProperty("Enabled", true, 10000)
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?
#13
Отправлено 05 апреля 2010 - 12:28
А чему равен Exists в этом случае? Здравый смысл мне подсказывает, что если Exists = false, то ждать когда он станет true бесполезно. Надо в этом случае перезабирать объект.
Дмитрий
#14
Отправлено 05 апреля 2010 - 13:33
Даже если после WaitWinFormsObject Exists = False, то всё равно WaitWinFormsObject должен был ждать 10 секунд, прежде чем не дождался.А чему равен Exists в этом случае? Здравый смысл мне подсказывает, что если Exists = false, то ждать когда он станет true бесполезно. Надо в этом случае перезабирать объект.
А получается, что WaitWinFormsObject очень быстро заканчивает ждать - менее, чем за 1 сек.
#15
Отправлено 05 апреля 2010 - 19:50
#16
Отправлено 06 апреля 2010 - 04:52
Я тут попробовал что-нибудь подобное у себя и обнаружил, что такое поведение случается если WaitWinFormsObject возвращает несуществующий объект, то есть заглушку. По всей видимости, ТС в этом случае и не проверяет свойства так как это абсолютно бесполезно - ничего с ними никогда уже не произойдёт.
Дмитрий
#17
Отправлено 06 апреля 2010 - 05:49
Но вопрос (у меня))) так и остался - как WaitWinFormsObject может за 1 секунду узнать, что объект не появится за 10 секунд?
#18
Отправлено 06 апреля 2010 - 06:38
Возможна ситуация, что объект 'groupBox1' не существует. Проверьте его существование перед вызовом метода WaitWinFormsObject.
Дмитрий
#19
Отправлено 13 апреля 2010 - 05:58
Вот опять случилось вчера(((((((((((((((((Возможна ситуация, что объект 'groupBox1' не существует. Проверьте его существование перед вызовом метода WaitWinFormsObject.
Ещё раз - вот исходный код:
Log.AppendFolder("") res_ = guiWindowTest("groupBox1", "ComboBox", "Name:WinFormsObject(""cmbProcessingCode"")", "cmbProcessingCode") ' на всякий случай Set cmbProcessingCode = Project.Variables.VariableByName("cmbProcessingCode") cmb_Exists_1 = cmbProcessingCode.Exists cmb_Enabled_1 = cmbProcessingCode.Enabled Call cmbProcessingCode.WaitProperty("Exists", True, 10000) cmb_Exists_2 = cmbProcessingCode.Exists cmb_Enabled_2 = cmbProcessingCode.Enabled Call cmbProcessingCode.WaitProperty("Enabled", True, 10000) cmb_Exists_3 = cmbProcessingCode.Exists cmb_Enabled_3 = cmbProcessingCode.Enabled Call cmbProcessingCode.ClickItem(pSVVTipOp) cmb_Exists_4 = cmbProcessingCode.Exists cmb_Enabled_4 = cmbProcessingCode.Enabled Log.PopLogFolder() Log.Message("cmb_Exists_1 = " + CStr(cmb_Exists_1) + " cmb_Enabled_1 = " + CStr(cmb_Enabled_1) + "") Log.Message("cmb_Exists_2 = " + CStr(cmb_Exists_2) + " cmb_Enabled_2 = " + CStr(cmb_Enabled_2) + "") Log.Message("cmb_Exists_3 = " + CStr(cmb_Exists_3) + " cmb_Enabled_3 = " + CStr(cmb_Enabled_3) + "") Log.Message("cmb_Exists_4 = " + CStr(cmb_Exists_4) + " cmb_Enabled_4 = " + CStr(cmb_Enabled_4) + "") Log.Message("Выбрали тип операции '" + pSVVTipOp + "'")А вот кусок лога, который вчера получился:
log.PNG 18,75К 34 Количество загрузок:
В этом куске лога ясно видно, что cmbProcessingCode существует (Exists = True), но недоступен (Enabled = False).
Вопрос: почему вызов Call cmbProcessingCode.WaitProperty("Enabled", True, 10000) закончился за 1 секунду?
Ведь этот вызов должен был ждать (пока свойство Enabled не станет True) не менее 10 секунд?
#20
Отправлено 13 апреля 2010 - 08:15
Мистика. Попробуйте обойтись без переменных проекта.
А на других объектах воспроизводится? А на другом приложении? А пример рабочий без вашего приложение можно соорудить?
Если ничего не поможет, пишите в службу поддержки.
Дмитрий
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных