Как извлечь изображение из Grid?
#1
Отправлено 17 февраля 2012 - 08:20
str = p.win.Grid.Item(1,i).Value, а как можно извлечь изображение? Положение усугубляется тем, что в каждой строке колонки с индексом 2 может быть 1, 2 или 3 разных иконки, а может и не быть вовсе. Необходимо иметь возможность оценивать состояние каждой иконки по ее наличию и цвету.
#2
Отправлено 17 февраля 2012 - 21:23
Практически же как это осуществить - зависит от типа грида. Так что вы хотя бы напишите что за грид (какой класс у контрола), а вот даст кто-то пример кода или нет, зависит от того, работал ли кто-то с подобной задачей и именно таким гридом.
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#3
Отправлено 18 февраля 2012 - 05:18
В общем ответ прост: высчитать координаты нужной ячейки и получить скриншот заданного участка (у метода Picture есть необязательные параметры, позволяющие задавать координаты и ширину/высоту скриншота).
Практически же как это осуществить - зависит от типа грида. Так что вы хотя бы напишите что за грид (какой класс у контрола), а вот даст кто-то пример кода или нет, зависит от того, работал ли кто-то с подобной задачей и именно таким гридом.
Класс грида - DataGridViewEx, класс ячейки - DataGridViewImageCell, приложение открытое .NET. Должен также внести поправку в свое первоначальное сообщение - изменяется не количество изображений в ячейке, а количество столбцов грида. В каждой ячейке может находиться только одна картинка (или ячейка может быть пустой). Воспользоваться скриншотом вряд ли получится, поскольку строки грида сгруппированы в отдельные категории. Эти категории могут быть свернуты (и тогда строки данной категории не видны, а видно только название категории) или развернуты (и тогда их можно видеть).
#4
Отправлено 18 февраля 2012 - 20:10
#5
Отправлено 18 февраля 2012 - 20:29
Обратите внимание, что свойство Bounds содержит абсолютные значения координат (Top и Left), поэтому для упрощения задачи я просто активировал окно и сделал снимок всего экрана. Если захотите работать с координатами ячейки относительно самого грида, то придется их пересчитывать
Aliases.WindowsFormsApplication2.Form1.Activate(); var grid = Aliases.WindowsFormsApplication2.Form1.dataGridView1; var cellBounds = grid.Item(1, 1).AccessibilityObject.Bounds; Log.Picture(Sys.Desktop.Picture(cellBounds.Left, cellBounds.Top, cellBounds.Width, cellBounds.Height));
TestComplete для начинающих (видеозаписи курса)
Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)
Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest
#6
Отправлено 19 февраля 2012 - 06:44
Aliases.WindowsFormsApplication2.Form1.Activate(); var grid = Aliases.WindowsFormsApplication2.Form1.dataGridView1; var cellBounds = grid.Item(1, 1).AccessibilityObject.Bounds; Log.Picture(Sys.Desktop.Picture(cellBounds.Left, cellBounds.Top, cellBounds.Width, cellBounds.Height));
Так работает, но неужели нельзя взять изображение напрямую из ячейки? Пробую:
1 var PicObj = Utils.Picture; 2 PicObj = GridControl.Item(3, 3).FormattedValue; 3 Log.Picture(PicObj);
В отладчике вижу, что в PicObj сохранен объект с параметрами идентичными свойствам Item(3, 3), которые можно видеть в Object Browser (т.е. можно надеяться что это именно то изображение. А в логе не сохраняется, пишет "An exception occured in the Grid unit at line 3. Неизвестное имя").
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных