All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.novatec.testit.webtester.mouse.DefaultMouseDriver Maven / Gradle / Ivy

package info.novatec.testit.webtester.mouse;

import static info.novatec.testit.webtester.conditions.Conditions.visible;

import java.util.Arrays;
import java.util.Collection;
import java.util.function.BiFunction;

import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;

import info.novatec.testit.webtester.events.pagefragments.ClickedEvent;
import info.novatec.testit.webtester.events.pagefragments.ContextClickedEvent;
import info.novatec.testit.webtester.events.pagefragments.DoubleClickedEvent;
import info.novatec.testit.webtester.internal.ActionTemplate;
import info.novatec.testit.webtester.pagefragments.PageFragment;
import info.novatec.testit.webtester.waiting.Wait;


/**
 * The default implementation of a {@link MouseDriver}.
 * 

* Note: Methods provided by this class depend on Selenium's {@link Actions} class. * There are some {@link WebDriver} implementation (e.g. v3.0.1 of the Marionette-based FirefoxDriver) * which do not support the commands issued by {@link Actions}! * * @since 2.0 */ class DefaultMouseDriver implements MouseDriver { @Override public void click(PageFragment fragment) { ActionTemplate.pageFragment(fragment) .execute((f) -> perform(f, Actions::click)) .fireEvent(ClickedEvent::new) .markAsUsed(); } @Override public void doubleClick(PageFragment fragment) { ActionTemplate.pageFragment(fragment) .execute((f) -> perform(f, Actions::doubleClick)) .fireEvent(DoubleClickedEvent::new) .markAsUsed(); } @Override public void contextClick(PageFragment fragment) { ActionTemplate.pageFragment(fragment) .execute((f) -> perform(f, Actions::contextClick)) .fireEvent(ContextClickedEvent::new) .markAsUsed(); } @Override public void moveToEach(PageFragment fragment, PageFragment... fragments) throws TimeoutException { moveTo(fragment); moveToEach(Arrays.asList(fragments)); } @Override public void moveToEach(Collection fragments) throws TimeoutException { fragments.forEach(this::moveTo); } @Override public void moveTo(PageFragment fragment) throws TimeoutException { ActionTemplate.pageFragment(fragment).execute((f) -> { Wait.until(f).is(visible()); perform(f, Actions::moveToElement); }); } private void perform(PageFragment fragment, BiFunction biConsumer) { biConsumer.apply(sequenceFor(fragment), fragment.webElement()).perform(); } private Actions sequenceFor(PageFragment fragment) { return new Actions(fragment.browser().webDriver()); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy