Проверка текста поля со списком

Я использую 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");
Другие вопросы по тегам