gpt4 book ai didi

java - 适用于 iOS 和 Android 平台的跨平台 appium 代码

转载 作者:行者123 更新时间:2023-11-29 11:30:01 24 4
gpt4 key购买 nike

我已经为 Android 平台编写了 Appium 代码,最近我的组织也推出了类似的 iOS 应用程序。

我计划对两个平台使用相同的代码。

我成功地能够在两个平台上运行相同的代码,但是组织代码对每一段代码都变得越来越困难。

指导采用适当的方法来实现。

我的代码在 Android 上运行得很好,在 iOS 上也运行得很好。我创建了两组功能,例如:

功能文件:

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 是 android,它将返回 androidDriver,如果 platformType 是 ios,则返回 iosDriver,然后您可以在任何需要使用驱动程序的地方使用此方法。例如:

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;
}

关于java - 适用于 iOS 和 Android 平台的跨平台 appium 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54455283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com