我无法在JUnit中运行我的第二个测试,它显示"会话未创建"

时间:2016-11-10 17:00:52

标签: java android automation appium

当我尝试在appium中运行我的测试时,我的第二个测试没有运行。它显示"无法创建新会话"。我的第二个测试函数名称是BAddon,而第二个测试执行错误抛出

这是我的代码

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class FirstAutomate {
private WebDriver driver;

@Before
public void setup() throws Exception {
    //File app = new File("C:\\sdk\\platform-tools\\Myapp.apk");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    //capabilities.setCapability("BROWSER_NAME", "Android");
    capabilities.setCapability("VERSION", "5.0.2"); 
    capabilities.setCapability("deviceName","G3 Beat");
    capabilities.setCapability("appPackage", "com.myapp.app");
     capabilities.setCapability("appActivity","com.myapp.app.screens.prehomescreens.activities.SplashScreen");
    capabilities.setCapability("platformName","Android");

     capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,MobilePlatform.ANDROID);
    //capabilities.setCapability("app", app.getAbsolutePath());
    try{
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    }catch(MalformedURLException e)
    {
        e.printStackTrace();
    }
 // TODO Auto-generated method stub
    }

   @Test
   public void AppLogin() throws InterruptedException {
  //Tapping login button
   Thread.sleep(5000);
   driver.findElement(By.id("loginButtonTextView")).click();
   //User inputs mail id
      driver.findElement(By.id("emailIdEditText")).sendKeys("rag1@mail.com");
   //User login button click
   driver.findElement(By.id("loginBtnRCB")).click();
    //User inputs OTP
   driver.findElement(By.id("pinPadContainer")).sendKeys("123456");
   WebElement loginBtn = driver.findElement(By.id("nextBtnRCB"));
   if(loginBtn.isDisplayed())
   {
       loginBtn.click();
   }else
   {
       System.out.println("Button is not present");
   }
   Thread.sleep(15000);
   }



  @Test
  public void BAddOn() throws InterruptedException{

//Thread.sleep(10000);
WebElement AddonBtn = driver.findElement(By.id("studentStatusButton"));
if(AddonBtn.isDisplayed())
{
AddonBtn.click();   
}else{
    System.out.println("AddOnBtn is not visible");
}

}
 }

3 个答案:

答案 0 :(得分:0)

我相信您在测试后错过了驱动程序关闭 - 当第一个会话已经存在时,您尝试启动新会话。尝试添加以下代码:

@After
public static shutdown() {
    driver.quit()
}

答案 1 :(得分:0)

我想在每个测试用例之前调用setup。服务器运行后,您不需要再次调用设置。

您需要找到一种方法,以便在开始执行您的测试用例之前只调用一次appium服务器设置。我认为有@BeforeClass注释可以做到这一点。

答案 2 :(得分:0)

正如其他人提到的那样,您正在尝试创建一个新的驱动程序对象。这是由于给定注释的JUNIT流程而发生的。 Before Test After Before Test After ect 要解决此问题,您需要创建一个关闭最后一个驱动程序的@After方法,即:。

@After
public void tearDown() {
     driver.quit();
}

或者不在before子句中创建驱动程序。相反,您可以在BeforeClass函数中创建驱动程序,即。

@BeforeClass
public void beforeClass() {
     //create driver
}

如前所述,这些并不是实例化驱动程序的最佳方法。相反,拥有一个包含驱动程序对象的类会更好。让我们调用这个类DriverContainer,驱动程序容器然后有一个getDriver方法,可以用来实例化或返回驱动程序,具体取决于驱动程序是否通过if-else语句或switch语句存在。这样,无论何时使用驱动程序,您都更确定它是正确的驱动程序,它不会崩溃,超时或变为空。