Steve: Расскажите побольше как работает метод GetBitmapCRC и как с ним работать?
Напишите пример?
Начну несколько издалека.
В процессе тестирования с использованием SilkTest очень часто возникают ситуации когда надо сравнить два изображения (кнопки, нераспознанного элемента окна или просто изображения). В таком случае можно использовать SYS_CompareBitmap () метод, который сравнивает два битмапа и возвращает иситину или ложь. (как звучит то! J). Этот метод очень хорош, но если вам надо сравинть например 5 картинок в секунду, то тут могу возникнуть проблемы, так как SilkTest просто не успеет это сделать за столь короткое время.
В этом случае на помощь приходит метод GetBitmapCRC (). Этот метод захватывает содержание окна (к которому он применен), делает проверку циклическим кодом (CRC) полученного битмапа и возвращает CRC значение. Т.е. в итоге мы имеем 32-битное целое число – уменьшенное цифровое представление окна (картинки окна). Это число мы можем использовать для быстрых сравнений. Т.е. в тех случаях, когда надо сравнивать много битмапов за ограниченный промежуток времени.
Давайте взглянем на синтаксис метода:
iCRC = window.GetBitmapCRC ([Rect, sMaskFile])
| Переменная |
Описание |
| iCRC |
CRC значение битмапа, INTEGER |
| Rect |
Опциональный параметр – это координаты области захвата, относительно элемента, если параметр не указан, будет захвачен элемент целиком, RECT |
| sMaskFile |
Опциональный параметр, имя файла, который содержит маску для битмапа, STRING |
Логика применения:
Этот метод нам нужен для проведения сравнения изменения состояния элемента окна. Для сравнения нам надо два значения: ожидаемое и действительное. Ожидаемое значение можно (нужно) захватить перед выполнением каких-либо действий с приложением (элементом окна), действительное значение – после выполнения бизнес логики теста. Более простыми словами: ожидаемое значение мы захватываем в начале тесткейса, производим необходимые тестовые действия, потом захватываем окно еще раз. Как только мы имеем два CRC значения – можно приступать к их сравнению.
Пример:

example GetBitmapCRC method SilkTest
Дополнительная информация:
После первичного захвата битмапа элемента, SilkTest выжидает определенный интервал времени (определенный параметром OPT_BITMAP_MATCH_INTERVAL), затем производит еще один захват автоматически производя сравнение с первым захватом что бы убедится что картинка не изменилась. Можно установить что бы такое сравнение производилось несколько раз (параметр OPT_BITMAP_MATCH_COUNT). Если картинка не оказалась стабильной после определенного интервала времени (параметр OPT_BITMAP_MATCH_TIMEOUT) то SilkTest вызывает эксепшн E_BITMAP_NOT_STABLE.
CRC значения которые возвращает GetBitmapCRC () метод зависят не только от пользовательского интерфейса но и от аппаратного окружения. Так, картинки одних и тех же элементов захваченные на VGA или Super VGA мониторах будут разными, естественно будут разными и CRC значения.
А знаете ли вы что …
CRC (Cyclic Redundancy Check) контроль циклическим избыточным кодом (ЦИК) – один из способов автоматического контроля целостности данных при их передаче и хранении. Вычисленное с помощью разновидности полиномиального кода (т. е. по более сложным правилам, чем контрольная сумма) число, помещается в конце записи на носителе, используется для контроля целостности данных в ОЗУ, при чтении/записи на носитель или передаче по каналам связи. Принимающее устройство заново вычисляет эту сумму и сравнивает результат с принятым значением. При обнаружении в ЦИК ошибки выдается сообщение «CRC Error» или, в случае передачи пакета данных по компьютерной сети, производится повторная его передача
SilkTest questions
Комментарии