package org.fluentlenium.integration;
import org.fluentlenium.core.domain.FluentWebElement;
import org.fluentlenium.core.events.NavigateAllListener;
import org.fluentlenium.core.events.annotations.AfterClickOn;
import org.fluentlenium.core.events.annotations.AfterFindBy;
import org.fluentlenium.core.events.annotations.AfterNavigate;
import org.fluentlenium.core.events.annotations.AfterNavigateRefresh;
import org.fluentlenium.core.events.annotations.BeforeClickOn;
import org.fluentlenium.core.events.annotations.BeforeFindBy;
import org.fluentlenium.core.events.annotations.BeforeNavigate;
import org.fluentlenium.core.events.annotations.BeforeNavigateRefresh;
import org.fluentlenium.integration.localtest.IntegrationFluentTest;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class AnnotationsEventsTest extends IntegrationFluentTest {
private final List<WebElement> beforeClick = new ArrayList<>();
private final List<WebElement> afterClick = new ArrayList<>();
private int beforeFindBy;
private int afterFindBy;
private int beforeNavigate;
private int afterNavigate;
private int beforeNavigateRefresh;
private int afterNavigateRefresh;
private static final class Component {
private final WebElement element;
private Component(WebElement element) {
this.element = element;
}
public void click() {
element.click();
}
@BeforeClickOn
public void beforeClickOn() {
//Do nothing.
}
}
@Test
public void clickOn() {
goTo(DEFAULT_URL);
$("button").click();
assertThat(beforeClick).hasSize(1);
assertThat(afterClick).hasSize(1);
}
@BeforeClickOn
private void beforeClickOn(FluentWebElement element) { // NOPMD UnusedPrivateMethod
assertThat(element.tagName()).isEqualTo("button");
assertThat(afterClick).doesNotContain(element.getElement());
beforeClick.add(element.getElement());
}
@AfterClickOn
public void afterClickOn(FluentWebElement element) { // NOPMD UnusedPrivateMethod
assertThat(element.tagName()).isEqualTo("button");
ArrayList<WebElement> webElements = new ArrayList<>(afterClick);
webElements.add(element.getElement());
assertThat(beforeClick).containsExactlyElementsOf(webElements);
afterClick.add(element.getElement());
}
@Test
public void findBy() {
goTo(DEFAULT_URL);
el("button").now();
assertThat(beforeFindBy).isEqualTo(1);
assertThat(afterFindBy).isEqualTo(1);
}
@BeforeFindBy
public void beforeFindBy(FluentWebElement element) {
assertThat(element).isNull();
beforeFindBy++;
}
@AfterFindBy
public void afterFindBy(FluentWebElement element) {
assertThat(element).isNull();
afterFindBy++;
}
@Test
public void navigate() {
goTo(DEFAULT_URL);
assertThat(beforeNavigate).isEqualTo(1);
assertThat(afterNavigate).isEqualTo(1);
getDriver().navigate().refresh();
assertThat(beforeNavigate).isEqualTo(2);
assertThat(afterNavigate).isEqualTo(2);
}
@BeforeNavigate
public void beforeNavigate(String url, NavigateAllListener.Direction direction) {
beforeNavigate++;
if (beforeNavigate == 1) {
assertThat(url).isEqualTo(DEFAULT_URL);
assertThat(direction).isEqualTo(null);
}
if (beforeNavigate == 2) {
assertThat(url).isNull();
assertThat(direction).isEqualTo(NavigateAllListener.Direction.REFRESH);
}
}
@AfterNavigate
public void afterNavigate(String url, NavigateAllListener.Direction direction) {
afterNavigate++;
if (afterNavigate == 1) {
assertThat(url).isEqualTo(DEFAULT_URL);
assertThat(direction).isEqualTo(null);
}
if (afterNavigate == 2) {
assertThat(url).isNull();
assertThat(direction).isEqualTo(NavigateAllListener.Direction.REFRESH);
}
}
@Test
public void refresh() {
goTo(DEFAULT_URL);
assertThat(beforeNavigateRefresh).isEqualTo(0);
assertThat(afterNavigateRefresh).isEqualTo(0);
getDriver().navigate().refresh();
assertThat(beforeNavigateRefresh).isEqualTo(1);
assertThat(afterNavigateRefresh).isEqualTo(1);
}
@BeforeNavigateRefresh
public void beforeNavigateRefresh() {
beforeNavigateRefresh++;
}
@AfterNavigateRefresh
public void afterNavigateRefresh() {
afterNavigateRefresh++;
}
}