// Path: src/main/java/com/github/webdriverextensions/Bot.java
// public static void assertIsDisplayed(WebElement webElement) {
//     if (isNotDisplayed(webElement)) {
//         throw new WebAssertionError("Element is not displayed", webElement);
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/WebDriverExtensionsContext.java
// public class WebDriverExtensionsContext {
// 
//     private static InheritableThreadLocal<WebDriver> threadLocalDriver = new InheritableThreadLocal<>();
// 
//     public static WebDriver getDriver() {
//         if (threadLocalDriver.get() == null) {
//             throw new WebDriverExtensionException("Driver in WebDriverExtensionsContext is not set. Please set the driver with WebDriverExtensionsContext.setDriver(...) method before using the WebDriverExtensions framework. Note that the driver will be thread safe since ThreadLocal is used so don't worry about thread safety.");
//         }
//         return threadLocalDriver.get();
//     }
// 
//     public static void removeDriver() {
//         threadLocalDriver.remove();
//     }
// 
//     public static void setDriver(WebDriver driver) {
//         threadLocalDriver.set(driver);
//     }
// 
// }
// 
// Path: src/main/java/com/github/webdriverextensions/WebPage.java
// public abstract class WebPage implements Openable {
// 
//     public void initElements() {
//         PageFactory.initElements(new WebDriverExtensionFieldDecorator(WebDriverExtensionsContext.getDriver()), this);
//     }
// 
//     public void initElements(WebDriver driver) {
//         PageFactory.initElements(new WebDriverExtensionFieldDecorator(driver), this);
//     }
// 
//     public void initElements(FieldDecorator decorator) {
//         PageFactory.initElements(decorator, this);
//     }
// 
//     @Override
//     public abstract void open(Object... arguments);
//     
//     @Override
//     public boolean isOpen(Object... arguments) {
//         try {
//             assertIsOpen(arguments);
//             return true;
//         } catch (AssertionError e) {
//             return false;
//         }
//     }
// 
//     @Override
//     public boolean isNotOpen(Object... arguments) {
//         return !isOpen(arguments);
//     }
// 
//     @Override
//     public abstract void assertIsOpen(Object... arguments) throws AssertionError;
// 
//     @Override
//     public void assertIsNotOpen(Object... arguments) throws AssertionError {
//         if (isOpen(arguments)) {
//             throw new AssertionError(this.getClass().getSimpleName() + " is open when it shouldn't");
//         }
//     }
// 
// 
// 
//     // WORKAROUND: Make Bot methods visible that are otherwise hidden when using static import
//     public void open(String url) {
//         Bot.open(url);
//     }
// 
//     public void open(Openable openable, Object... arguments) {
//         Bot.open(openable, arguments);
//     }
// 
//     public boolean isOpen(Openable openable, Object... arguments) {
//         return Bot.isOpen(openable, arguments);
//     }
// 
//     public boolean isNotOpen(Openable openable, Object... arguments) {
//         return Bot.isNotOpen(openable, arguments);
//     }
// 
//     public void assertIsOpen(Openable openable, Object... arguments) throws AssertionError {
//         Bot.assertIsOpen(openable, arguments);
//     }
// 
//     public void assertIsNotOpen(Openable openable, Object... arguments) throws AssertionError {
//         Bot.assertIsNotOpen(openable, arguments);
//     }
// }
// 
// Path: src/test/java/com/github/webdriverextensions/model/components/ScrollTo.java
// public class ScrollTo extends WebComponent {
// 
// }
// 
// Path: src/test/java/com/github/webdriverextensions/model/components/WebComponentExtended.java
// public class WebComponentExtended extends WebComponent {
// 
// }


import java.util.List;
import static com.github.webdriverextensions.Bot.assertIsDisplayed;
import static com.github.webdriverextensions.WebDriverExtensionsContext.*;
import com.github.webdriverextensions.WebPage;
import com.github.webdriverextensions.model.components.ScrollTo;
import com.github.webdriverextensions.model.components.WebComponentExtended;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
package com.github.webdriverextensions.model.pages;


public class BotTestPage extends WebPage {

    public final String url = "file://" + getClass().getResource("/html/bot-test.html").getPath();

    @FindBy(css = "body")
    public WebElement body;

    @FindBy(css = "#test0")
    public WebElement test0;
    @FindBy(css = "#test1")
    public WebElement test1;
    @FindBy(css = "#test2")
    public WebElement test2;
    @FindBy(css = "#test3")
    public WebElement test3;

    // Texts
    @FindBy(css = "#text-span")
    public WebElement textSpan;
    @FindBy(css = "#text-input")
    public WebElement textInput;

