Объект табличного представления¶
Табличные представления представляют собой визуализацию набора записей, расположенных в виде строк и столбцов.
Библиотека позволяет взаимодействовать с такими представлениями.
Режимы табличного представления¶
Табличное представление может находиться в одном из режимов, определяемом перечислением
Grid.Mode. Получить текущий режим можно
методом Grid.getGridMode().
Доступные режимы:
Grid— стандартный список (режим по умолчанию).Card— карточный режим.Transpose— транспонированный список.AutoFilter— автофильтр.Unknown— режим не определён.
Карточный режим¶
Added in version 1.1.3.
В карточном режиме (Mode.Card) табличное представление отображает одну запись,
где каждый атрибут записи представлен отдельной строкой. Принципиальное отличие карточного режима от
остальных режимов заключается в следующем:
Структура строк: каждая строка таблицы соответствует одному атрибуту записи, а не одной записи набора, как в стандартном режиме.
Структура ячеек: каждая строка состоит из двух ячеек — ячейка с индексом 0 содержит заголовок атрибута (caption), ячейка с индексом 1 содержит значение атрибута.
Отсутствие колонок: в карточном режиме не применимо понятие колонок, поэтому методы, работающие с колонками, недоступны.
В связи с этими отличиями, ряд методов библиотеки работает только в карточном режиме,
а ряд методов, напротив, недоступен. При вызове недопустимого метода выбрасывается исключение
GridModeException.
Методы, работающие только в карточном режиме¶
Added in version 1.1.3.
Метод |
Описание |
|---|---|
Получить строку по названию атрибута |
|
Получить строку по заголовку атрибута |
|
Получить ячейку значения атрибута по названию атрибута |
Методы, недоступные в карточном режиме¶
Added in version 1.1.3.
Метод |
Описание |
|---|---|
Получение списка колонок недопустимо в карточном режиме |
|
Получение ячейки по индексу строки и названию атрибута; используйте |
|
Получение ячейки по названию атрибута; используйте |
|
|
Получение ширин ячеек по именам атрибутов недопустимо в карточном режиме |
Ключевые классы¶
Ключевыми классами для работы с таблицами являются:
Пример использования в стандартном режиме¶
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<Cell> cells = row2.getCells();
int totalCount = grid.getTotalCount();
int windowSize = grid.getWindowSize();
Этот пример демонстрирует базовые способы взаимодействия с таблицей в стандартном режиме. Для карточного режима используйте подход, описанный в Пример использования в карточном режиме.
Attention
Перерисовка: Интерфейс таблицы может обновляться автоматически. Это требует выполнения ожидания окончания происходящих изменений.
Индексация и нумерация: Строки таблицы можно выбирать как по видимому индексу, так и по абсолютному номеру.
Видимый индекс удобен, когда речь идет об отображенных записях. Абсолютный номер удобен, если запись еще не подгружена с сервера. Подробнее об индексах и номерах строк можно узнать в справочнике по API:
Grid.
Полный пример проекта example7 можно найти в коллекции примеров проектов.
Пример использования в карточном режиме¶
Added in version 1.1.3.
В карточном режиме поиск строки таблицы осуществляется по атрибуту, а не по индексу колонки. Ниже приведены примеры основных операций с табличным представлением в карточном режиме.
Поиск строки по атрибуту¶
Строку карточного режима можно найти по названию атрибута или по его заголовку, отображаемому в левой колонке карточки.
Grid grid = frame.view().cast();
// Поиск строки по названию атрибута
Row rowByAttributeName = grid.getRows().getByAttributeName("PMEMOBOX");
// Поиск строки по заголовку атрибута (наименованию в левой колонке)
Row rowByCaption = grid.getRows().getByAttributeCaption("PMemoBox");
// Получение ячейки значения атрибута
// В карточном режиме строка содержит две ячейки:
// индекс 0 — заголовок атрибута, индекс 1 — значение атрибута
Cell valueCell = rowByAttributeName.getCells().get(1);
// Краткий способ получения ячейки значения по названию атрибута
Cell cell = grid.getCell("PMEMOBOX");
Чтение и установка значения редактора¶
В карточном режиме для установки значения используется редактор ячейки, полученный
методом Cell.field().
Тип редактора определяется автоматически.
Grid grid = frame.view().cast();
// TextBox — текстовое поле
Cell textCell = grid.getRows().getByAttributeName("PTEXTBOX").getCells().get(1);
TextBox textBox = textCell.field();
textBox.setValue("Новое значение");
assertEquals("Новое значение", textCell.value());
Attention
При работе с редакторами в карточном режиме недопустимо получение редактора для ячейки с индексом 0 (заголовок атрибута) —
при попытке вызова Cell.field() на такой ячейке
будет выброшено исключение ElementNotFoundException.
Проверка режима табличного представления¶
Перед использованием методов, зависящих от режима табличного представления, рекомендуется проверять текущий режим:
Grid grid = frame.view().cast();
Grid.Mode mode = grid.getGridMode();
if (mode == Grid.Mode.Card) {
// Использование методов карточного режима
Row row = grid.getRows().getByAttributeName("PTEXTBOX");
Cell cell = row.getCells().get(1);
} else {
// Использование методов стандартного режима
Columns columns = grid.getColumns();
Cell cell = grid.getCell(0, "PTEXTBOX");
}
See also
Руководство пользователя: Использование мыши
Руководство пользователя: Ввод с клавиатуры
API:
ru.bitec.gs.automation.client.ui.layout.view.table.GridUtils
Особенности некоторых взаимодействий с элементами табличного представления¶
Перетаскивание колонок¶
Для тестирования drag’n’drop функционала колонок (при изменении их порядка или при перетаскивании заголовка в область группировки) появляется необходимость в привнесении дополнительных движений мышью, чтобы элемент заголовка стал доступен для сброса в нужную область.
Note
Перетаскивание колонок доступно только в стандартном режиме (Mode.Grid).
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-элемента таблицы, что приводит к устареванию ссылки на объект таблицы в коде теста. Примеры таких взаимодействий (список не исчерпывающий):
Изменение порядка колонок
Сортировка по колонке
Изменение видимости колонки
Клик по пункту конекстного меню “Восстановить настройки по умолчанию”
В этих случаях необходимо перезапрашивать ссылку на таблицу у объекта фрейма.