2015-08-18 4 views
-2

Я пытаюсь автоматизировать и интегрировать Selenium с Appium, и я использую Eclipse с TestNG для выполнения.Исключение Null Pointer с использованием TestNG

Теперь в рамках проекта у меня есть пакет с двумя классами; первый класс для входа в приложение, и второй класс для выхода из системы

Первый код класса -

package com.gma.test; 

    import java.io.File; 
    import java.net.MalformedURLException; 
    import java.net.URL; 
    import java.util.concurrent.TimeUnit; 

    import org.openqa.selenium.By; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    import org.testng.annotations.BeforeClass; 
    import org.testng.annotations.BeforeSuite; 
    import org.testng.annotations.Test; 

    import io.appium.java_client.AppiumDriver; 
    import io.appium.java_client.android.AndroidDriver; 
    import java.text.SimpleDateFormat; 
    import java.util.Calendar; 

    public class LoginApp { 
     public AppiumDriver driver; 

     @BeforeSuite 
     public void beforeMethod() throws InterruptedException { 

      File app = new File("C:\\Users\\mc30058\\Downloads\\gma-QA-RELEASE-QRCode-07022015_v4.5.4028.apk"); 
      DesiredCapabilities capabilities = new DesiredCapabilities(); 
      capabilities.setCapability("deviceName","Android Emulator"); 
      capabilities.setCapability("platformVersion", "4.4"); 
      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(); 
      } 

      driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 
      driver.findElement(By.xpath("//android.widget.Button[@resource-id='com.mcdonalds.app:id/button_choose_closest']")).click(); 
      driver.findElement(By.xpath("//android.widget.Button[@text='Continue']")).click(); 
      driver.findElement(By.xpath("//android.widget.Button[@text='OK']")).click(); 

     } 

     @Test (priority=1) 
     public void Login() { 

      driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 

      driver.findElement(By.xpath("//android.widget.TextView[@text='Sign In']")).click(); 
      driver.findElement(By.xpath("//android.widget.EditText[@resource-id='com.mcdonalds.app:id/signin_edittext_email']")).sendKeys("[email protected]"); 
      driver.findElement(By.xpath("//android.widget.EditText[@resource-id='com.mcdonalds.app:id/signin_edittext_password']")).sendKeys("Anujtest2"); 

      currentTime(); 
      driver.findElement(By.xpath("//android.widget.Button[@text='Sign In']")).click(); 
      driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS); 
      driver.findElement(By.xpath("//android.widget.Button[@text='Yeah, count me in!']")).isDisplayed(); 
      currentTime(); 
      driver.findElement(By.xpath("//android.widget.Button[@text='No, thanks. I like to be out of the loop']")).click(); 
     } 

     private void currentTime() { 
      Calendar cal = Calendar.getInstance(); 
      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); 
      System.out.println(sdf.format(cal.getTime())); 
     } 

    } 

Second class code: 

    package com.gma.test; 

    import java.io.File; 
    import java.net.MalformedURLException; 
    import java.net.URL; 
    import java.util.concurrent.TimeUnit; 

    import org.openqa.selenium.By; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    import org.testng.annotations.BeforeClass; 
    import org.testng.annotations.Test; 

    import io.appium.java_client.AppiumDriver; 
    import io.appium.java_client.android.AndroidDriver; 
    import java.text.SimpleDateFormat; 
    import java.util.Calendar; 

    public class Logout { 

     public AppiumDriver driver; 




     @Test (priority=3) 
     public void LogoutApp() { 

      driver.findElement(By.xpath("//android.widget.TextView[@content-desc='Navigation Button']")).click(); 

      driver.findElement(By.xpath("//android.widget.TextView[@text='Sign Out']")).click(); 
       driver.findElement(By.xpath("//android.widget.Button[@text='Sign Out']")).click(); 
     } 
    } 

Содержание из Testng.xml

<suite name = "GMA Automation"> 
    <test name = "GMA Automation"> 
     <classes> 
      <class name = "com.gma.test.LoginApp"/> 
      <class name = "com.gma.test.Logout"/> 
     </classes> 
    </test> 
</suite> 

я получаю исключение нулевого указателя после выполнения первого класса. Сервер Appium перестает говорить, что больше не получено команд. Пожалуйста помоги.

+0

Не могли бы вы поделиться с stacktrace? – juherr

+0

Если вы предоставляете Stacktrace, это поможет нам найти проблему, но теперь из вашего предоставленного кода вам не хватает приоритета № 2. вы предоставили тестовый вариант выхода в приоритет 3, но он достигнет приоритета 2. Thanx – SahilPatel

ответ

0

Вы получаете NPE b'coz, вы указали еще одну ссылку на драйвер public AppiumDriver driver; в своем классе выхода.

И вы используете эту ссылку драйвера без создания экземпляра.

0

В классе выхода вы забудете создать экземпляр своего драйвера AppiumDriver.

попробовать это:

водитель общественного AppiumDriver;

driver = новый AndroidDriver();

Смежные вопросы