    // Integers
    @FindBy(css = "#intnumber-span")
    public WebElement intNumberSpan;
// Path: src/main/java/com/github/webdriverextensions/Bot.java
// public static void assertIsDisplayed(WebElement webElement) {
//     if (isNotDisplayed(webElement)) {
//         throw new WebAssertionError("Element is not displayed", webElement);
//     }
// }
// 
// Path: src/main/java/com/github/webdriverextensions/WebDriverExtensionsContext.java
// public class WebDriverExtensionsContext {
// 
//     private static InheritableThreadLocal<WebDriver> threadLocalDriver = new InheritableThreadLocal<>();
// 
//     public static WebDriver getDriver() {
//         if (threadLocalDriver.get() == null) {
//             throw new WebDriverExtensionException("Driver in WebDriverExtensionsContext is not set. Please set the driver with WebDriverExtensionsContext.setDriver(...) method before using the WebDriverExtensions framework. Note that the driver will be thread safe since ThreadLocal is used so don't worry about thread safety.");
//         }
//         return threadLocalDriver.get();
//     }
// 
//     public static void removeDriver() {
//         threadLocalDriver.remove();
//     }
// 
//     public static void setDriver(WebDriver driver) {
//         threadLocalDriver.set(driver);
//     }
// 
// }
// 
// Path: src/main/java/com/github/webdriverextensions/WebPage.java
// public abstract class WebPage implements Openable {
// 
//     public void initElements() {
//         PageFactory.initElements(new WebDriverExtensionFieldDecorator(WebDriverExtensionsContext.getDriver()), this);
//     }
// 
//     public void initElements(WebDriver driver) {
//         PageFactory.initElements(new WebDriverExtensionFieldDecorator(driver), this);
//     }
// 
//     public void initElements(FieldDecorator decorator) {
//         PageFactory.initElements(decorator, this);
//     }
// 
//     @Override
//     public abstract void open(Object... arguments);
//     
//     @Override
//     public boolean isOpen(Object... arguments) {
//         try {
//             assertIsOpen(arguments);
//             return true;
//         } catch (AssertionError e) {
//             return false;
//         }
//     }
// 
//     @Override
//     public boolean isNotOpen(Object... arguments) {
//         return !isOpen(arguments);
//     }
// 
//     @Override
//     public abstract void assertIsOpen(Object... arguments) throws AssertionError;
// 
//     @Override
//     public void assertIsNotOpen(Object... arguments) throws AssertionError {
//         if (isOpen(arguments)) {
//             throw new AssertionError(this.getClass().getSimpleName() + " is open when it shouldn't");
//         }
//     }
// 
// 
// 
//     // WORKAROUND: Make Bot methods visible that are otherwise hidden when using static import
//     public void open(String url) {
//         Bot.open(url);
//     }
// 
//     public void open(Openable openable, Object... arguments) {
//         Bot.open(openable, arguments);
//     }
// 
//     public boolean isOpen(Openable openable, Object... arguments) {
//         return Bot.isOpen(openable, arguments);
//     }
// 
//     public boolean isNotOpen(Openable openable, Object... arguments) {
//         return Bot.isNotOpen(openable, arguments);
//     }
// 
//     public void assertIsOpen(Openable openable, Object... arguments) throws AssertionError {
//         Bot.assertIsOpen(openable, arguments);
//     }
// 
//     public void assertIsNotOpen(Openable openable, Object... arguments) throws AssertionError {
//         Bot.assertIsNotOpen(openable, arguments);
//     }
// }
// 
// Path: src/test/java/com/github/webdriverextensions/model/components/ScrollTo.java
// public class ScrollTo extends WebComponent {
// 
// }
// 
// Path: src/test/java/com/github/webdriverextensions/model/components/WebComponentExtended.java
// public class WebComponentExtended extends WebComponent {
// 
// }


// Path: src/test/java/com/github/webdriverextensions/model/pages/BotTestPage.java
import java.util.List;
import static com.github.webdriverextensions.Bot.assertIsDisplayed;
import static com.github.webdriverextensions.WebDriverExtensionsContext.*;
import com.github.webdriverextensions.WebPage;
import com.github.webdriverextensions.model.components.ScrollTo;
import com.github.webdriverextensions.model.components.WebComponentExtended;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

package com.github.webdriverextensions.model.pages;


public class BotTestPage extends WebPage {

    public final String url = "file://" + getClass().getResource("/html/bot-test.html").getPath();

    @FindBy(css = "body")
    public WebElement body;

    @FindBy(css = "#test0")
    public WebElement test0;
    @FindBy(css = "#test1")
    public WebElement test1;
    @FindBy(css = "#test2")
    public WebElement test2;
    @FindBy(css = "#test3")
    public WebElement test3;

    // Texts
    @FindBy(css = "#text-span")
    public WebElement textSpan;
    @FindBy(css = "#text-input")
    public WebElement textInput;

    // Integers
    @FindBy(css = "#intnumber-span")
    public WebElement intNumberSpan;
    @FindBy(css = "#intnumber-input")