我应该为 iOS 使用一个存储库,为移动自动化(本机应用程序)使用 android 吗?

Should I use one repository for iOS and android for mobile automation (Native App)?

目前我正在使用 Appium、Selenium、Java、TestNG 作为本机应用程序。我正在为 iOS 和 Android 执行自动化,这两个功能是相同的,但是 iOS 和 android 中的元素标识符不同。 None 个元素同名。假设登录按钮元素标识符采用以下方式

对于Android

@AndroidFindBy(id = "com.abc.bot:id/home_screen_sign_in_btn")
    private MobileElement signinbtn;

对于iOS

@FindBy(xpath="//XCUIElementTypeButton[@name='Log In']")
    private WebElement logInButton;

除此之外,我们正在使用 CircleCI,iOS 和 Android 也有不同的管道和不同的分支。 我的问题是,我应该将 iOS 和 Android 保留在同一个仓库还是不同的分支中。有人可以解释一下利弊吗?

我实际上只是为我目前所在的公司设置了所有这些。我假设如果您正在使用 appium、selenium、java、testNG,那么您正在使用用于 eclipse 或 intelliJ 的 appium studio 插件,如果您不是,那么您应该这样做会让您的生活更轻松,但无论如何。我把所有东西都放在一个回购协议中,这就是原因

如果您将所有内容都集中在一个存储库中,这意味着您必须处理一个单一的项目。更不用说您可以创建 xml 文件,其中包含来自两个平台的所有测试,并且可以 运行 将它们放在一起。

您不希望每次需要做某事时都切换 repos/projects,因为那样既乏味又耗时,更不用说容易出错了。

我为我的框架所做的是添加 Android 页面文件夹和 iOS 页面文件夹,这样我就可以将它们分开,与测试相同。这样我就可以在同一个地方完成我所有的工作而不会混淆。如果设置正确,将两个平台都保存在 1 个 repo 中确实没有什么坏处。

用于转储和测试的单独文件夹,3 个 xml 文件,一个包含所有 iOS 测试的测试套件,一个包含所有 Android 测试的测试套件和一个包含这两个测试套件,因此您可以 运行 在两个平台上进行所有测试

我想说的是,一般来说,1 个单一回购协议具有所有优点,而 2 个回购协议具有所有缺点,只是散布和未连接。

更不用说一个回购,所有内容都来自同一个地方,所以当您开始 CI 时,将来会更容易开始并进行更改,当您 运行 任何一个平台的工作你唯一的条件是要使用什么 xml 个文件。

如果您想让我详细介绍或有问题请告诉我,我会编辑我的答案并回答您想让我回答的任何问题

PS 我所做的一切都已经完成 运行 100% 并且非常顺利

您可以坚持单一定位器策略,例如 XPath Selector and use XPath Union operator 将两个定位器合并为一个,例如:

//XCUIElementTypeButton[@name='Log In'] | //*[@resource-id='com.abc.bot:id/home_screen_sign_in_btn']

更好的方法是将定位器放入 .properties 文件中,例如:

android.signin.button=//*[@resource-id='com.abc.bot:id/home_screen_sign_in_btn']
ios.signin.button=//XCUIElementTypeButton[@name='Log In']

然后通过将 platformName Desired Capability 与 .properties 文件中的定位器组合来查询所需的元素

Properties uiprops = new Properties();
uiprops.load(new FileInputStream(new File("ui.properties")));
String locator = uiprops.get(appiumDriver.get().getCapabilities().getCapability("platformName") + ".signin.button").toString();