Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit f025f08

Browse files
committed
Added unit tests for AdHoc Finder API
1 parent 2d4f54c commit f025f08

File tree

6 files changed

+529
-17
lines changed

6 files changed

+529
-17
lines changed

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/AdHocFinder.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import org.openqa.selenium.By;
44
import org.openqa.selenium.SearchContext;
55

6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
69
import info.novatec.testit.webtester.browser.Browser;
710
import info.novatec.testit.webtester.internal.PageFragmentFactory;
811
import info.novatec.testit.webtester.pagefragments.GenericElement;
@@ -25,10 +28,11 @@
2528
* @see Browser#finder()
2629
* @since 2.0
2730
*/
31+
@Getter(AccessLevel.PACKAGE)
2832
public final class AdHocFinder {
2933

30-
private final SearchContext searchContext;
3134
private final PageFragmentFactory factory;
35+
private final SearchContext searchContext;
3236

3337
/**
3438
* Creates a new {@link AdHocFinder finder} instance using the given {@link Browser browser} as a base. The
@@ -42,7 +46,8 @@ public final class AdHocFinder {
4246
* @since 2.0
4347
*/
4448
public AdHocFinder(Browser browser) {
45-
this(browser, browser.webDriver());
49+
this.factory = new PageFragmentFactory(browser);
50+
this.searchContext = browser.webDriver();
4651
}
4752

4853
/**
@@ -56,12 +61,14 @@ public AdHocFinder(Browser browser) {
5661
* @since 2.0
5762
*/
5863
public AdHocFinder(PageFragment parent) {
59-
this(parent.getBrowser(), parent.webElement());
64+
this.factory = new PageFragmentFactory(parent.getBrowser());
65+
this.searchContext = parent.webElement();
6066
}
6167

62-
private AdHocFinder(Browser browser, SearchContext searchContext) {
68+
// Constructor used for unit tests.
69+
AdHocFinder(PageFragmentFactory factory, SearchContext searchContext) {
70+
this.factory = factory;
6371
this.searchContext = searchContext;
64-
this.factory = new PageFragmentFactory(browser);
6572
}
6673

6774
/**
@@ -95,7 +102,7 @@ public ByFinder find(String cssSelector) {
95102
* @since 2.0
96103
*/
97104
public ByFinder findBy(By by) {
98-
return new ByFinder(searchContext, by, factory);
105+
return new ByFinder(factory, searchContext, by);
99106
}
100107

101108
/**
@@ -110,7 +117,7 @@ public ByFinder findBy(By by) {
110117
* @since 2.0
111118
*/
112119
public TypeFinder<GenericElement> findGeneric() {
113-
return new TypeFinder<>(searchContext, GenericElement.class, factory);
120+
return new TypeFinder<>(factory, searchContext, GenericElement.class);
114121
}
115122

116123
/**
@@ -125,7 +132,7 @@ public TypeFinder<GenericElement> findGeneric() {
125132
* @since 2.0
126133
*/
127134
public <T extends PageFragment> TypeFinder<T> find(Class<T> fragmentClass) {
128-
return new TypeFinder<>(searchContext, fragmentClass, factory);
135+
return new TypeFinder<>(factory, searchContext, fragmentClass);
129136
}
130137

131138
}

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/ByFinder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import org.openqa.selenium.SearchContext;
77
import org.openqa.selenium.WebElement;
88

9+
import lombok.AccessLevel;
10+
import lombok.Getter;
11+
912
import info.novatec.testit.webtester.internal.PageFragmentFactory;
1013
import info.novatec.testit.webtester.pagefragments.GenericElement;
1114
import info.novatec.testit.webtester.pagefragments.PageFragment;
@@ -26,16 +29,17 @@
2629
* @see ByFinder#asManyGenerics()
2730
* @since 2.0
2831
*/
32+
@Getter(AccessLevel.PACKAGE)
2933
public class ByFinder {
3034

35+
private final PageFragmentFactory factory;
3136
private final SearchContext searchContext;
3237
private final By by;
33-
private final PageFragmentFactory factory;
3438

35-
public ByFinder(SearchContext searchContext, By by, PageFragmentFactory factory) {
39+
public ByFinder(PageFragmentFactory factory, SearchContext searchContext, By by) {
40+
this.factory = factory;
3641
this.searchContext = searchContext;
3742
this.by = by;
38-
this.factory = factory;
3943
}
4044

4145
/**
@@ -92,9 +96,7 @@ public Stream<GenericElement> asManyGenerics() {
9296
* @since 2.0
9397
*/
9498
public <T extends PageFragment> Stream<T> asMany(Class<T> fragmentClass) {
95-
return searchContext.findElements(by)
96-
.stream()
97-
.map(webElement -> factory.pageFragment(fragmentClass, webElement));
99+
return searchContext.findElements(by).stream().map(webElement -> factory.pageFragment(fragmentClass, webElement));
98100
}
99101

100102
}

webtester-core/src/main/java/info/novatec/testit/webtester/adhoc/TypeFinder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import org.openqa.selenium.SearchContext;
77
import org.openqa.selenium.WebElement;
88

9+
import lombok.AccessLevel;
10+
import lombok.Getter;
11+
912
import info.novatec.testit.webtester.internal.PageFragmentFactory;
1013
import info.novatec.testit.webtester.pagefragments.PageFragment;
1114
import info.novatec.testit.webtester.pagefragments.identification.ByProducers;
@@ -26,16 +29,17 @@
2629
* @see TypeFinder#manyBy(By)
2730
* @since 2.0
2831
*/
32+
@Getter(AccessLevel.PACKAGE)
2933
public class TypeFinder<T extends PageFragment> {
3034

35+
private final PageFragmentFactory factory;
3136
private final SearchContext searchContext;
3237
private final Class<T> fragmentClass;
33-
private final PageFragmentFactory factory;
3438

35-
public TypeFinder(SearchContext searchContext, Class<T> fragmentClass, PageFragmentFactory factory) {
39+
public TypeFinder(PageFragmentFactory factory, SearchContext searchContext, Class<T> fragmentClass) {
40+
this.factory = factory;
3641
this.searchContext = searchContext;
3742
this.fragmentClass = fragmentClass;
38-
this.factory = factory;
3943
}
4044

4145
/**
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
package info.novatec.testit.webtester.adhoc;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.doReturn;
5+
import static org.mockito.Mockito.mock;
6+
7+
import org.junit.Test;
8+
import org.junit.experimental.runners.Enclosed;
9+
import org.junit.runner.RunWith;
10+
import org.mockito.InjectMocks;
11+
import org.mockito.Mock;
12+
import org.mockito.runners.MockitoJUnitRunner;
13+
import org.openqa.selenium.By;
14+
import org.openqa.selenium.SearchContext;
15+
import org.openqa.selenium.WebDriver;
16+
import org.openqa.selenium.WebElement;
17+
18+
import info.novatec.testit.webtester.browser.Browser;
19+
import info.novatec.testit.webtester.internal.PageFragmentFactory;
20+
import info.novatec.testit.webtester.pagefragments.GenericElement;
21+
import info.novatec.testit.webtester.pagefragments.PageFragment;
22+
import info.novatec.testit.webtester.pagefragments.identification.ByProducers;
23+
24+
25+
@RunWith(Enclosed.class)
26+
public class AdHocFinderTest {
27+
28+
@RunWith(MockitoJUnitRunner.class)
29+
public static abstract class AbstractAdHocFinderTest {
30+
31+
@Mock
32+
PageFragmentFactory factory;
33+
@Mock
34+
SearchContext searchContext;
35+
36+
@InjectMocks
37+
AdHocFinder cut;
38+
39+
}
40+
41+
public static class FindString extends AbstractAdHocFinderTest {
42+
43+
@Test
44+
public void byFinderIsCreatedCorrectly() {
45+
46+
ByFinder finder = cut.find("#someId");
47+
assertThat(finder.getFactory()).isSameAs(factory);
48+
assertThat(finder.getSearchContext()).isSameAs(searchContext);
49+
50+
By by = finder.getBy();
51+
assertThat(by).isInstanceOf(By.ByCssSelector.class);
52+
assertThat(by).hasToString("By.cssSelector: #someId");
53+
54+
}
55+
56+
}
57+
58+
public static class FindBy extends AbstractAdHocFinderTest {
59+
60+
@Test
61+
public void byFinderIsCreatedCorrectly() {
62+
63+
ByFinder finder = cut.findBy(ByProducers.id("someId"));
64+
assertThat(finder.getFactory()).isSameAs(factory);
65+
assertThat(finder.getSearchContext()).isSameAs(searchContext);
66+
67+
By by = finder.getBy();
68+
assertThat(by).isInstanceOf(By.ById.class);
69+
assertThat(by).hasToString("By.id: someId");
70+
71+
}
72+
73+
}
74+
75+
public static class FindGeneric extends AbstractAdHocFinderTest {
76+
77+
@Test
78+
public void typeFinderIsCreatedCorrectly() {
79+
80+
TypeFinder<GenericElement> finder = cut.findGeneric();
81+
assertThat(finder.getFactory()).isSameAs(factory);
82+
assertThat(finder.getSearchContext()).isSameAs(searchContext);
83+
assertThat(finder.getFragmentClass()).isEqualTo(GenericElement.class);
84+
85+
}
86+
87+
}
88+
89+
public static class FindClass extends AbstractAdHocFinderTest {
90+
91+
@Test
92+
public void typeFinderIsCreatedCorrectly() {
93+
94+
TypeFinder<TestFragment> finder = cut.find(TestFragment.class);
95+
assertThat(finder.getFactory()).isSameAs(factory);
96+
assertThat(finder.getSearchContext()).isSameAs(searchContext);
97+
assertThat(finder.getFragmentClass()).isEqualTo(TestFragment.class);
98+
99+
}
100+
101+
public interface TestFragment extends PageFragment {
102+
}
103+
104+
}
105+
106+
public static class Construction {
107+
108+
@Test
109+
public void creatingForBrowserUsesWebDriverAsSearchContext() {
110+
111+
Browser browser = mock(Browser.class);
112+
WebDriver webDriver = mock(WebDriver.class);
113+
doReturn(webDriver).when(browser).webDriver();
114+
115+
AdHocFinder cut = new AdHocFinder(browser);
116+
117+
assertThat(cut.getSearchContext()).isSameAs(webDriver);
118+
assertThat(cut.getFactory()).isNotNull();
119+
120+
}
121+
122+
@Test
123+
public void creatingForPageFragmentUsesWebElementAsSearchContext() {
124+
125+
PageFragment pageFragment = mock(PageFragment.class);
126+
WebElement webElement = mock(WebElement.class);
127+
doReturn(webElement).when(pageFragment).webElement();
128+
129+
AdHocFinder cut = new AdHocFinder(pageFragment);
130+
131+
assertThat(cut.getSearchContext()).isSameAs(webElement);
132+
assertThat(cut.getFactory()).isNotNull();
133+
134+
}
135+
136+
}
137+
138+
}

0 commit comments

Comments
 (0)