我会尝试根据我对 Android 和 iOS 项目的经验给你一个答案,只是我总是单独使用它们而不是同一个项目(基于 Java)。
在分析了 Appium Android 和 iOS 项目之后,我有以下亮点。所有这些事情都可以通过正确的语句在同一个项目中处理。:
抱歉,如果这在 C# 中意义不大,但我希望这能让您了解不同之处
AndroidDriver<MobileElement> driver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), cap); <- for Android
IOSDriver<MobileElement> driver = new IOSDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), cap); <- for iOS
- iOS 和 Android 的功能不同(我没有在不同的项目中专门同步这些功能)
Android
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability("platformVersion", platformVersion);
cap.setCapability("deviceName", deviceName);
cap.setCapability("platformName", "Android");
cap.setCapability("noReset", true);
cap.setCapability("app", APP);
cap.setCapability("avd", EMULATOR);
iOS
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.DEVICE_NAME, deviceName);
cap.setCapability(MobileCapabilityType.UDID, "auto");
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, platformVersion);
cap.setCapability(MobileCapabilityType.NO_RESET, true);
cap.setCapability(MobileCapabilityType.FULL_RESET, false);
cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
cap.setCapability(MobileCapabilityType.APP, app);
cap.setCapability("showXcodeLog", false);
- PageFactory 与定位器不同(我创建了一个新的 Java 类来创建元素库并在 Main 中创建实例)
Android - PageFactory for elements
public Elements(AndroidDriver<MobileElement> driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@AndroidFindBy(xpath = "//*[contains(@text,'text')]")
public MobileElement element;
iOS - PageFactory for elements
public Elements(IOSDriver<MobileElement> driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@iOSXCUITFindBy(xpath = "//XCUIElementTypeStaticText[@name='text']")
public MobileElement element;
wait_5 = new WebDriverWait(driver, 5);