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

Фотография

Тестируемое приложение зависает при попытке доступа к AccessibilityObj


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

#1 vitaliy4us

vitaliy4us

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

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

Отправлено 26 марта 2012 - 06:13

В главном окне приложения имеется грид, записи которого сгруппированы в категории. Категории могут быть в развернутом состоянии (отображать все записи) и в свернутом, когда отображается только название категории и количество записей в ней. Доступ к записям и категориям осуществляется из скрипта при помощи объекта AccessibilityObject. В том случае, если в категории имеется столько записей, что они не умещаются в окне грида, то попытка доступа к AccessibilityObject той категории, которая находится за пределами окна грида, вызывает зависание программы на некоторое время и последующее ее завершение с ошибкой. Ситуация возникает даже в том случае если категория с большим количеством записей свернута и следующая за ней категория отображается в окне грида. Но доступа к AccessibilityObject этой категории нет - как если бы на самом деле предыдущая категория была развернута. Ситуация повторяется даже без использования скрипта - при попытке обратиться к AccessibilityObject этой последней категории в Object Browser.

Задача такова: сначала нужно развернуть все категории, чтобы они отображали содержащиеся в них записи, а потом свернуть их. Первая задача была решена так: Разворачиваем первую категорию и перебираем в ней все записи. Если при этом попадается некая i-тая запись, имеющая значение свойства Displayed = false, то делаем ее отображаемой при помощи прокрутки (grid.FirstDisplayedScrollingRowIndex = i;) ну и т.д. Ну а вот с, казалось бы, более простой второй задачей справиться не получается. Например, категория имеет большое количество записей и все они не помещаются в окне грида. Следующая за ней категория не видна. После сворачивания этой первой категории в окне появляется вторая, а вот достучаться к ее AccessibilityObject невозможно, как будто она все еще находится за пределами экрана (См. прилагаемый рисунок).

Прикрепленные файлы


  • 0

#2 Dmitry N

Dmitry N

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

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

Отправлено 26 марта 2012 - 19:22

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

С довольно специфичной проблемой вы столкнулись. Как я понимаю, тестируете .NET приложение (WPF?) и работаете с элементами контрола через его нативные свойства. Больше ничего сказать по вашему описанию не могу, извините. :)

Имея положительный опыт разбора подобных проблем с помощью службы поддержки AutomatedQA/SmartBear, советую обратиться за помощью к ним.
  • 0
С уважением,
Дмитрий

#3 vitaliy4us

vitaliy4us

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

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

Отправлено 27 марта 2012 - 04:52

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

С довольно специфичной проблемой вы столкнулись. Как я понимаю, тестируете .NET приложение (WPF?) и работаете с элементами контрола через его нативные свойства.


Совершенно верно, так и есть. Но для решения данной проблемы приходится просто высчитывать "габариты" строки грида и двигаться по координатам. Перерыв материалы на сайте AutomatedQA/SmartBear, с удивлением обнаружил, что для DataGridView, с которым я работаю, нет метода клика по определенной ячейке ClickCell(), а также невозможно извлечь изображение из ячейки грида. Вот и приходится искать обходные пути (Как, например, такой).
  • 0

#4 modbear

modbear

    Специалист

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

Отправлено 27 марта 2012 - 06:32

Перерыв материалы на сайте AutomatedQA/SmartBear, с удивлением обнаружил, что для DataGridView, с которым я работаю, нет метода клика по определенной ячейке ClickCell()...

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 
  • 1

#5 vitaliy4us

vitaliy4us

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

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

Отправлено 27 марта 2012 - 07:18

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 


Спасибо за совет. К сожалению, сейчас нет возможности испробовать. Попробую вечером. А скажите, не появится ли в этом случае возможность извлекать из ячейки рисунок? Сейчас пользуюсь свойством Value только для того, чтобы определить присутствует он в ячейке, или нет (null). Сам же рисунок приходится получать при помощи метода picture по координатам ячейки.
  • 0

#6 vitaliy4us

vitaliy4us

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

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

Отправлено 27 марта 2012 - 07:18

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 


Спасибо за совет. К сожалению, сейчас нет возможности испробовать. Попробую вечером. А скажите, не появится ли в этом случае возможность извлекать из ячейки рисунок? Сейчас пользуюсь свойством Value только для того, чтобы определить присутствует он в ячейке, или нет (null). Сам же рисунок приходится получать при помощи метода picture по координатам ячейки.
  • 0

#7 modbear

modbear

    Специалист

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

Отправлено 27 марта 2012 - 09:59

А скажите, не появится ли в этом случае возможность извлекать из ячейки рисунок? Сейчас пользуюсь свойством Value только для того, чтобы определить присутствует он в ячейке, или нет (null). Сам же рисунок приходится получать при помощи метода picture по координатам ячейки.

Насколько я знаю, метода "из коробки" для этого нет.

Ваш вариант - один из возможных.

Есть и другие способы. Например, если wValue(row, column) возвращает собственно картинку, т.е. .NET System.Drawing.Bitmap, то можно сделать ей Save_2(fileName), а затем "сконвертировать" в TestComplete'овский объект Picture, используя Utils.Picture.LoadFromFile(fileName).
  • 1

#8 vitaliy4us

vitaliy4us

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

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

Отправлено 27 марта 2012 - 11:30

Есть и другие способы. Например, если wValue(row, column) возвращает собственно картинку, т.е. .NET System.Drawing.Bitmap, то можно сделать ей Save_2(fileName), а затем "сконвертировать" в TestComplete'овский объект Picture, используя Utils.Picture.LoadFromFile(fileName).

А нет ли что-нибудь для сохранения в Clipboard?
  • 0

#9 modbear

modbear

    Специалист

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

Отправлено 27 марта 2012 - 11:32


Есть и другие способы. Например, если wValue(row, column) возвращает собственно картинку, т.е. .NET System.Drawing.Bitmap, то можно сделать ей Save_2(fileName), а затем "сконвертировать" в TestComplete'овский объект Picture, используя Utils.Picture.LoadFromFile(fileName).

А нет ли что-нибудь для сохранения в Clipboard?

Получаете TestComplete'овский объект Picture и сохраняете его в Sys.Clipboard.

.NET картинки, возможно, можно записывать в clipboard как-нибудь напрямую, например, используя .NET класс System.Windows.Clipboard, но я не пробовала, поэтому точно сказать не могу.
  • 1

#10 vitaliy4us

vitaliy4us

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

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

Отправлено 27 марта 2012 - 15:19

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 


Увы, заветный метод ClickCell так и не появился. Что же касается возможности получения grid.wValue(row, column), то его достоинства весьма сомнительны, т.к. фактически это то же самое, что и .NET свойство grid.Item(column, row).Value. Разве что меняются местами колонки и строки.
  • 0

#11 vitaliy4us

vitaliy4us

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

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

Отправлено 04 апреля 2012 - 14:57

Как я уже писала здесь, ClickCell/wValue и т.п. для вашего грида изначально нет, потому что у него нестандартное имя класса. Вам надо добавить его в Object Mapping для DataGridView. После этого ClickCell как раз и появится. 


А таки да! Нашелся все-таки ClickCell благодаря Вашему совету. Спасибо. Надеюсь, теперь и к AccessabilityObject лишний раз можно будет не обращаться.
  • 0


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

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