I always make an let's say 'super-class' screen page object where I keep my driver instance and global variables like in example bellow:
public class Screen {
private String currentScreen = "Page";
private boolean isLoaded = false;
private MobileDriver driver;
public Screen(MobileDriver mobileDriver) {
this.driver = mobileDriver;
}
public String getCurrentScreen() {
return name;
}
public void setCurrentScreen(String name) {
this.name = name;
}
public boolean isLoaded() {
return isLoaded;
}
public void setLoaded(boolean loaded) {
isLoaded = loaded;
}
so I extend all of my other page object classes with this where I provide driver and all needed global variables with getter/setter
so this is how child page-object class would look like
public class OnBoardingScreen extends Screen{
@AndroidFindBy(id = "onboarding_content")
@WithTimeout(time = 1, unit = TimeUnit.SECONDS)
private MobileElement labelContent;
@AndroidFindBy(id = "onboarding_skip_intro")
@WithTimeout(time = 1, unit = TimeUnit.SECONDS)
private MobileElement buttonSkipIntro;
public OnBoardingScreen(MobileDriver driver) {
super(driver);
PageFactory.initElements(new AppiumFieldDecorator(driver, 2, TimeUnit.SECONDS), this);
WaitUtils.isElementPresent(driver, buttonSkipIntro, 1);
if (!Util.areElementsLoaded(labelTitle, labelContent, buttonSkipIntro)) {
super.setLoaded(false);
} else {
super.setLoaded(true);
}
so You could certainly do this kind of design to Your tests, by adding domain variable in this super-class.