【发布时间】:2015-01-08 04:09:27
【问题描述】:
我是移动测试新手,目前我正在研究用于移动测试的自动化框架。 我已经开始研究 Appium,并为我制作的演示应用程序创建了一些测试(一个用于 IOS,另一个用于 Android)。 我已经设法为每个平台编写了一个测试,但我想知道,编写一个通用测试可能有多困难,它将在两个平台上执行且调整最少?
谢谢
【问题讨论】:
我是移动测试新手,目前我正在研究用于移动测试的自动化框架。 我已经开始研究 Appium,并为我制作的演示应用程序创建了一些测试(一个用于 IOS,另一个用于 Android)。 我已经设法为每个平台编写了一个测试,但我想知道,编写一个通用测试可能有多困难,它将在两个平台上执行且调整最少?
谢谢
【问题讨论】:
这是可能的,但您必须为所有平台的每个组件保留相同的标签,例如单击一个按钮,而不是通过 Xpath 定位其名称。
WebElement button = driver.findElement(By.name("我的按钮")); button.click();
在 Appium 文档中查找元素的更多信息: http://appium.wikia.com/wiki/Finding_Elements
【讨论】:
我从头开始构建了一个自动化框架,它做的事情完全相同,即有一个代码库,并且根据您提供测试的设备和应用程序在 Android 和 iOS 上运行测试。我就是这样做的。 (我用的是 Java+Appium+Cucumber 框架)。
话虽如此,您将在名为 "ObjectRepository" 的文件夹下的 2 个单独文件中拥有 Android 的所有资源 ID 和 iOS 的辅助功能 ID。这些文件通常具有*.properties 的扩展名(称为属性文件)。
假设你有一个登录按钮,你想在 Android 和 iOS 上与之交互,你有 2 个文件:
文件 1) "androidObject.properties" 其中有:
Login.LoginButton=loginAndroidBtn
文件 2) "iOSObject.properties" 其中有:
Login.LoginButton=loginiOSBtn
注意:在上面的键/值对中,键是相同的“Login.LoginButton”,值是资源id和Android和iOS中登录按钮的可访问性id应用
在您的代码中,您将执行以下操作:
if(IS_ANDROID) {
DRIVER.findElementById("Login.LoginButton").click();
} else {
DRIVER.findElementByAccessibilityId("Login.LoginButton").click();
}
在另一个文件中,您可以设置 IS_ANDROID 和 IS_IOS 的含义。你可以这样做:
public static DeviceConfig DEVICE_CONFIG;
private void setPlatform() {
if (DEVICE_CONFIG.platformName.equals("Android")) {
IS_ANDROID = true;
} else if (DEVICE_CONFIG.platformName.equals("iOS")) {
IS_IOS = true;
}
这样您就可以拥有一个代码库并无缝运行 Android 和 iOS。
【讨论】: