2016-11-10 17 views
1

appiumでテストを実行しようとすると、2回目のテストは実行されません。そのショーは "新しいセッションを作成できませんでした"。第二のテストの実行がエラーがここJUnitで2回目のテストを実行できません。セッションが作成されていません。

を投げながら、私の第二のテスト関数名は、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("[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

ああ、BeforeClassが私のために働いた、ありがとう:-) –

+0

もちろん、質問の作成者は回答を選択しますが、この場合、私はこれが3人からの最良の答えであるとは思わないでしょう。 この特定の解決策は、最初のテストの終了状態が、将来のテストのリスクを加える2番目のテストの開始状態に一致することを前提としています。最初のテストが途中で失敗した場合、2番目のテストも失敗します。 あなたはサーバーではなくテストセッションを開始しているので、これが答えではないと私は反対します。 –

0

である私は、あなたがテストした後にドライバの閉鎖が欠落していると信じている - あなたはときに最初に新しいセッションを起動しよう1つは既にそこにある。次のコードを追加してみてください:

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

新しいドライバオブジェクトを作成しようとしている人もいます。これは、注釈が与えられたJUNITのフローのために発生します。 Before Test After Before Test After ect は、あなたが最後のドライバすなわち:

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

またはNOT句の前でドライバを作成を閉じ@Afterメソッドを作成する必要があるのいずれかこの問題を解決するには。代わりに、BeforeClass関数でドライバを作成することができます。

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

これらは、ドライバをインスタンス化するための最良の方法ではありません。代わりに、ドライバオブジェクトを保持するクラスを持つ方がよいでしょう。このクラスをDriverContainerと呼びますが、ドライバコンテナにはgetDriverメソッドがあり、if-elseステートメントまたはswitchステートメントを介してドライバが存在するかどうかによってドライバをインスタンス化または返すことができます。この方法では、ドライバを使用するたびに、クラッシュしたり、タイムアウトしたり、ヌルになったりしない適切なドライバであることがより確実になります。

関連する問題