我正在使用vaadin版本7.6.4和Testbench(4.0.3)进行一些集成测试。
我有几个组合框的视图。其中一个具有此属性comboBox.setTextInputAllowed(false);
出于测试目的,我想更改组合框上的默认值,我需要选择一个不同的元素,然后选择默认值。
要选择一个元素,我尝试了以下代码:
$(ComboBoxElement.class).selectByText("ElementName");
但这只适用于comboBox.setTextInputAllowed(true);
我也尝试使用sendkeys()
更改所选值:
$(ComboBoxElement.class).openPopup();
$(ComboBoxElement.class).sendKeys(keys.ARROW_DOWN);
$(ComboBoxElement.class).endKeys(Keys.ENTER);
此代码正确打开comboBox弹出窗口,但不选择任何项目。如果我将焦点设置为setFocus()
;
有人可以告诉我如何更改带有setTextInputAllowed(false)
属性的组合框的值?
答案 0 :(得分:1)
事实上,你的情景似乎没有像预期的那样发挥作用,至少对于Vaadin 7.7.3& TB 4.1.0.alpha1我有。
查看sources(第43行atm),在组合为只读的特定情况下,TestBench将使其可写,发送指定的文本,并从中选择相应的项目弹出建议列表。尽管如此,在一个小型调试会话期间,您可以轻松地看到text.equals(popupSuggestions.get(0)
不等于他们希望的Region - 5
。
总之,这可能是TB本身的一个错误。我有一些假设,但我没有时间彻底调查atm如何以及为什么。
作为一种变通方法,您可以打开弹出窗口,使用XPath表达式查找正确的项目并单击它。我有一个带有组合的演示应用,其中包含名为Region - 1
到Region - 10
的项目。
选择Region - 5
我做了:
@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();
}
结果: