package jp.vmi.selenium.selenese;
import java.io.PrintStream;
import java.util.List;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.internal.WrapsDriver;
import jp.vmi.selenium.rollup.RollupRules;
import jp.vmi.selenium.selenese.command.CommandListIterator;
import jp.vmi.selenium.selenese.command.ICommandFactory;
import jp.vmi.selenium.selenese.javascript.JSLibrary;
import jp.vmi.selenium.selenese.locator.WebDriverElementFinder;
import jp.vmi.selenium.selenese.log.CookieFilter;
import jp.vmi.selenium.selenese.log.PageInformation;
import jp.vmi.selenium.selenese.subcommand.SubCommandMap;
/**
* Selenese Runner Context.
*/
public interface Context extends WrapsDriver {
/**
* Prepare WebDriver.
*/
void prepareWebDriver();
/**
* Get browser name.
*
* @return browser name.
*/
default String getBrowserName() {
return "";
}
/**
* Test browser name.
*
* @param name browser name.
* @return true if match browser name.
*/
default boolean isBrowser(String name) {
return name.equals(getBrowserName());
}
/**
* Get current test-case.
*
* @return current test-case.
*/
TestCase getCurrentTestCase();
/**
* Set current test-case.
*
* @param testCase current test-case.
*/
void setCurrentTestCase(TestCase testCase);
/**
* Get PrintStream for logging.
*
* @return PrintStram object.
*/
PrintStream getPrintStream();
/**
* Get base URL for overriding test-case base URL.
*
* @return base URL.
*/
String getOverridingBaseURL();
/**
* Get current base URL.
*
* @return base URL.
*/
String getCurrentBaseURL();
/**
* Get CommandFactory instance.
*
* @return CommandFactory instance.
*/
ICommandFactory getCommandFactory();
/**
* Get current CommandListIterator.
*
* @return current CommanListIterator.
*/
CommandListIterator getCommandListIterator();
/**
* Push CommandListIterator.
*
* @param commandListIterator CommanListIterator.
*/
void pushCommandListIterator(CommandListIterator commandListIterator);
/**
* Pop CommandListIterator.
*/
void popCommandListIterator();
/**
* Get variables map.
*
* @return VarsMap.
*/
VarsMap getVarsMap();
/**
* Get rollup rules.
*
* @return RollupRules object.
*/
RollupRules getRollupRules();
/**
* Get collection map.
*
* @return CollectionMap.
*/
CollectionMap getCollectionMap();
/**
* Get initial window handle.
*
* @return window handle.
*/
String getInitialWindowHandle();
/**
* Get elemnt finder.
*
* @return element finder.
*/
WebDriverElementFinder getElementFinder();
/**
* Find elements
*
* @param locator locator.
* @return list of found elements. (empty if no element)
*/
default List<WebElement> findElements(String locator) {
return getElementFinder().findElements(getWrappedDriver(), locator);
}
/**
* Find an element
*
* @param locator locator.
* @return found element.
* @throws NoSuchElementException throw if element not found.
*/
default WebElement findElement(String locator) {
return getElementFinder().findElement(getWrappedDriver(), locator);
}
/**
* Get evaluater.
*
* @return eval object.
*/
Eval getEval();
/**
* Get boolean value of expr.
*
* @param expr expression.
* @return cast from result of expr to Javascript Boolean.
*/
boolean isTrue(String expr);
/**
* Get SubCommandMap instance.
*
* @return SubCommandMap instance.
*/
SubCommandMap getSubCommandMap();
/**
* Get timeout for waiting. (ms)
*
* @return timeout for waiting.
*/
int getTimeout();
/**
* Set timeout for waiting. (ms)
*
* @param timeout for waiting.
*/
void setTimeout(int timeout);
/**
* Reset speed as initial speed.
*/
void resetSpeed();
/**
* Get speed for setSpeed command.
*
* @return speed.
*/
long getSpeed();
/**
* Set speed for setSpeed command.
*
* @param speed speed.
*/
void setSpeed(long speed);
/**
* Wait according to speed setting.
*/
void waitSpeed();
/**
* Get latest page information.
*
* @return page information.
*/
PageInformation getLatestPageInformation();
/**
* Set latest page information.
*
* @param pageInformation page information.
*/
void setLatestPageInformation(PageInformation pageInformation);
/**
* Get cookie filter.
*
* @return cookie filter.
*/
CookieFilter getCookieFilter();
/**
* Set cookie filter.
*
* @param cookieFilter cookie filter.
*/
void setCookieFilter(CookieFilter cookieFilter);
/**
* Get JavaScript library handler.
*
* @return JavaScript library handler.
*/
JSLibrary getJSLibrary();
/**
* Set JavaScript library handler.
*
* @param jsLibrary JavaScript library handler.
*/
void setJSLibrary(JSLibrary jsLibrary);
/**
* Get modifier key state.
*
* @return modifier key state.
*/
ModifierKeyState getModifierKeyState();
/**
* Reset internal state.
*/
void resetState();
/**
* Get interactive.
*
* @return interactive.
*/
boolean isInteractive();
/**
* Executes JavaScript in the context of the currently selected frame or window.
*
* see {@link JavascriptExecutor#executeScript(String, Object...)}.
*
* @param <T> type of return value.
* @param script The JavaScript to execute
* @param args The arguments to the script. May be empty
* @return One of Boolean, Long, String, List or WebElement. Or null.
*/
default <T> T executeScript(String script, Object... args) {
@SuppressWarnings("unchecked")
T result = (T) ((JavascriptExecutor) getWrappedDriver()).executeScript(script, args);
return result;
}
}