Appium:onDestroy()在测试后从未调用过

时间:2018-05-23 22:00:09

标签: java selenium automated-tests appium appium-android

我是测试自动化的初学者,并使用 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()。然而,这并没有成为解决方案并导致相同的结果。

1 个答案:

答案 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 您还可以将测试上传到平台,然后在不同的计算机上远程运行。