1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
package com.vaadin.tests.components.combobox;
import org.junit.Test;
import org.openqa.selenium.Keys;
import org.openqa.selenium.interactions.Actions;
import com.vaadin.testbench.By;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.elements.CheckBoxElement;
import com.vaadin.testbench.elements.ComboBoxElement;
import com.vaadin.testbench.elements.LabelElement;
import com.vaadin.tests.tb3.SingleBrowserTest;
import static org.junit.Assert.assertTrue;
public class ComboBoxAddNewItemAndResetProviderAtSameRoundTest
extends SingleBrowserTest {
protected enum SelectionType {
ENTER, TAB, CLICK_OUT;
}
private ComboBoxElement comboBoxElement;
private LabelElement valueLabelElement;
private String inputValue = "000";
@Override
public void setup() throws Exception {
super.setup();
openTestURL();
waitForElementPresent(By.className("v-filterselect"));
waitForElementPresent(By.id("reset-label"));
waitForElementPresent(By.id("value-label"));
comboBoxElement = $(ComboBoxElement.class).first();
}
/**
* Scenario: add new item and reset the data provider in the same round,
* then add the same value again with ENTER
*/
@Test
public void addNewItemAndReset_reAddWithEnter() {
itemHandling(SelectionType.ENTER, inputValue);
}
/**
* Scenario: add new item and reset the data provider in the same round,
* then add the same value again with TAB
*/
@Test
public void addNewItemAndReset_reAddWithTab() {
itemHandling(SelectionType.TAB, inputValue);
}
/**
* Scenario: add new item and reset the data provider in the same round,
* then add the same value again with clicking out side of the CB
*/
@Test
public void addNewItemAndReset_reAddWithClickOut() {
itemHandling(SelectionType.CLICK_OUT, inputValue);
}
/**
* Scenario: add new item and reset the data provider in the same round with
* 2 seconds delay, then add the same value again with ENTER
*/
@Test
public void slowAddNewItemAndReset_reAddWithEnter() {
delay(true);
itemHandling(SelectionType.ENTER, inputValue);
}
/**
* Scenario: add new item and reset the data provider in the same round with
* 2 seconds delay, then add the same value again with TAB
*/
@Test
public void slowAddNewItemAndReset_reAddWithTab() {
delay(true);
itemHandling(SelectionType.TAB, inputValue);
}
/**
* Scenario: add new item and reset the data provider in the same round with
* 2 seconds delay, then add the same value again with clicking out side
*/
@Test
public void slowAddNewItemAndReset_reAddWithClickOut() {
delay(true);
itemHandling(SelectionType.CLICK_OUT, inputValue);
}
private void itemHandling(SelectionType selectionType, String input) {
assertValueLabelText("Value Label");
sendKeysToInput(input);
sleep(1000);
// reset the dataProvider
reset();
// re-add the same value and select
sendKeysToInput(input);
performSelect(selectionType);
assertLogMessage();
}
private void assertLogMessage() {
sleep(2000);
// current test is not stable for collecting all the logs,
// so that we need to do the assertion with full log and contents.
assertTrue("The full log should contain the following text",
getLogs().toString().contains("ComboBox value : 000"));
assertTrue("The full log should contain the following text",
getLogs().toString().contains("New item has been added"));
assertTrue("The full log should contain the following text",
getLogs().toString().contains("DataProvider has been reset"));
}
private void sendKeysToInput(CharSequence... keys) {
new Actions(getDriver()).moveToElement(comboBoxElement).perform();
comboBoxElement.sendKeys(keys);
}
private void performSelect(SelectionType selectionType) {
switch (selectionType) {
case ENTER:
sendKeysToInput(Keys.ENTER);
break;
case TAB:
sendKeysToInput(Keys.TAB);
break;
case CLICK_OUT:
$(ButtonElement.class).id("button-for-click").click();
break;
}
}
private void assertValueLabelText(String value) {
valueLabelElement = $(LabelElement.class).id("value-label");
waitUntil(driver -> value.equals(valueLabelElement.getText()));
}
private void delay(boolean delay) {
CheckBoxElement checkBox = $(CheckBoxElement.class).id("delay");
if (delay != checkBox.isChecked()) {
checkBox.click();
}
}
private void reset() {
$(ButtonElement.class).id("reset").click();
}
}
|