我成功运行appium java脚本。但问题是,我的应用程序以登录页面开始。登录后,我可以自动化一些测试用例。但我想再次从登录页面通过脚本来运行下一个测试用例。 。如何关闭应用程序以及后台模式并重新打开应用程序而无需再次重新安装应用程序?因为测试用例不应该相互依赖
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("hello1@gmail.com");
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
}
}
答案 0 :(得分:2)
分别将 @Beforeclass 和 @AfterClass 标记分别更改为 @Before 和 @After 。
现在你的initSimulator()方法将在每个@Test之前被调用,并且quitDriver()方法将在它之后被调用。这样,每个案例都会重新启动新驱动程序(使用清除应用程序)。
所以 - 如你所见 - 在JUnit中,默认情况下每个测试用例都是独立的。
为什么会出现问题?来自@BeforeClass docs:
BTW,我的initDriver()方法看起来像这样,它是处理退出驱动程序的更好方法:有时,多个测试需要共享计算成本高昂的设置 (比如登录数据库)。虽然这可以妥协 测试的独立性,有时候是必要的优化。 使用@BeforeClass注释public static void no-arg方法会导致 它在类中的任何测试方法之前运行一次。
public void quitDriver() {
driver.closeApp();
driver.quit();
driver = null;
}
(在你的情况下它是静态的)