Riaprire l'applicazione di recente tramite appium java script per il prossimo Testcase


Eseguo correttamente lo script java di appium.Ma il problema è che la mia applicazione inizia con la pagina di accesso.dopo l'accesso, ho potuto automatizzare alcuni casi di test.Ma voglio tornare dalla pagina di accesso attraverso lo script per eseguire il prossimo test case. .Come posso chiudere l'app e anche dalla modalità sfondo e riaprire l'applciazione senza reinstallare di nuovo l'app?perché i testcase non dovrebbero dipendere l'uno dall'altro

public class AppTest {

    private static RemoteWebDriver driver;

    @BeforeClass
    public static void initSimulator() throws MalformedURLException
    {
            DesiredCapabilities capabilities = new DesiredCapabilities();

            capabilities.setCapability("platformName", "Android");            
            capabilities.setCapability("platformVersion", "5.0.1");           
            capabilities.setCapability("deviceName", "emulator-5554");                
            capabilities.setCapability("app", "D:\\adt-bundle-windows-x86_64-20140702\\sdk\\platform-tools\\Yr.apk");    
            capabilities.setCapability("app-package", "com.you.android");                   
            capabilities.setCapability("app-activity", "com.yr.sts.SplashActivity");                  
            capabilities.setCapability("app_wait_activity",".MainActivity");

            driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                capabilities);

            System.out.println("App Launched");
    }
    @AfterClass
    public static void quitDriver() 
    {
       driver.quit();
       System.out.println("Driver has been Quit");
    }

    @Test
    public void sign_in_Click() throws InterruptedException 
    {
        WebElement sign_button = driver.findElement(By.name("Sign-in"));
        sign_button.click();
        WebElement usr = driver.findElement(By.id("com.you.android:id/et_login_email_or_mobile"));
        usr.sendKeys("[email protected]");
        Thread.sleep(2000);
        WebElement passwrd = driver.findElement(By.id("com.you.android:id/et_login_pwd"));
        passwrd.sendKeys("123456789");
        Thread.sleep(2000);
        driver.findElementByName("Sign in").click();
        Thread.sleep(5000);
        assertTrue( true );
    }
    @Test
    public void second_sign_in_Click() throws InterruptedException 
    {    
        //HERE I WANT TO REOPEN THE APPLICATION WITH SIGN IN  AFTER CLOSING APP.BECAUSE IN 1st TESTCASE , I HAVE SIGNED IN.this is a 2nd test case    
    }
}
Author: kiedysktos, 2015-06-08

1 answers

Cambia @Beforeclass e @AfterClass tag in @Before e @After rispettivamente.

In questo momento il tuo metodo initSimulator() verrà chiamato prima di ogni @Test e il metodo quitDriver() verrà chiamato dopo di esso. In questo modo avrai un nuovo driver (con app chiara) riavviato ogni caso.

Quindi - come vedi - in JUnit ogni caso di test è indipendente per impostazione predefinita.

Perché si è verificato il problema? Dai documenti @BeforeClass :

A volte diversi test devono condividere una configurazione computazionalmente costosa (come accedere a un database). Mentre questo può compromettere il indipendenza dei test, a volte è un'ottimizzazione necessaria. Annotazione di un metodo static void no-arg pubblico con cause @ BeforeClass deve essere eseguito una volta prima di uno qualsiasi dei metodi di test nella classe.

A PROPOSITO, il mio metodo initDriver () è simile a questo, è il modo migliore per gestire l'uscita dal driver:

   public void quitDriver() {
        driver.closeApp();
        driver.quit();
        driver = null;
    }

(è statico nel tuo caso)

 2
Author: kiedysktos, 2015-06-16 12:33:50