// Path: src/main/java/ru/colibri/ui/core/contexts/TestContext.java
// @Component
// @Getter
// @Setter
// public class TestContext {
//     private String currentPageName;
//     private Map<String, String> context = new HashMap<>();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/fields/IElement.java
// public interface IElement {
//     String getName();
// 
//     String getContentDesc();
// 
//     String getId();
// 
//     String getText();
// 
//     String getXpath();
// 
//     String getNSPredicate();
// 
//     boolean isSpecific();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/finder/IFinder.java
// public interface IFinder {
//     WebElement findWebElement(IElement element);
// 
//     List<WebElement> findWebElements(IElement element);
// 
//     WebElement findNestedWebElement(IElement parent, IElement nested);
// 
//     WebElement waitClickable(By by);
// 
//     WebElement waitVisible(By by);
// 
//     WebElement findWebElement(By by);
// 
//     void scrollTo(IElement targetListName, IElement toElementName);
// 
//     List<WebElement> findNestedWebElements(IElement parent, IElement nested);
// }
// 
// Path: src/main/java/ru/colibri/ui/core/pages/IPage.java
// public interface IPage {
//     String getName();
// 
//     String getSystemId();
// 
//     List<IElement> getSpecificElements();
// 
//     IElement getElementByName(String name);
// 
//     void addElement(IElement element);
// }
// 
// Path: src/main/java/ru/colibri/ui/core/pages/IPageProvider.java
// public interface IPageProvider {
//     void addPageObject(IPage pageObject);
// 
//     void addPagesObject(List<IPage> pages);
// 
//     IPage getPageByName(String pageName);
// 
//     IPage getPageById(String pageId);
// 
//     IPage getCurrentPage();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/settings/DriversSettings.java
// @Getter
// @Builder
// @ToString
// @EqualsAndHashCode
// public class DriversSettings {
//     private String appiumRemoteUrl;
//     private String deviceName;
//     private String filePath;
//     private int findingTimeOutInSeconds;
//     private int newCommandTimeoutInSeconds;
//     private int implicitlyWaitInSeconds;
//     private String storyTimeoutsInSeconds;
//     private List<String> stepsPackages;
//     private String storyPath;
//     private String storyToInclude;
//     private String storyToExclude;
//     private String pagesPath;
//     private String UDID;
//     private int wdaLocalPort;
//     private int systemPort;
//     private String platformVersion;
// }


import io.appium.java_client.AppiumDriver;
import lombok.extern.java.Log;
import org.jbehave.core.steps.Steps;
import org.openqa.selenium.WebElement;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import ru.colibri.ui.core.contexts.TestContext;
import ru.colibri.ui.core.fields.IElement;
import ru.colibri.ui.core.finder.IFinder;
import ru.colibri.ui.core.pages.IPage;
import ru.colibri.ui.core.pages.IPageProvider;
import ru.colibri.ui.core.settings.DriversSettings;
import java.util.concurrent.TimeUnit;
package ru.colibri.ui.core.steps;



@Log
public abstract class AbsSteps extends Steps implements InitializingBean {

    private static final int TIMEOUT = 7;
    private int currentTimeout;

    @Autowired
    protected TestContext testContext;

    @Autowired
    protected AppiumDriver driver;

    @Autowired(required = false)
    protected IFinder finder;

    @Autowired
    protected IPageProvider pageProvider;

    @Autowired
    protected DriversSettings driverSettings;

    protected IPage getCurrentPage() {
        return pageProvider.getCurrentPage();
    }

    @Override
// Path: src/main/java/ru/colibri/ui/core/contexts/TestContext.java
// @Component
// @Getter
// @Setter
// public class TestContext {
//     private String currentPageName;
//     private Map<String, String> context = new HashMap<>();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/fields/IElement.java
// public interface IElement {
//     String getName();
// 
//     String getContentDesc();
// 
//     String getId();
// 
//     String getText();
// 
//     String getXpath();
// 
//     String getNSPredicate();
// 
//     boolean isSpecific();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/finder/IFinder.java
// public interface IFinder {
//     WebElement findWebElement(IElement element);
// 
//     List<WebElement> findWebElements(IElement element);
// 
//     WebElement findNestedWebElement(IElement parent, IElement nested);
// 
//     WebElement waitClickable(By by);
// 
//     WebElement waitVisible(By by);
// 
//     WebElement findWebElement(By by);
// 
//     void scrollTo(IElement targetListName, IElement toElementName);
// 
//     List<WebElement> findNestedWebElements(IElement parent, IElement nested);
// }
// 
// Path: src/main/java/ru/colibri/ui/core/pages/IPage.java
// public interface IPage {
//     String getName();
// 
//     String getSystemId();
// 
//     List<IElement> getSpecificElements();
// 
//     IElement getElementByName(String name);
// 
//     void addElement(IElement element);
// }
// 
// Path: src/main/java/ru/colibri/ui/core/pages/IPageProvider.java
// public interface IPageProvider {
//     void addPageObject(IPage pageObject);
// 
//     void addPagesObject(List<IPage> pages);
// 
//     IPage getPageByName(String pageName);
// 
//     IPage getPageById(String pageId);
// 
//     IPage getCurrentPage();
// }
// 
// Path: src/main/java/ru/colibri/ui/core/settings/DriversSettings.java
// @Getter
// @Builder
// @ToString
// @EqualsAndHashCode
// public class DriversSettings {
//     private String appiumRemoteUrl;
//     private String deviceName;
//     private String filePath;
//     private int findingTimeOutInSeconds;
//     private int newCommandTimeoutInSeconds;
//     private int implicitlyWaitInSeconds;
//     private String storyTimeoutsInSeconds;
//     private List<String> stepsPackages;
//     private String storyPath;
//     private String storyToInclude;
//     private String storyToExclude;
//     private String pagesPath;
//     private String UDID;
//     private int wdaLocalPort;
//     private int systemPort;
//     private String platformVersion;
// }


// Path: src/main/java/ru/colibri/ui/core/steps/AbsSteps.java
import io.appium.java_client.AppiumDriver;
import lombok.extern.java.Log;
import org.jbehave.core.steps.Steps;
import org.openqa.selenium.WebElement;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import ru.colibri.ui.core.contexts.TestContext;
import ru.colibri.ui.core.fields.IElement;
import ru.colibri.ui.core.finder.IFinder;
import ru.colibri.ui.core.pages.IPage;
import ru.colibri.ui.core.pages.IPageProvider;
import ru.colibri.ui.core.settings.DriversSettings;
import java.util.concurrent.TimeUnit;

package ru.colibri.ui.core.steps;



@Log
public abstract class AbsSteps extends Steps implements InitializingBean {

    private static final int TIMEOUT = 7;
    private int currentTimeout;

    @Autowired
    protected TestContext testContext;

    @Autowired
    protected AppiumDriver driver;

    @Autowired(required = false)
    protected IFinder finder;

    @Autowired
    protected IPageProvider pageProvider;

    @Autowired
    protected DriversSettings driverSettings;

    protected IPage getCurrentPage() {
        return pageProvider.getCurrentPage();
    }

    @Override
    public void afterPropertiesSet() throws Exception {