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

Commit 15f5dbb

Browse files
committed
Refactored tests of browser operations to be truly isolated from outside influences
1 parent 4fa5c14 commit 15f5dbb

File tree

8 files changed

+469
-362
lines changed

8 files changed

+469
-362
lines changed

webtester-core/src/main/java/info/novatec/testit/webtester/browser/operations/FocusSetter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ public void onFrame(int index) throws NoSuchFrameException {
5151
log.debug("focused on frame with index: {}", index);
5252
}
5353

54-
private WebDriver doOnFrame(Browser browser, int index) {
55-
return browser.webDriver().switchTo().frame(index);
54+
private void doOnFrame(Browser browser, int index) {
55+
browser.webDriver().switchTo().frame(index);
5656
}
5757

5858
/**
@@ -70,8 +70,8 @@ public void onFrame(String nameOrId) throws NoSuchFrameException {
7070
log.debug("focused on frame with name or ID: {}", nameOrId);
7171
}
7272

73-
private WebDriver doOnFrame(Browser browser, String nameOrId) {
74-
return browser.webDriver().switchTo().frame(nameOrId);
73+
private void doOnFrame(Browser browser, String nameOrId) {
74+
browser.webDriver().switchTo().frame(nameOrId);
7575
}
7676

7777
/**
@@ -89,8 +89,8 @@ public void onFrame(PageFragment frame) throws NoSuchFrameException {
8989
log.debug("focused on frame page fragment: {}", frame);
9090
}
9191

92-
private WebDriver doOnFrame(Browser browser, PageFragment frame) {
93-
return browser.webDriver().switchTo().frame(frame.webElement());
92+
private void doOnFrame(Browser browser, PageFragment frame) {
93+
browser.webDriver().switchTo().frame(frame.webElement());
9494
}
9595

9696
/**

webtester-core/src/test/java/info/novatec/testit/webtester/browser/WebDriverBrowserTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,13 @@ public void openingAnUrlInvokesTheOpenUrlOperationClass() {
199199
verify(open).url("http://www.foo.com");
200200
}
201201

202+
@Test
203+
public void openingAnUrlReturnsSameBrowser() {
204+
TestUtils.setFieldValue(browser, "open", open);
205+
Browser returnedBrowser = this.browser.open("http://www.foo.com");
206+
assertThat(returnedBrowser).isSameAs(browser);
207+
}
208+
202209
}
203210

204211
public static class FactoryAndBuilder {

webtester-core/src/test/java/info/novatec/testit/webtester/browser/operations/AlertHandlerTest.java

Lines changed: 51 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package info.novatec.testit.webtester.browser.operations;
22

33
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.mockito.Mockito.doReturn;
45
import static org.mockito.Mockito.mock;
56
import static org.mockito.Mockito.verify;
67
import static org.mockito.Mockito.when;
@@ -12,6 +13,7 @@
1213
import org.mockito.Answers;
1314
import org.mockito.ArgumentCaptor;
1415
import org.mockito.Captor;
16+
import org.mockito.InjectMocks;
1517
import org.mockito.Mock;
1618
import org.mockito.runners.MockitoJUnitRunner;
1719
import org.openqa.selenium.Alert;
@@ -20,10 +22,7 @@
2022
import org.openqa.selenium.security.Credentials;
2123
import org.openqa.selenium.security.UserAndPassword;
2224

23-
import utils.events.EventCaptor;
24-
2525
import info.novatec.testit.webtester.browser.Browser;
26-
import info.novatec.testit.webtester.browser.WebDriverBrowser;
2726
import info.novatec.testit.webtester.events.EventSystem;
2827
import info.novatec.testit.webtester.events.browser.AcceptedAlertEvent;
2928
import info.novatec.testit.webtester.events.browser.DeclinedAlertEvent;
@@ -37,16 +36,19 @@ static abstract class AbstractAlertHandlerTest {
3736

3837
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
3938
WebDriver webDriver;
40-
39+
@Mock
40+
EventSystem events;
41+
@Mock
4142
Browser browser;
42-
EventSystem eventSystem;
43+
44+
@InjectMocks
4345
AlertHandler cut;
4446

4547
@Before
46-
public void initializeClassUnderTest() {
47-
browser = WebDriverBrowser.forWebDriver(webDriver).build();
48-
eventSystem = browser.events();
49-
cut = new AlertHandler(browser);
48+
public void init() {
49+
doReturn(webDriver).when(browser).webDriver();
50+
doReturn(events).when(browser).events();
51+
doReturn(true).when(events).isEnabled();
5052
}
5153

5254
Alert alertIsPresent(String message) {
@@ -65,6 +67,9 @@ void alertIsNotPresent() {
6567

6668
public static class Accept extends AbstractAlertHandlerTest {
6769

70+
@Captor
71+
ArgumentCaptor<AcceptedAlertEvent> eventCaptor;
72+
6873
@Test
6974
public void alertsCanBeAccepted() {
7075
Alert alert = alertIsPresent("hello alert!");
@@ -81,16 +86,19 @@ public void acceptingNonExistentAlertThrowsException() {
8186
@Test
8287
public void acceptingAnAlertFiresEvent() {
8388
alertIsPresent("hello alert!");
84-
EventCaptor.capture(eventSystem, AcceptedAlertEvent.class)
85-
.execute(() -> cut.accept())
86-
.assertEventWasFired()
87-
.assertEvent(event -> assertThat(event.getAlertMessage()).isEqualTo("hello alert!"));
89+
cut.accept();
90+
verify(events).fireEvent(eventCaptor.capture());
91+
AcceptedAlertEvent event = eventCaptor.getValue();
92+
assertThat(event.getAlertMessage()).isEqualTo("hello alert!");
8893
}
8994

9095
}
9196

9297
public static class AcceptIfPresent extends AbstractAlertHandlerTest {
9398

99+
@Captor
100+
ArgumentCaptor<AcceptedAlertEvent> eventCaptor;
101+
94102
@Test
95103
public void alertsCanBeAcceptedIfTheyArePresent() {
96104
Alert alert = alertIsPresent("hello alert!");
@@ -105,10 +113,22 @@ public void acceptingAnAlertIfItsPresentDoesNotThrowExceptionIfNoAlertExists() {
105113
// no exception
106114
}
107115

116+
@Test
117+
public void acceptingAnAlertFiresEvent() {
118+
alertIsPresent("hello alert!");
119+
cut.acceptIfPresent();
120+
verify(events).fireEvent(eventCaptor.capture());
121+
AcceptedAlertEvent event = eventCaptor.getValue();
122+
assertThat(event.getAlertMessage()).isEqualTo("hello alert!");
123+
}
124+
108125
}
109126

110127
public static class Decline extends AbstractAlertHandlerTest {
111128

129+
@Captor
130+
ArgumentCaptor<DeclinedAlertEvent> eventCaptor;
131+
112132
@Test
113133
public void alertsCanBeDeclined() {
114134
Alert alert = alertIsPresent("hello alert!");
@@ -125,16 +145,19 @@ public void decliningNonExistentAlertThrowsException() {
125145
@Test
126146
public void decliningAnAlertFiresEvent() {
127147
alertIsPresent("hello alert!");
128-
EventCaptor.capture(eventSystem, DeclinedAlertEvent.class)
129-
.execute(() -> cut.decline())
130-
.assertEventWasFired()
131-
.assertEvent(event -> assertThat(event.getAlertMessage()).isEqualTo("hello alert!"));
148+
cut.decline();
149+
verify(events).fireEvent(eventCaptor.capture());
150+
DeclinedAlertEvent event = eventCaptor.getValue();
151+
assertThat(event.getAlertMessage()).isEqualTo("hello alert!");
132152
}
133153

134154
}
135155

136156
public static class DeclineIfPresent extends AbstractAlertHandlerTest {
137157

158+
@Captor
159+
ArgumentCaptor<DeclinedAlertEvent> eventCaptor;
160+
138161
@Test
139162
public void alertsCanBeDeclinedIfTheyArePresent() {
140163
Alert alert = alertIsPresent("hello alert!");
@@ -149,6 +172,15 @@ public void decliningAnAlertIfItsPresentDoesNotThrowExceptionIfNoAlertExists() {
149172
// no exception
150173
}
151174

175+
@Test
176+
public void decliningAnAlertFiresEvent() {
177+
alertIsPresent("hello alert!");
178+
cut.declineIfPresent();
179+
verify(events).fireEvent(eventCaptor.capture());
180+
DeclinedAlertEvent event = eventCaptor.getValue();
181+
assertThat(event.getAlertMessage()).isEqualTo("hello alert!");
182+
}
183+
152184
}
153185

154186
public static class IsPresent extends AbstractAlertHandlerTest {
@@ -193,7 +225,7 @@ public void canAuthenticateWithCredentials() {
193225

194226
Alert alert = alertIsPresent("please sign in");
195227
Credentials credentials = new UserAndPassword("foo", "bar");
196-
browser.alert().authenticateWith(credentials);
228+
cut.authenticateWith(credentials);
197229

198230
verify(alert).authenticateUsing(credentials);
199231

@@ -203,7 +235,7 @@ public void canAuthenticateWithCredentials() {
203235
public void canAuthenticateWithUsernameAndPassword() {
204236

205237
Alert alert = alertIsPresent("please sign in");
206-
browser.alert().authenticateWith("foo", "bar");
238+
cut.authenticateWith("foo", "bar");
207239
verify(alert).authenticateUsing(credentialsCaptor.capture());
208240

209241
Credentials credentials = credentialsCaptor.getValue();

0 commit comments

Comments
 (0)