問題

私はAndroidプラットフォーム用のAppiumコードを書いており、最近私の組織にも同様のiOSアプリが付属しています。

私は両方のプラットフォームで同じコードを使用する予定です。

私は正常に両方のプラットフォームで同じコードを実行することができますが、組織化されたコードはすべてのコードで難しくなっています。

達成するための適切なアプローチを備えたガイド。

Android上の私のコードはかなりうまく動作しており、iOS上でも同じです。 私は次のような2つの機能を作成しました:

機能ファイル:

 protected static void initCapabilities() {
getDirectory();
//Android
//deviceName = "33009a1eaa0b32a7";
//DEVICE_NAME = "emulator-5554";
//AUTOMATION_NAME = "uiautomator2";
//PLATFORM_NAME = "Android";
//BUILD = "app-internal-release - 628.apk";
//app = new File(appDirectory, BUILD);
//iOS
PLATFORM_NAME = "iOS";
PLATFORM_VERSION = "12.1";
DEVICE_NAME = "iPhone XR";
AUTOMATION_NAME = "XCUITest";
BUILD = "Jiffle.app";

app = new File(iOSAppDirectory, BUILD);
System.out.println("Build picked is: "+app);
}
 

起動コード:

 import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

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

import Utils.ValidationUtils;
import Utils.LogUtils;
import Global.Constants;
import Global.SetDataInExcel;

import TestbedDataLibrary.TestCases;

import Access.Login;
import EventList.EventListing;
import MeetingList.MLElementRepositoryConstant;
import BadgeScan.BadgeScan;
import BookMeeting.RequestMeeting;
import QuickDemo.QuickDemo;
import io.appium.java_client.ios.IOSDriver;

public class Launch extends Constants {
    private static AndroidDriver<MobileElement> androidDriver;
    private static IOSDriver<MobileElement> iosDriver;

    @BeforeTest
    private void setup() {
        initCapabilities();
        initAppData();
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", PLATFORM_NAME);
        capabilities.setCapability("platformVersion", PLATFORM_VERSION);
        capabilities.setCapability("deviceName", DEVICE_NAME);
        capabilities.setCapability("automationName", AUTOMATION_NAME);
        capabilities.setCapability("app", app.getAbsolutePath());
        try {
            System.out.println("Connecting to Appium Server...");
            if (PLATFORM_NAME.equals("Android")) {
                System.out.println("Launching Android Driver...");
                androidDriver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
            }
            else if (PLATFORM_NAME.equals("iOS")) {
                System.out.println("Launching iOS Driver...");
                iosDriver = new IOSDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
            }
        } catch (MalformedURLException mle) {
            System.out.println("Caught exception in connecting to Appium Server!!!");
            mle.printStackTrace();
        }
//        androidDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        iosDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test(priority = 1)
    public void Login() throws Exception {
        System.out.println("Login Execution...");
        initTestBedData();
        long startTimeLogin = System.currentTimeMillis();

        iosDriver.switchTo().alert().accept();

        //Login.initLogin(androidDriver);
        Login.initLogin(iosDriver);
        SetDataInExcel.setTime(Constants.LoginTestBed, Constants.testSuiteSheet, startTimeLogin, "Login", 7);
    }
 

他の詳細が必要な場合はお知らせください。

問題:私の主な関心事は、ドライバLogin.initLogin(androidDriver);を渡している間、どのドライバを渡すべきかをどのように決めるべきですか? また、ここでいくつかの改善を提案してください。

  ベストアンサー

platformType が ios の場合、androidDriver を返す一般的な方法を作ることができます。 例えば:

 private static AppiumDriver<MobileElement> driver;

public AppiumDriver<MobileElement> getDriver() throws IOException {
    if (PLATFORM_NAME.equals("Android")) {
        // setup the android driver
    } else if (PLATFORM_NAME.equals("iOS")) {
        // setup the ios driver
    }
    return driver;
}
 

  同じタグがついた質問を見る

javaandroidiosappium