Skip to content

Commit dcd760f

Browse files
committed
Add tests for MultiChoiceCombobox
1 parent c5e0b61 commit dcd760f

File tree

6 files changed

+211
-4
lines changed

6 files changed

+211
-4
lines changed

src/test/java/tests/integration/ElementTests.java renamed to src/test/java/tests/integration/elements/ElementTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package tests.integration;
1+
package tests.integration.elements;
22

33
import aquality.selenium.browser.AqualityServices;
44
import aquality.selenium.core.elements.ElementState;

src/test/java/tests/integration/HiddenElementsTests.java renamed to src/test/java/tests/integration/elements/HiddenElementsTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package tests.integration;
1+
package tests.integration.elements;
22

33
import aquality.selenium.browser.AqualityServices;
44
import aquality.selenium.core.elements.ElementState;
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package tests.integration.elements;
2+
3+
import aquality.selenium.browser.AqualityServices;
4+
import org.testng.Assert;
5+
import org.testng.annotations.AfterClass;
6+
import org.testng.annotations.AfterMethod;
7+
import org.testng.annotations.BeforeMethod;
8+
import org.testng.annotations.Test;
9+
import tests.BaseTest;
10+
import w3schools.W3SchoolsPage;
11+
import w3schools.forms.SelectMultipleForm;
12+
13+
import java.util.List;
14+
import java.util.stream.Collectors;
15+
import java.util.stream.Stream;
16+
17+
public class MultiChoiceComboBoxTests extends BaseTest {
18+
19+
private final SelectMultipleForm selectMultipleForm = new SelectMultipleForm();
20+
21+
@BeforeMethod
22+
@Override
23+
public void beforeMethod() {
24+
getBrowser().goTo(W3SchoolsPage.SELECT_MULTIPLE.getAddress());
25+
getBrowser().setWindowSize(defaultSize.width, defaultSize.height);
26+
}
27+
28+
@Test
29+
public void testDeselectByValue() {
30+
List<String> valuesToRemove = Stream.of("volvo", "saab").collect(Collectors.toList());
31+
32+
selectMultipleForm.switchToResultFrame();
33+
selectMultipleForm.selectAll();
34+
List<String> remaining = selectMultipleForm.deselectByValue(valuesToRemove);
35+
selectMultipleForm.submit();
36+
37+
Assert.assertEquals(selectMultipleForm.getValuesFromResult(), remaining);
38+
}
39+
40+
@Test
41+
public void testDeselectByContainingValue() {
42+
List<String> valuesToRemove = Stream.of("saa", "ope").collect(Collectors.toList());
43+
44+
selectMultipleForm.switchToResultFrame();
45+
selectMultipleForm.selectAll();
46+
List<String> remaining = selectMultipleForm.deselectByContainingValue(valuesToRemove);
47+
selectMultipleForm.submit();
48+
49+
Assert.assertEquals(selectMultipleForm.getValuesFromResult(), remaining);
50+
}
51+
52+
@Test
53+
public void testDeselectByText() {
54+
List<String> valuesToRemove = Stream.of("Opel").collect(Collectors.toList());
55+
56+
selectMultipleForm.switchToResultFrame();
57+
selectMultipleForm.selectAll();
58+
List<String> remaining = selectMultipleForm.deselectByText(valuesToRemove);
59+
selectMultipleForm.submit();
60+
61+
Assert.assertEquals(selectMultipleForm.getValuesFromResult(), remaining);
62+
}
63+
64+
@Test
65+
public void testDeselectByContainingText() {
66+
List<String> valuesToRemove = Stream.of("Au", "Vol").collect(Collectors.toList());
67+
68+
selectMultipleForm.switchToResultFrame();
69+
selectMultipleForm.selectAll();
70+
List<String> remaining = selectMultipleForm.deselectByContainingText(valuesToRemove);
71+
selectMultipleForm.submit();
72+
73+
Assert.assertEquals(selectMultipleForm.getValuesFromResult(), remaining);
74+
}
75+
76+
@Test
77+
public void testDeselectByIndex() {
78+
List<Integer> valuesToRemove = Stream.of(2, 3).collect(Collectors.toList());
79+
80+
selectMultipleForm.switchToResultFrame();
81+
selectMultipleForm.selectAll();
82+
List<String> remaining = selectMultipleForm.deselectByIndex(valuesToRemove);
83+
selectMultipleForm.submit();
84+
85+
Assert.assertEquals(selectMultipleForm.getValuesFromResult(), remaining);
86+
}
87+
88+
@Test
89+
public void testDeselectAll() {
90+
selectMultipleForm.switchToResultFrame();
91+
selectMultipleForm.selectAll();
92+
selectMultipleForm.deselectAll();
93+
selectMultipleForm.submit();
94+
95+
Assert.assertTrue(selectMultipleForm.getValuesFromResult().isEmpty());
96+
}
97+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package w3schools;
2+
3+
public enum W3SchoolsPage {
4+
SELECT_MULTIPLE("tryhtml_select_multiple");
5+
6+
private static final String BASE_URL = "https://www.w3schools.com/tags/tryit.asp";
7+
8+
private final String postfix;
9+
10+
W3SchoolsPage(String postfix) {
11+
this.postfix = postfix;
12+
}
13+
14+
public String getAddress() {
15+
return BASE_URL.concat(String.format("?filename=%s", postfix));
16+
}
17+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package w3schools.forms;
2+
3+
import aquality.selenium.browser.AqualityServices;
4+
import aquality.selenium.elements.interfaces.IButton;
5+
import aquality.selenium.elements.interfaces.IMultiChoiceComboBox;
6+
import aquality.selenium.elements.interfaces.ITextBox;
7+
import aquality.selenium.forms.Form;
8+
import org.openqa.selenium.By;
9+
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
import java.util.function.Consumer;
13+
import java.util.function.IntSupplier;
14+
import java.util.regex.Matcher;
15+
import java.util.regex.Pattern;
16+
import java.util.stream.Collectors;
17+
import java.util.stream.IntStream;
18+
19+
public class SelectMultipleForm extends Form {
20+
21+
private final IMultiChoiceComboBox cbxCars = getElementFactory().getMultiChoiceComboBox(By.id("cars"), "Cars");
22+
private final IButton btnSubmit = getElementFactory().getButton(By.cssSelector("input[type='submit']"), "Submit");
23+
private final ITextBox txbResult = getElementFactory().getTextBox(By.cssSelector(".w3-large"), "Result");
24+
25+
public SelectMultipleForm() {
26+
super(By.id("iframe"), "Select Multiple");
27+
}
28+
29+
public void switchToResultFrame() {
30+
AqualityServices.getBrowser().getDriver().switchTo().frame("iframeResult");
31+
}
32+
33+
public void submit() {
34+
btnSubmit.clickAndWait();
35+
}
36+
37+
public List<String> getValuesFromResult() {
38+
String result = txbResult.getText().trim();
39+
40+
List<String> results = new ArrayList<>();
41+
Pattern pattern = Pattern.compile(".*?=(.*?)(&|$)");
42+
Matcher matcher = pattern.matcher(result);
43+
while (matcher.find()) {
44+
results.add(matcher.group(1));
45+
}
46+
return results;
47+
}
48+
49+
public void selectAll() {
50+
cbxCars.getValues().forEach(cbxCars::selectByValue);
51+
}
52+
53+
public List<String> deselectByValue(List<String> valuesToDeselect) {
54+
return deselectBy(cbxCars::deselectByValue, valuesToDeselect);
55+
}
56+
57+
public List<String> deselectByContainingValue(List<java.lang.String> valuesToDeselect) {
58+
return deselectBy(cbxCars::deselectByContainingValue, valuesToDeselect);
59+
}
60+
61+
public List<String> deselectByText(List<String> textToDeselect) {
62+
return deselectBy(cbxCars::deselectByText, textToDeselect);
63+
}
64+
65+
public List<String> deselectByContainingText(List<java.lang.String> textToDeselect) {
66+
return deselectBy(cbxCars::deselectByContainingText, textToDeselect);
67+
}
68+
69+
public List<String> deselectByIndex(List<Integer> indeciesToDeselect) {
70+
List<String> values = cbxCars.getValues();
71+
indeciesToDeselect.forEach(cbxCars::deselectByIndex);
72+
return IntStream.range(0, values.size())
73+
.filter(i -> !indeciesToDeselect.contains(i))
74+
.mapToObj(values::get)
75+
.collect(Collectors.toList());
76+
}
77+
78+
public void deselectAll() {
79+
cbxCars.deselectAll();
80+
}
81+
82+
private List<String> deselectBy(Consumer<String> deselectFunc, List<String> valuesToDeselect) {
83+
valuesToDeselect.forEach(deselectFunc);
84+
return collectRemaining(valuesToDeselect);
85+
}
86+
87+
private List<String> collectRemaining(List<String> valuesToDeselect) {
88+
return cbxCars.getValues().stream()
89+
.filter(v -> valuesToDeselect.stream()
90+
.noneMatch(deselected -> v.contains(deselected.toLowerCase())))
91+
.collect(Collectors.toList());
92+
}
93+
}

src/test/resources/TestSuite.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
<class name="tests.integration.AlertTests"/>
88
<class name="tests.integration.BrowserTests"/>
99
<class name="tests.integration.BrowserTabsTests"/>
10-
<class name="tests.integration.ElementTests"/>
10+
<class name="tests.integration.elements.ElementTests"/>
1111
<class name="tests.integration.ElementStateTests"/>
12-
<class name="tests.integration.HiddenElementsTests"/>
12+
<class name="tests.integration.elements.HiddenElementsTests"/>
1313
<class name="aquality.selenium.localization.LocalizationManagerTests"/>
1414
<class name="tests.usecases.TestTimeoutConfiguration"/>
1515
</classes>

0 commit comments

Comments
 (0)