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 ?