当我尝试在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");
}
}
}
答案 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语句存在。这样,无论何时使用驱动程序,您都更确定它是正确的驱动程序,它不会崩溃,超时或变为空。