我是移动测试的新手,目前我正在研究移动测试的自动化框架。 我已经开始研究Appium,并为我已经制作的演示应用程序创建了一些测试(一个用于IOS,另一个用于Android)。 我已经设法为每个平台编写了一个测试,但我想知道,编写一个通用测试会有多困难,这个测试将在两个平台上以最小的调整执行?
谢谢
答案 0 :(得分:3)
这是可能的,但您必须为所有平台的每个组件保留相同的标签,例如单击按钮,而不是通过名称定位Xpath。
WebElement button = driver.findElement(By.name(" my button")); button.click();
更多信息在Appium文档中查找元素: http://appium.wikia.com/wiki/Finding_Elements
答案 1 :(得分:1)
我从头开始构建了一个完全相同的自动化框架,即拥有一个代码库,并且测试在Android和iOS上运行,具体取决于您为测试提供的设备和应用程序。这就是我去做的方式。 (我使用了Java + Appium + Cucumber框架)。
话虽如此,您将在名为“ObjectRepository”的文件夹下的2个单独文件中获得iOS和Android的Accessibility ID的所有资源ID。这些文件的扩展名通常为bool loadData(const std::string& filePath){
std::ifstream file;
file.open(filePath);
if (!file.is_open())
return false;
date_and_time dtNow;
int numberOfmyClass;
file.read((char*)&dtNow, sizeof(date_and_time));
file.read((char*)&numberOfmyClass, sizeof(int));
for (size_t i = 0; i < numberOfmyClass; i++)
{
MyClass myClass;
myClass.read(file);
//use data
}
return true;
}
(称为属性文件)。
假设您有一个要在Android和iOS上与之交互的登录按钮,您将有2个文件:
文件1)“androidObject.properties”,其中包含:
*.properties
文件2)“iOSObject.properties”,其中包含:
Login.LoginButton=loginAndroidBtn
注意:在上面的键/值对中,键是相同的“Login.LoginButton”,值是Android和iOS中的登录按钮的资源ID和辅助功能ID应用
在您的代码中,您将执行以下操作:
Login.LoginButton=loginiOSBtn
在另一个文件中,您可以设置if(IS_ANDROID) {
DRIVER.findElementById("Login.LoginButton").click();
} else {
DRIVER.findElementByAccessibilityId("Login.LoginButton").click();
}
和IS_ANDROID
的含义。你可以这样做:
IS_IOS
这样您就可以拥有一个代码库并无缝地运行Android和iOS。
-Raj