目前我使用的是Appium,Selenium,Java,TestNG的原生应用程序。我正在为iOS和安卓做自动化,这两个功能是相同的,但元素标识符在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放在同一个repo还是不同的分支。有人能解释一下利弊吗?
发布于 2019-08-16 15:04:33
您可以坚持使用单一定位器策略,例如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();发布于 2019-08-16 01:50:00
实际上,我只是为我目前所在的公司设置了所有这些。我假设如果你正在使用appium,selenium,java,testNG,你正在使用eclipse或intelliJ的appium studio插件,如果你不是,你应该会让你的生活变得更容易,但无论如何。我把所有东西都放在一个repo中,原因如下
如果您在一个repo中拥有所有内容,这意味着您必须处理一个单独的项目。更不用说,您可以创建包含来自两个平台的所有测试的xml文件,并且可以同时运行它们。
你不想在每次需要做某件事的时候都切换repos/项目,因为这将是乏味和耗时的,更不用说容易出错了。
我为我的框架所做的是添加了Android页面文件夹和iOS页面文件夹,这样我就可以将它们分开,这与测试一样。这样我就可以在同一地点做我所有的工作,而不会把事情搞乱。如果设置正确,将两个平台都保留在1个repo中真的不会崩溃。
3个xml文件,一个包含所有iOS测试的测试套件,一个包含所有Android测试的测试套件,一个包含这两个测试套件的测试套件,这样您就可以在两个平台上运行所有测试。
我想说,一般来说,1个单一的repo有所有的优点,2个repo有所有的缺点,从仅仅是分散的和无连接的。
更不用说使用一个代码库,所有的东西都来自同一个地方,所以当您启动CI时,将来进行更改将会容易得多,而当您为任何一个平台运行作业时,您唯一的条件就是使用什么xml文件。
如果你想让我更详细,或者只是有问题,请告诉我,我会编辑我的答案,回答你想要我回答的任何问题
PS我所做的一切都是100%正常运行的,真的很顺利
https://stackoverflow.com/questions/57486245
复制相似问题