junit 通过appium java script重新打开应用程序,用于下一个测试用例

0yycz8jy  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(86)

我运行appium java脚本成功.但问题是,我的应用程序开始与登录页面.登录后,我可以自动化一些测试用例.但我想再次从登录页面通过脚本来运行下一个测试用例..我如何关闭应用程序,也从后台模式,并重新打开applicciation没有重新安装应用程序一次?因为测试用例不应该相互依赖,

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    
    }
}
ax6ht2ek

ax6ht2ek1#

将**@Beforeclass@AfterClass标签分别更改为@Before@After**。
现在你的initSimulator()方法将在每个@Test之前被调用,quitDriver()方法将在它之后被调用。这样,你将有新的驱动程序(与明确的应用程序)重新启动每一个案件。
所以-正如你所看到的-在JUnit中,每个测试用例默认情况下都是独立的。
为什么你的问题会发生?来自@BeforeClass文档:
有时几个测试需要共享计算上昂贵的设置(如登录到数据库)。虽然这可能会损害测试的独立性,但有时这是必要的优化。使用@BeforeClass注解一个public static void no-arg方法会导致它在类中的任何测试方法之前运行一次。
顺便说一句,我的initDriver()方法看起来像这样,这是处理退出驱动程序的更好方法:

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

(it在您的情况下是静态的)

相关问题