目前我正在使用 Appium、Selenium、Java、TestNG 作为原生应用。我正在为 iOS 和 Android 做自动化,这两个功能是相同的,但是是的,元素标识符在 iOS 和 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 文件,并且可以一起运行它们。
您不希望每次需要做某事时都切换回购协议/项目,因为那会很乏味且耗时,更不用说容易出错了。
我为我的框架所做的是我添加了 Android 页面文件夹和 iOS 页面文件夹,这样我就可以将它们分开,与测试相同。这样我就可以在同一个地方完成我所有的工作而不会混淆。如果设置正确,将两个平台都保存在 1 个 repo 中确实没有什么坏处。
用于转储和测试的单独文件夹,3 个 xml 文件,一个包含所有 iOS 测试的测试套件,一个包含所有 Android 测试的测试套件和一个包含这两个测试套件的测试套件,因此您可以在两个平台上运行所有测试
我想说的是,一般来说,1 个单一回购协议具有所有优点,而 2 个回购协议具有所有缺点,因为它们只是分散和未连接。
更不用说一个回购,所有东西都来自同一个地方,所以当你启动 CI 时,将来会更容易开始和做出改变,当你为任一平台运行作业时,你唯一的条件就是什么要使用的 xml 文件。
如果你想让我更深入地了解细节或者只是有问题让我知道,我会编辑我的答案并回答你想让我做的任何事情
PS 我所做的一切都 100% 启动并运行并且非常顺利
您可以坚持单一定位器策略,例如 XPath Selector 并使用 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();
如果我能看到你是如何在一个回购协议中为两个平台创建框架结构的,因为我是从头开始构建框架的,那有可能吗?将不胜感激。