Quantcast
Channel: Active questions tagged selenium - Stack Overflow
Viewing all articles
Browse latest Browse all 98345

How to use Functions/Methods that require 'driver' parameter in Page Factory Model

$
0
0

In my framework i have baseTest class and BasePageObject class Every Page extends BasePO Thing is : a lot of my methods on Pages need to use driver instance. I have method getDriver() and i use it 'n' times on every page This result in Appium calling the getSession for 120 times per 5 min session Because i use explicit wait(see code):

[debug] [MJSONWP (ae82d29b)] Calling AppiumDriver.getSession() with args: ["ae82d29b-c0af-46f9-bb13-d6ecc8ff5a00"]
2019-10-10 03:22:45:681 - [debug] [XCUITest] Executing command 'getSession'

How to solve this problem?

I`m not sure what to try without changing whole framework

public class BasePO {

    WaitUtils waitUtils;
    AssertionUtils asrt;
    public BasePO() {
        asrt = new AssertionUtils();
        waitUtils = new WaitUtils();
        loadProperties();
        initElements();
    }
     private void initElements() {

        PageFactory.initElements(new AppiumFieldDecorator(getDriver()), this);
    }
    private void loadProperties() {

    }

    protected IOSDriver<IOSElement> getDriver() {
        return IOSDriverManager.getThreadLocalDriver();
    }
}

Driver Manager

public class IOSDriverManager {
    public static ThreadLocal<IOSDriver<IOSElement>> webDriver = new ThreadLocal<IOSDriver<IOSElement>>();

    public static DesiredCapabilities getIOSCaps() {
     Here Are my Caps
    }

    public static IOSDriver<IOSElement> getThreadLocalDriver() {
        IOSDriver<IOSElement> driver = webDriver.get();
        if (driver == null) {
            createThreadLocalWebDriver();
            driver = webDriver.get();
        }
        return driver;
    }

    public static void createThreadLocalWebDriver() {
        IOSDriver<IOSElement> driver = null;
             try {
                driver = new IOSDriver<IOSElement>(new URL("http://" + getProperty("accessUser") + ":" + getProperty("accessKey") + "@hub-cloud.browserstack.com/wd/hub"), getIOSCaps());
            } catch (Exception e) {
                try {
                    driver = new IOSDriver<IOSElement>(new URL("http://" + getProperty("accessUser") + ":" + getProperty("accessKey") + "@hub-cloud.browserstack.com/wd/hub"), getIOSCaps());
                } catch (MalformedURLException e1) {
                    System.out.println("IOS Driver is not created..!, Please check capabilitis or make sure Appium Server is running.");
                }
                return;
            }


        webDriver.set(driver);
    }

Any Page

public class dashboardPage extends BasePO {

    @iOSXCUITFindBy( id = "dashboardScreen")
    private MobileElement dashboardScreen;

  public boolean isDashboardScreen(){
        waitUtils.waitForElementToBeVisible(dashboardScreen, getDriver());
        boolean flag =dashboardScreen.isDisplayed();
        return flag;
    }

May Be it possible to have less getSession calls without shrinking amount of explicit waits ?


Viewing all articles
Browse latest Browse all 98345

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>