我是测试自动化的初学者,并使用 Appium 为原生Android 应用程序自动执行一些E2E测试。我的测试文件是用Java编写的。
我注意到测试类中的 测试方法后,应用没有正确关闭,i。即调用 onDestroy()或 onPause()。我注意到,因为我在SharedPreferences中存储了一些数据(在onDestroy()& onPause()中),文件保持不变或完全没有创建。
我尝试了将Desired Capability noReset设置为true / false并在@AfterMethod中调用driver.quit()或driver.closeApp的各种组合。
我在AVD(Pixel 2)上运行测试。 onResume()和onCreate()似乎被正确调用。
我现在唯一的解决方案就是将数据写入文件的另一点,但我觉得它真的很hacky,只是为了让测试工作。
因此,我真的很感激一些帮助!
感谢
这应该是相关的代码:
@BeforeMethod
public void setup () throws MalformedURLException {
DesiredCapabilities caps caps = new DesiredCapabilities();
caps.setCapability("deviceName", "device");
caps.setCapability("udid", "emulator-5554");
caps.setCapability("platformName", "Android");
caps.setCapability("platformVersion", "8.0");
caps.setCapability("skipUnlock","true");
caps.setCapability("noReset",false);
caps.setCapability("fullReset",true);
caps.setCapability("app", "/path/to/my/app-debug.apk");
driver = new AndroidDriver<MobileElement>(new
URL("http://0.0.0.0:4723/wd/hub"),caps);
wait = new WebDriverWait(driver, 10);
}
@Test
public void someTest() {
}
@Test
public void anotherTest() {
}
@AfterMethod
public void teardown(){
driver.closeApp();
}
编辑:
我认为通过commit()
存储SharedPreferences可能会以某种方式由Appium干预,并将其更改为异步调用apply()
。然而,这并没有成为解决方案并导致相同的结果。
答案 0 :(得分:0)
我想向您推荐一个不错的免费SDK,但首先是下面的代码示例,说明如何使用正确的关闭驱动程序:
这是跑步者班:
public class AndroidExampleRunner {
Runner runner;
@Before
public void setup() throws InstantiationException{
runner = Runner.createAndroid("devtoken","udid","package","activity");
}
@After
public void tearDown() throws IOException{
runner.close();
}
@Test
public void runTest() throws Exception{
AndroidExample androidExample = new AndroidExample();
runner.run(androidExample);
}
}
这是一个测试示例。如果将此测试上传到platfrom,ExecutionResult也可以显示在报告中。
public class AndroidExample implements AndroidTest {
@Override
public ExecutionResult execute(AndroidTestHelper helper) throws FailureException {
AndroidDriver driver = helper.getDriver();
boolean success = false;
ExecutionResult executionResult;
//your test here
if(success){
executionResult = ExecutionResult.PASSED;
}else{
executionResult = ExecutionResult.FAILED;
}
return executionResult;
}
}
您可以找到SDK here 您还可以将测试上传到平台,然后在不同的计算机上远程运行。