a-llorens
a-llorens

Reputation: 43

How to select an element from a ComboBox menu using Vaadin Testbench?

I am doing some integration tests with vaadin version 7.6.4 and Testbench (4.0.3).

I have a view with several comboboxes. One of them has this property comboBox.setTextInputAllowed(false); For testing purposes, I want to change the default value on the combobox and I need to select a different element then the default one.

To select an element I have tried the following code:

 $(ComboBoxElement.class).selectByText("ElementName");

But this only works when comboBox.setTextInputAllowed(true);

I also have tried to use sendkeys() to change the selected value:

$(ComboBoxElement.class).openPopup();
$(ComboBoxElement.class).sendKeys(keys.ARROW_DOWN);
$(ComboBoxElement.class).endKeys(Keys.ENTER);

This code opens the comboBox popup correctly but doesn't select any item. Neither if I set the focus with setFocus();

Could anybody please tell me how can I change the value of a combobox with property setTextInputAllowed(false)?.

Upvotes: 4

Views: 978

Answers (1)

Morfic
Morfic

Reputation: 15518

Indeed, your scenario does not seem to work as expected, at least with Vaadin 7.7.3 & TB 4.1.0.alpha1 I had. Looking at the sources (line 43 atm), in the particular case when a combo is read-only, TestBench will make it writeable, send the specified text, and pick the corresponding item from the popup suggestion list. Nonetheless, during a small debug session, you can easily see that text.equals(popupSuggestions.get(0) is not equal to Region - 5 as they were hoping.

debug

In conclusion, there's a chance that this is a bug in TB itself. I have a few suppositions but I did not have the time to investigate thoroughly atm how and why.

As a workaround, you can open the popup, use an XPath expression to find the correct item and click it. I have a demo app with a combo containing items named Region - 1 to Region - 10.

combo content

To select Region - 5 I did:

@Test
public void shouldOpenGridColumnVisibilityPopupAndSelectItems() {
    getDriver().get("http://localhost:8080/");
    ComboBoxElement combo = $(ComboBoxElement.class).first();
    combo.openPopup();
    findElement(By.xpath("//*[@id='VAADIN_COMBOBOX_OPTIONLIST']//span[text()='Region - 5']")).click();
}

Result:

workaround result

Upvotes: 1

Related Questions