package org.fluentlenium.integration;
import org.fluentlenium.core.FluentControl;
import org.fluentlenium.core.annotation.Page;
import org.fluentlenium.core.components.ComponentInstantiator;
import org.fluentlenium.core.domain.FluentWebElement;
import org.fluentlenium.core.events.annotations.AfterClickOn;
import org.fluentlenium.integration.localtest.IntegrationFluentTest;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
public class AnnotationsComponentsPriorityEventsTest extends IntegrationFluentTest {
@Page
private TestPage page;
@FindBy(css = "button.class1.class2.class3")
private TestComponent component;
@FindBy(css = "#oneline")
private TestComponent component2;
private static List<String> clicks = new ArrayList<>();
public static class TestPage {
@AfterClickOn(5)
public void afterClick(FluentWebElement element) {
clicks.add("page");
}
@AfterClickOn(25)
public void afterClick2(FluentWebElement element) {
clicks.add("page");
}
}
public static class TestComponent extends FluentWebElement {
/**
* Creates a new fluent web element.
*
* @param element underlying element
* @param control controle interface
* @param instantiator component instantiator
*/
public TestComponent(WebElement element, FluentControl control, ComponentInstantiator instantiator) {
super(element, control, instantiator);
}
@AfterClickOn(10)
public void afterClick() {
clicks.add("component");
}
@AfterClickOn(15)
public void afterClick2() {
clicks.add("component");
}
}
public static class TestComponent2 extends FluentWebElement {
/**
* Creates a new fluent web element.
*
* @param element underlying element
* @param control controle interface
* @param instantiator component instantiator
*/
public TestComponent2(WebElement element, FluentControl control, ComponentInstantiator instantiator) {
super(element, control, instantiator);
}
@AfterClickOn(15)
public void afterClick() {
clicks.add("component2");
}
}
@Test
public void testEventsPriority() {
goTo(DEFAULT_URL);
component.click();
assertThat(clicks).containsExactly("page", "component", "component", "page");
}
}