2016-11-10 53 views
1

当我尝试在appium中运行我的测试时,我的第二个测试未运行。它的节目“无法创建新会话”。我的第二个测试函数的名字是BAddon,而第二测试操作的错误时,抛出我不能在JUnit中运行我的第二个测试,它显示“会话未创建”

这里是我的代码

@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("[email protected]"); 
    //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"); 
} 

} 
} 

回答

0

我想设置每测试用例之前调用。一旦服务器运行,您不需要再次调用安装程序。

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

+0

Ya BeforeClass为我工作,谢谢:-) –

+0

当然,这个问题的作者选择了答案,但在这种情况下,我不同意这是三个人中最好的答案。 此特定解决方案假定第一个测试的结束状态与第二个测试的开始状态相匹配,这会增加未来测试的风险。如果你的第一个测试在中间失败,那么第二个测试也会失败。 您正在启动测试会话,而不是服务器,因此我不同意这是答案。 –

0

我相信你在测试后缺少的驱动程序关闭 - 你先试的时候推出新的会话一个已经在那里。尝试添加以下代码:

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

正如其他人所提到的,您正试图创建一个新的驱动程序对象。出现这种情况是由于JUNIT给出了注释流。 Before Test After Before Test After ect 为了解决这个问题,你要么需要建立一个关闭最后一个驱动程序,即:

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

和不创建子句之前在驱动器中的@After方法。相反,您可以在BeforeClass函数中创建驱动程序。

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

因为已经提到,这些都不是实例化一个驱动器的最佳途径。相反,最好有一个保存你的驱动程序对象的类。我们可以称该类为DriverContainer,然后驱动程序容器有一个getDriver方法,该方法可用于实例化或返回驱动程序,具体取决于驱动程序是否通过if-else语句或switch语句存在。通过这种方式,无论何时使用驱动程序,您都可以确信它是没有崩溃,超时或变为空的正确驱动程序。

相关问题