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

Фотография

Ожидание выполнения операции


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

#1 Колючка

Колючка

    Активный участник

  • Members
  • PipPip
  • 105 сообщений

Отправлено 31 марта 2010 - 13:08

После нажатия на кнопку, мышка меняет свою иконку на мышку с часиками.
Могу ли я как-то отловить это время ожидания?

Спасибо за ответы. :)
  • 0

#2 Колючка

Колючка

    Активный участник

  • Members
  • PipPip
  • 105 сообщений

Отправлено 31 марта 2010 - 15:48

Или задам вопрос по другому: можно ли как-то отловить момент, в который завершится обработка операции. Которая происходит после нажатия на кнопку.
  • 0

#3 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 31 марта 2010 - 17:26

Или задам вопрос по другому: можно ли как-то отловить момент, в который завершится обработка операции. Которая происходит после нажатия на кнопку.

Как правило, завершение операции проявляется в изменении состояния тех или иных элементов. То есть, можно попробовать привязаться к этому. Соответственно, вам нужно будет использовать какую-либо вариацию Wait-метода, в котором в качестве таймаут-параметра надо указать максимальное время, в течение которого по-хорошему данная операция должна завершиться.
  • 0

#4 Genka

Genka

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

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


Отправлено 31 марта 2010 - 19:09

Как правило, завершение операции проявляется в изменении состояния тех или иных элементов. То есть, можно попробовать привязаться к этому. Соответственно, вам нужно будет использовать какую-либо вариацию Wait-метода, в котором в качестве таймаут-параметра надо указать максимальное время, в течение которого по-хорошему данная операция должна завершиться.


К этому могу лишь добавить, что получить состояние курсора мыши можно с помощью АПИ функции GetCursorState, н опроблема в том, что она принимает в качестве out-параметра указатель на структуру, а ТестКомплит не умеет работать с АПИ функциями, которые используют указатели.

Чтобы узнать побольше о том, как дождаться появление какого-то окна или контрола, или же дождаться пока свойство примет определенное значение, к которому можно привязать ожидание, почитайте вот эту главу
http://tctutorial.ru/synch/
  • 0

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

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

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


#5 Колючка

Колючка

    Активный участник

  • Members
  • PipPip
  • 105 сообщений

Отправлено 01 апреля 2010 - 06:56

Спасибо за ответы. :) Решила привязаться не к ожиданию завершения действия, а к ожиданию окна с ошибкой до тех пор пока все записи не удалятся :)
  • 0

#6 nicksh

nicksh

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

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

Отправлено 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 секунд.
И очень часто этот тест целиком замечательно проходит без ошибок.

Как переделать эту цепочку, чтобы повысить стабильность?
  • 0

#7 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 01 апреля 2010 - 08:51

Call cmbName.WaitProperty("Enable", 10000)

Cвойство называется не Enable, а Enabled.
  • 0

#8 tda1557

tda1557

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

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

Отправлено 01 апреля 2010 - 09:13

try this:


if (yourobject.WaitProperty("Exists", true, 10000) &&yourobject.WaitProperty("Enabled", true, 10000) && yourobject.WaitProperty("Visible", true, 10000))
{
actions
}
  • 0

#9 Колючка

Колючка

    Активный участник

  • Members
  • PipPip
  • 105 сообщений

Отправлено 01 апреля 2010 - 09:35

в моём случае эти все свойства остаются неизменными :) поэтому остаюсь при своём решении :)
  • 0

#10 nicksh

nicksh

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

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

Отправлено 02 апреля 2010 - 12:45

Cвойство называется не Enable, а Enabled.

Конечно. Набирал руками, вот и дрогнула рука)))
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?
  • 0

#11 Paulitto

Paulitto

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

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

Отправлено 02 апреля 2010 - 13:24

Cвойство называется не Enable, а Enabled.

Конечно. Набирал руками, вот и дрогнула рука)))
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?


Вы неправильно используете метод Waitproperty. В параметрах передается сначало свойство а потом его значение (как писал выше tda1557)

тоесть в вашем случае:
cmbName.WaitProperty("Enabled", true, 10000)

  • 0

#12 nicksh

nicksh

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

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

Отправлено 05 апреля 2010 - 07:20

В параметрах передается сначало свойство а потом его значение
тоесть в вашем случае:

cmbName.WaitProperty("Enabled", true, 10000)

Конечно. Набирал руками, вот и дрогнула рука)))
А по существу вопроса (почему иногда вся цепочка пролетает за 1 секунду (а не хотя бы за 10 сек), и объект на выходе не Enabled) никто не подскажет?
  • 0

#13 Dmitry N

Dmitry N

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

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

Отправлено 05 апреля 2010 - 12:28

Здравствуйте.

А чему равен Exists в этом случае? Здравый смысл мне подсказывает, что если Exists = false, то ждать когда он станет true бесполезно. Надо в этом случае перезабирать объект.
  • 0
С уважением,
Дмитрий

#14 nicksh

nicksh

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

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

Отправлено 05 апреля 2010 - 13:33

А чему равен Exists в этом случае? Здравый смысл мне подсказывает, что если Exists = false, то ждать когда он станет true бесполезно. Надо в этом случае перезабирать объект.

Даже если после WaitWinFormsObject Exists = False, то всё равно WaitWinFormsObject должен был ждать 10 секунд, прежде чем не дождался.
А получается, что WaitWinFormsObject очень быстро заканчивает ждать - менее, чем за 1 сек.
  • 0

#15 Al_chimic

Al_chimic

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

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

Отправлено 05 апреля 2010 - 19:50

.
  • 0

#16 Dmitry N

Dmitry N

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

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

Отправлено 06 апреля 2010 - 04:52

Здравствуйте.

Я тут попробовал что-нибудь подобное у себя и обнаружил, что такое поведение случается если WaitWinFormsObject возвращает несуществующий объект, то есть заглушку. По всей видимости, ТС в этом случае и не проверяет свойства так как это абсолютно бесполезно - ничего с ними никогда уже не произойдёт.
  • 0
С уважением,
Дмитрий

#17 nicksh

nicksh

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

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

Отправлено 06 апреля 2010 - 05:49

Спасибо всем за ответы.
Но вопрос (у меня))) так и остался - как WaitWinFormsObject может за 1 секунду узнать, что объект не появится за 10 секунд?
  • 0

#18 Dmitry N

Dmitry N

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

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

Отправлено 06 апреля 2010 - 06:38

Здравствуйте.

Возможна ситуация, что объект 'groupBox1' не существует. Проверьте его существование перед вызовом метода WaitWinFormsObject.
  • 0
С уважением,
Дмитрий

#19 nicksh

nicksh

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

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

Отправлено 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 секунд?
  • 0

#20 Dmitry N

Dmitry N

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

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

Отправлено 13 апреля 2010 - 08:15

Здравствуйте.

Мистика. Попробуйте обойтись без переменных проекта.

А на других объектах воспроизводится? А на другом приложении? А пример рабочий без вашего приложение можно соорудить?

Если ничего не поможет, пишите в службу поддержки.
  • 0
С уважением,
Дмитрий


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

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