.. _gsauto_ug_grid: Объект табличного представления =============================== Табличные представления представляют собой визуализацию набора записей, расположенных в виде строк и столбцов. Библиотека позволяет взаимодействовать с такими представлениями. Ключевыми классами для работы с таблицами являются: 1. :java:type:`Grid ` — таблица. 2. :java:type:`Column ` — столбец таблицы. 3. :java:type:`Row ` — строка таблицы. 4. :java:type:`Cell ` — ячейка. Пример использования: .. code-block:: java :caption: Пример работы с таблицей application.mainForm().mainMenu().itemByCaption("Редакторы", "В списке").click(); Form listForm = application.waitMdiForm("gtk-ru.bitec.app.gs3.qa.controls.Gs3_QaEditorsTest", "List"); Frame frame = listForm.mainSelection().layout().frame(); Grid grid = frame.view().cast(); Columns columns = grid.getColumns(); int numberOfColumns = columns.size(); Rows rows = grid.getRows(); int numberOfRows = rows.size(); Row row = grid.getRowByVisibleIndex(6); row.click(); int selectedRowVisibleIndex = grid.getSelectedRowVisibleIndex(); int selectedRowAbsoluteNumber = grid.getSelectedRowAbsoluteNumber(); Row row2 = grid.getRowByAbsoluteNumber(selectedRowAbsoluteNumber - 1); Cell cell = row2.getCellByVisibleIndex(2); int selectedColumnVisibleIndex = grid.getSelectedColumnVisibleIndex(); List cells = row2.getCells(); int totalCount = grid.getTotalCount(); int windowSize = grid.getWindowSize(); Этот пример демонстрирует базовые способы взаимодействия с таблицей. .. attention:: 1. **Перерисовка**: Интерфейс таблицы может обновляться автоматически. Это требует выполнения ожидания окончания происходящих изменений. 2. **Индексация и нумерация**: Строки таблицы можно выбирать как по видимому индексу, так и по абсолютному номеру. Видимый индекс удобен, когда речь идет об отображенных записях. Абсолютный номер удобен, если запись еще не подгружена с сервера. Подробнее об индексах и номерах строк можно узнать в справочнике по API: :java:type:`Grid `. Полный пример проекта ``example7`` можно найти в :ref:`коллекции примеров проектов`. .. seealso:: - Руководство пользователя: :ref:`gsauto_ug_clickable` - Руководство пользователя: :ref:`gsauto_ug_keyboardinput` - API: :java:type:`ru.bitec.gs.automation.client.ui.layout.view.table.GridUtils ` Особенности некоторых взаимодействий с элементами табличного представления -------------------------------------------------------------------------- Перетаскивание колонок ++++++++++++++++++++++ Для тестирования drag'n'drop функционала колонок (при изменении их порядка или при перетаскивании заголовка в область группировки) появляется необходимость в привнесении дополнительных движений мышью, чтобы элемент заголовка стал доступен для сброса в нужную область. .. code-block:: java :caption: Пример перетаскивания заголовка колонки в область группировки void moveColumnToGroupArea(ColumnHeader columnHeader) { Geometry geometry = Geometry.of(client); BoundingClientRect col1BoundingClientRect = geometry.getBoundingClientRect(columnHeader); columnHeader.mouseDown(); columnHeader.mouseMoveByOffset(5, 1); columnHeader.mouseMoveByOffset(0, -Double.valueOf(col1BoundingClientRect.getHeight()).intValue()); columnHeader.mouseMoveByOffset(-5, -1); columnHeader.mouseUp(); } Перестроение таблицы ++++++++++++++++++++ В результате некоторых взаимодействий со списком происходит полное обновление dom-элемента таблицы, что приводит к устареванию ссылки на объект таблицы в коде теста. Примеры таких взаимодействий (список не исчерпывающий): - Изменение порядка колонок - Сортировка по колонке - Изменение видимости колонки - Клик по пункту конекстного меню "Восстановить настройки по умолчанию" В этих случаях необходимо перезапрашивать ссылку на таблицу у объекта фрейма.