Каковы лучшие практики для Appium Framework с использованием модели страницы Opject - PullRequest
0 голосов
/ 14 ноября 2018

Я занимаюсь разработкой инфраструктуры автоматизации для мобильного приложения с использованием Appium (в Java).Я начал с создания класса для каждого представления, в каждом классе я нахожу и инициализирую элементы этого класса.Теперь, спустя некоторое время, я понимаю, что моя конфигурация для фреймворка неверна, и я не могу ее расширить.Было бы здорово, если бы кто-нибудь смог представить мне реализованный фреймворк на Github.

вот мой класс конфигурации, я использую setdriver () для установки драйвера везде, где мне нужно.

public class Config {

public AndroidDriver<AndroidElement> driver;

public static AndroidDriver<AndroidElement> SetDriver() throws MalformedURLException {

    File appPath= new File("src");
    File app = new File(appPath,"My-debug.apk");

    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "myDevice");
    cap.setCapability(MobileCapabilityType.APP,app.getAbsolutePath());
    cap.setCapability("autoGrantPermissions",true);
    cap.setCapability("appWaitActivity","com.xxxx.xxxx.ui.launch.LaunchActivity");
    AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"),cap);

    return driver;
}

СпасибоВы заранее.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Сначала вы должны создать базовый класс, который загружает драйвер. Примечание: Если вы используете локальный поток, мы можем добиться параллельного выполнения без каких-либо проблем

package com.vg.ui.utils.mobile;

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class Mobile {

    public static ThreadLocal<AppiumDriver> driverThread = new ThreadLocal<AppiumDriver>();

    public void setDriver(String deviceName, String platformVersion)
            throws MalformedURLException, InterruptedException {
        // TODO Auto-generated method stub

        File classpathRoot = new File(System.getProperty("user.dir"));
        File appDir = new File(classpathRoot, "Apps");
        File app = new File(appDir, "android-debug.apk");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
        capabilities.setCapability("deviceName", deviceName);
        capabilities.setCapability("platformVersion", platformVersion);
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("app", app.getAbsolutePath());
        if (deviceName.equals("Nexus6")) {
            driverThread.set(new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities));
        } else if (deviceName.equals("Nexus7")) {
            driverThread.set(new AndroidDriver(new URL(
                    "http://127.0.0.1:4724/wd/hub"), capabilities));
        } else if (deviceName.equals("Lenovo")) {
            driverThread.set(new AndroidDriver(new URL(
                    "http://127.0.0.1:4723/wd/hub"), capabilities));
        } else {
            System.out.println("Check the device name and platformversion");
        }

    }

    public static AppiumDriver getDriver() {
        return driverThread.get();
    }

    public static void closeDriver() {
        if (!getDriver().equals(null)) {
             getDriver().quit();
        }
    }
}

Секунда : создание класса объекта для конкретной страницы с использованием методологии PageFactory.

package com.vg.ui.pageobjects;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LandingPageObject {

    @FindBy(xpath = "//*[@text='Account Create']")
    WebElement btn_accountCreate;

    public void click_AccountCreate(){
        /*driverUtil.clickandWait(btn_accountCreate);*/
        btn_accountCreate.click();
    }

}

Третий : Затем в вашем классе определения шага расширьте класс драйвера для мобильных устройств, как показано ниже, на PageFactory соответствующих экранов.

package com.vg.ui.stepdefinitions;


import org.openqa.selenium.support.PageFactory;

import com.vg.ui.pageobjects.LandingPageObject;
import com.vg.ui.utils.mobile.Mobile;

import cucumber.api.java.en.When;

public class LandingPage extends Mobile{

    LandingPageObject lp        = PageFactory.initElements(getDriver(), LandingPageObject.class);

    @When("^click on the button account create\\.$")
    public void click_on_the_button_account_create() throws Throwable {
        // Write code here that turns the phrase above into concrete actions
        lp.click_AccountCreate();
    }


}
0 голосов
/ 14 ноября 2018

Сначала определите вашу страницу следующим образом:

public class WelcomeScreen{
    @AndroidFindBy(accessibility = "") //you can use id, accessibility-id or xpath
    @iOSFindBy(accessibility = "")
    private MobileElement element1;

    @AndroidFindBy(accessibility = "")
    @iOSFindBy(accessibility = "")
    private MobileElement element2;

    AppiumDriver<MoblieElement> driver;
    public WelcomeScreen(AppiumDriver<MobileElement> driver) {
        this.driver=driver;
        PageFactory.initElements(new AppiumFieldDecorator(driver), this);
    }

    public void clickElement2(){
        element2.click()
    }
}

Затем настройте DesiredCapabilities и AppiumDriver.

После этого используйте объектную модель страницы в другом классе.

WelcomeScreen screen=new WelcomeScreen(driver);
screen.clickElement2();

Убедитесь, что ваш драйвер является глобальным.

...