Проверка текста поля со списком
Я использую https://github.com/TestFX/TestFX для тестов GUI клиента javafx. С запросом testfx я получаю comboBox, но я не могу получить его текст для проверки. ComboBox отображает перечислимые значения, текст которых разрешается конвертером и данным комплектом ресурсов. Граф сцены для comboBox выглядит так:
javafx.scene.control.ComboBox
javafx.scene.layout.StackPane:arrow-button
javafx.scene.layout.Region:arrow
com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$4$1:null
com.sun.javafx.scene.control.skin.LabeledText:null
comboBox.getValue()
дает мне только значение enum, но не текст (я мог проверить значение enum, но, поскольку это тест с графическим интерфейсом, отображаемый текст должен быть проверен). Попробовав, я узнал, что comboBox.getChildrenUnmodifiable().toString()
печать
[StackPane[id=arrow-button, styleClass=arrow-button], ComboBoxListViewSkin$5[id=list-view, styleClass=list-view], ComboBoxListViewSkin$4$1@4f65f1d7[styleClass=cell indexed-cell list-cell]'StringOfInterest']
Строка 'StringOfInterest' в конце - именно то, что мне нужно, но неясно, откуда она взялась. При просмотре исходного кода javafx кажется, что используется Node # toString. Однако неясно, откуда взялась последняя часть ('StringOfInterest'). Я пытался получить текст всех дочерних элементов ComboBox, но рассматриваемая строка не является его частью.
Как я могу извлечь строку?
0 ответов
Я нашел способ получить текст в поле со списком с помощью TestFX 4 и JavaFX 12. Не уверен, работает ли приведенное ниже и в других версиях. По общему признанию, это кажется немного взломанным и хрупким, но дает желаемый результат.
ComboBox<String> comboBox = robot.lookup("#comboBox").queryComboBox();
ListCell<String> listCell = robot
.from(comboBox)
.lookup((Node node) -> node.getStyleClass().contains("list-cell")
&& node.getParent() instanceof ComboBox)
.<ListCell<String>>query();
Я сначала попытался просто lookup(".list-cell")
, но на самом деле это дало мне два результата: один с нулевым текстом и один с желаемым текстом. Тот, у которого есть null, вложен где-то в граф сцены, но тот, который нас интересует, имеет поле со списком как родительский. И это то, что проверяет поиск.
Теперь вы можете проверить текст вашего поля со списком:
assertThat(listCell.getText()).isEqualTo("expected text");