// Path: src/main/java/com/rationaleemotions/internal/locators/DefaultWaitConditions.java
// public final class DefaultWaitConditions {
// 
//     public static final WaitCondition AVAILABLE = new AvailableWaitCondition();
// 
//     public static final WaitCondition VISIBLE = new VisibleWaitCondition();
// 
//     public static final WaitCondition CLICKABLE = new ClickableWaitCondition();
// 
//     private DefaultWaitConditions() {
//     }
// 
//     static class AvailableWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "AVAILABLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.presenceOfElementLocated(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return ExpectedConditions.presenceOfAllElementsLocatedBy(by);
//         }
//     }
// 
//     static class VisibleWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "VISIBLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.visibilityOfElementLocated(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return ExpectedConditions.visibilityOfAllElementsLocatedBy(by);
//         }
//     }
// 
//     static class ClickableWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "CLICKABLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.elementToBeClickable(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return null;
//         }
//     }
// }
// 
// Path: src/main/java/com/rationaleemotions/internal/locators/WaitCondition.java
// public interface WaitCondition {
// 
//     /**
//      *
//      * @return - The name to be used to symbolically represent this implementation. This is the same
//      * name that you will be providing in your Json file as wait strategy.
//      */
//     String getName();
// 
//     /**
//      * @param by - The {@link By} that represents the location strategy.
//      * @return - The {@link ExpectedCondition} to be used.
//      */
//     ExpectedCondition<WebElement> element(By by);
// 
//     /**
//      * @param by - The {@link By} that represents the location strategy.
//      * @return - The {@link ExpectedCondition} to be used.
//      */
//     ExpectedCondition<List<WebElement>> elements(By by);
// }


import com.rationaleemotions.internal.locators.DefaultWaitConditions;
import com.rationaleemotions.internal.locators.WaitCondition;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import java.util.List;
            return false;
        }
        sleep();
        return true;
    }

    @Override
    public String getText() {
        if (keysToSend == null) {
            return "Fake text";
        }
        StringBuilder sb = new StringBuilder();
        for (CharSequence each : keysToSend) {
            sb.append(each);
        }
        return sb.toString();
    }

    @Override
    public List<WebElement> findElements(By by) {
        return null;
    }

    @Override
    public WebElement findElement(By by) {
        return null;
    }

    @Override
    public boolean isDisplayed() {
// Path: src/main/java/com/rationaleemotions/internal/locators/DefaultWaitConditions.java
// public final class DefaultWaitConditions {
// 
//     public static final WaitCondition AVAILABLE = new AvailableWaitCondition();
// 
//     public static final WaitCondition VISIBLE = new VisibleWaitCondition();
// 
//     public static final WaitCondition CLICKABLE = new ClickableWaitCondition();
// 
//     private DefaultWaitConditions() {
//     }
// 
//     static class AvailableWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "AVAILABLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.presenceOfElementLocated(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return ExpectedConditions.presenceOfAllElementsLocatedBy(by);
//         }
//     }
// 
//     static class VisibleWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "VISIBLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.visibilityOfElementLocated(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return ExpectedConditions.visibilityOfAllElementsLocatedBy(by);
//         }
//     }
// 
//     static class ClickableWaitCondition implements WaitCondition {
// 
//         public String getName() {
//             return "CLICKABLE";
//         }
// 
//         public ExpectedCondition<WebElement> element(By by) {
//             return ExpectedConditions.elementToBeClickable(by);
//         }
// 
//         public ExpectedCondition<List<WebElement>> elements(By by) {
//             return null;
//         }
//     }
// }
// 
// Path: src/main/java/com/rationaleemotions/internal/locators/WaitCondition.java
// public interface WaitCondition {
// 
//     /**
//      *
//      * @return - The name to be used to symbolically represent this implementation. This is the same
//      * name that you will be providing in your Json file as wait strategy.
//      */
//     String getName();
// 
//     /**
//      * @param by - The {@link By} that represents the location strategy.
//      * @return - The {@link ExpectedCondition} to be used.
//      */
//     ExpectedCondition<WebElement> element(By by);
// 
//     /**
//      * @param by - The {@link By} that represents the location strategy.
//      * @return - The {@link ExpectedCondition} to be used.
//      */
//     ExpectedCondition<List<WebElement>> elements(By by);
// }


// Path: src/test/java/com/rationaleemotions/page/FakeWebElement.java
import com.rationaleemotions.internal.locators.DefaultWaitConditions;
import com.rationaleemotions.internal.locators.WaitCondition;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import java.util.List;

            return false;
        }
        sleep();
        return true;
    }

    @Override
    public String getText() {
        if (keysToSend == null) {
            return "Fake text";
        }
        StringBuilder sb = new StringBuilder();
        for (CharSequence each : keysToSend) {
            sb.append(each);
        }
        return sb.toString();
    }

    @Override
    public List<WebElement> findElements(By by) {
        return null;
    }

    @Override
    public WebElement findElement(By by) {
        return null;
    }

    @Override
    public boolean isDisplayed() {
        if (waitCondition != null && waitCondition.equals(DefaultWaitConditions.VISIBLE) && simulateFailure) {