Can you use Page Object model with Appium Studio

Hi,

Is it possible to use page object models with Appium studio? If so how can you pass an instance of the AndroidDriver into object class?

I was having issues doing this - I got a null pointer error as script could not find elements? Not sure if page initialized correctly.

Hi,
I’m not aware of any issue that can block you from using Page Object model.
Please share some more information so we can assist.

H Guy,

LogInTest.java

package tests;

import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;
import pages.LogInPage;

import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
//import org.openqa.selenium.ScreenOrientation;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.By;
import org.junit.*;
import java.net.URL;
import java.net.MalformedURLException;

public class LogInTest {
private String reportDirectory = “reports”;
private String reportFormat = “xml”;
private String testName = “Untitled”;
protected AndroidDriver driver = null;

DesiredCapabilities dc = new DesiredCapabilities();

@Before
public void setUp() throws MalformedURLException {
	dc.setCapability("reportDirectory", reportDirectory);
	dc.setCapability("reportFormat", reportFormat);
	dc.setCapability("testName", testName);
	dc.setCapability(MobileCapabilityType.UDID, "65104f1f");
	dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.experitest.ExperiBank");
	dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".LoginActivity");
	dc.setCapability("instrumentApp", true);
	driver = new AndroidDriver<AndroidElement>(new URL("http://localhost:4723/wd/hub"), dc);

}

@Test
public void testUntitled() {

	LogInPage.login("company", "company");


}


@After
public void tearDown() {
	driver.quit();
}

}

Page object class
LogInPage.java

package pages;

import org.openqa.selenium.support.PageFactory;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;

public class LogInPage {

private AndroidDriver<AndroidElement> driver;

public LogInPage(AndroidDriver<AndroidElement> driver) {
	this.driver = driver;
	PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}

	
@AndroidFindBy(id = "usernameTextField")
public static AndroidElement username;

@AndroidFindBy(id = "passwordTextField")
public static AndroidElement password;

@AndroidFindBy(id = "id=loginButton")
public static AndroidElement login;

	
public static void login(String username, String password) {
	LogInPage.username.sendKeys(username);
	LogInPage.password.sendKeys(password);
	login.click();
	
}

}

Thanks for any help you can give

I think I have found solution

I didn’t instantiate the LoginPage

Change @Test to

@Test
public void testUntitled() {

	LogInPage lp = new LogInPage(driver);
	lp.login("company", "company");


}
2 Likes