2016-02-04 37 views
-1

我在UIautomator上運行一個簡單的測試。我有一個有兩種方法的類(一個用於設置環境,另一個用於在設備上執行UI交互。)UIAutomator - 錯誤 - 調用虛擬方法

而我有另一個類實例化第一個類並調用它們的方法。錯誤,當我運行代碼:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.test.uiautomator.UiObject2.click()' on a null object reference 
    at com.example.rcorrea.AutoCSP.testCSP(AutoCSP.java:147) 
    at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 
    at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) 
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1873) 

我的代碼:

主類(AutoCSP_new):

package com.example.rcorrea; 

import android.support.test.uiautomator.By; 
import android.support.test.uiautomator.BySelector; 
import android.support.test.uiautomator.UiDevice; 
import android.support.test.uiautomator.UiObject; 
import android.support.test.uiautomator.UiObject2; 
import android.support.test.uiautomator.Until; 
import android.test.InstrumentationTestCase; 
import java.util.*; 
import static java.lang.System.out; 


/** 
* Created by rcorrea on 10/1/2015. 
*/ 
public class AutoCSP_new extends InstrumentationTestCase { 


    private UiDevice mDevice; 
    private AutoCSP_Generica autocsp; 
    private Vector numeros; 

    public void test() throws Exception 

    { 
     numeros = new Vector (5); 

     numeros.addElement(new String ("0191234")); 
     numeros.addElement(new String ("0191234")); 
     numeros.addElement(new String ("0191234")); 
     numeros.addElement(new String ("0191234")); 


     //numeros[0] = "0191234"; 
     //numeros[1] = "0191234567"; 
     // numeros[2] = "01912345678"; 
     //numeros[3] = "019123456789"; 
     autocsp = new AutoCSP_Generica (numeros); 

     autocsp.setUp(); 
     autocsp.testCSP(); 
    } 
} 

的類,它的東西:

package com.example.rcorrea; 

import android.support.test.uiautomator.By; 
import android.support.test.uiautomator.BySelector; 
import android.support.test.uiautomator.UiDevice; 
import android.support.test.uiautomator.UiObject; 
import android.support.test.uiautomator.UiObject2; 
import android.support.test.uiautomator.Until; 
import android.test.InstrumentationTestCase; 
import java.util.*; 

import static android.support.test.uiautomator.UiDevice.*; 
import static java.lang.System.out; 


import java.sql.Time; 

/** 
* Created by rcorrea on 10/1/2015. 
*/ 
public class AutoCSP_Generica extends InstrumentationTestCase { 


    private UiDevice mDevice; 
    //private String[] numeros = new String[10]; 
    private Vector numeros; 

    public AutoCSP_Generica(Vector num) 
    { 
     this.numeros = num; 
    } 


    public void setUp() throws Exception { 
     super.setUp(); 

     mDevice = UiDevice.getInstance(getInstrumentation()); 

     mDevice.pressHome(); 

     mDevice.wait(Until.hasObject(By.text("Telefone")), 10000); 

     UiObject2 appsButton = mDevice.findObject(By.text("Telefone")); 
     if (mDevice.findObject(By.text("Telefone")) == null){ 

      mDevice.pressHome(); 

     } 
     appsButton.click(); 


     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/more_menu")), 3000); 
     UiObject2 moreButton = mDevice.findObject(By.res("com.android.contacts:id/more_menu")); 
     moreButton.click(); 

     mDevice.wait(Until.hasObject(By.text("Configurações")), 3000); 
     mDevice.waitForIdle(10000); 
     UiObject2 buttonSettings = mDevice.findObject(By.text("Configurações")); 
     buttonSettings.click(); 

     //assertEquals com.android.systemui:id/mobile.enabled = true; 

     mDevice.wait(Until.hasObject(By.text("Chamadas")), 3000); 
     UiObject2 buttonCall = mDevice.findObject(By.text("Chamadas")); 
     buttonCall.click(); 



     mDevice.wait(Until.hasObject(By.text("Mais configurações")), 5000); 
     UiObject2 buttonMore = mDevice.findObject(By.text("Mais configurações")); 
     buttonMore.click(); 

     while (mDevice.hasObject(By.textContains("Lendo")) == true){ 

      mDevice.waitForIdle(5000); 
     } 

     mDevice.wait(Until.hasObject(By.text("Números FDN")), 5000); 
     UiObject2 buttonFDN = mDevice.findObject(By.text("Números FDN")); 
     buttonFDN.click(); 

     mDevice.waitForIdle(6000); 

     mDevice.wait(Until.hasObject(By.text("Ativar FDN")), 5000); 
     UiObject2 buttonOn = mDevice.findObject(By.text("Ativar FDN")); 
     buttonOn.click(); 

     mDevice.waitForIdle(5000); 


     mDevice.wait(Until.hasObject(By.clazz("android.widget.EditText")), 5000); 
     UiObject2 buttonInsert = mDevice.findObject(By.clazz("android.widget.EditText")); 
     buttonInsert.setText("1234"); 


     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.text("OK")), 5000); 
     UiObject2 buttonOk = mDevice.findObject(By.text("OK")); 
     buttonOk.click(); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.text("Lista FDN")), 5000); 
     UiObject2 buttonList = mDevice.findObject(By.text("Lista FDN")); 
     buttonList.click(); 

     mDevice.waitForIdle(5000); 

     //Adicionando o Contato na FDN, 8 Digitos 
     mDevice.wait(Until.hasObject(By.text("Adicionar")), 5000); 
     UiObject2 buttonAdd = mDevice.findObject(By.text("Adicionar")); 
     buttonAdd.click(); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_number")), 7000); 
     UiObject2 buttonNum = mDevice.findObject(By.res("com.android.phone:id/fdn_number")); 
     buttonNum.setText("01912345678"); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_pin2")), 7000); 
     UiObject2 buttonPIN = mDevice.findObject(By.res("com.android.phone:id/fdn_pin2")); 
     buttonPIN.setText("1234"); 

     mDevice.waitForIdle(5000); 
     mDevice.wait(Until.hasObject(By.text("Salvar")), 7000); 
     UiObject2 buttonSave = mDevice.findObject(By.text("Salvar")); 
     buttonSave.click(); 

     mDevice.waitForIdle(5000); 

     //Adicionando com 9 Digitos. 
     mDevice.wait(Until.hasObject(By.text("Adicionar")), 5000); 
     buttonAdd = mDevice.findObject(By.text("Adicionar")); 
     buttonAdd.click(); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_number")), 7000); 
     buttonNum = mDevice.findObject(By.res("com.android.phone:id/fdn_number")); 
     buttonNum.setText("019123456789"); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_pin2")), 7000); 
     buttonPIN = mDevice.findObject(By.res("com.android.phone:id/fdn_pin2")); 
     buttonPIN.setText("1234"); 

     mDevice.waitForIdle(5000); 
     mDevice.wait(Until.hasObject(By.text("Salvar")), 7000); 
     buttonSave = mDevice.findObject(By.text("Salvar")); 
     buttonSave.click(); 

     mDevice.waitForIdle(5000); 

     //Adicionando com 8 Digitos e CSP diferente 
     mDevice.wait(Until.hasObject(By.text("Adicionar")), 5000); 
     buttonAdd = mDevice.findObject(By.text("Adicionar")); 
     buttonAdd.click(); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_number")), 7000); 
     buttonNum = mDevice.findObject(By.res("com.android.phone:id/fdn_number")); 
     buttonNum.setText("0181912345678"); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_pin2")), 7000); 
     buttonPIN = mDevice.findObject(By.res("com.android.phone:id/fdn_pin2")); 
     buttonPIN.setText("1234"); 

     mDevice.waitForIdle(5000); 
     mDevice.wait(Until.hasObject(By.text("Salvar")), 7000); 
     buttonSave = mDevice.findObject(By.text("Salvar")); 
     buttonSave.click(); 

     mDevice.waitForIdle(5000); 

     //Adicionando com CSP diferente e 9 Digitos 
     mDevice.wait(Until.hasObject(By.text("Adicionar")), 5000); 
     buttonAdd = mDevice.findObject(By.text("Adicionar")); 
     buttonAdd.click(); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_number")), 7000); 
     buttonNum = mDevice.findObject(By.res("com.android.phone:id/fdn_number")); 
     buttonNum.setText("01819123456789"); 

     mDevice.waitForIdle(5000); 

     mDevice.wait(Until.hasObject(By.res("com.android.phone:id/fdn_pin2")), 7000); 
     buttonPIN = mDevice.findObject(By.res("com.android.phone:id/fdn_pin2")); 
     buttonPIN.setText("1234"); 

     mDevice.waitForIdle(5000); 
     mDevice.wait(Until.hasObject(By.text("Salvar")), 7000); 
     buttonSave = mDevice.findObject(By.text("Salvar")); 
     buttonSave.click(); 

     mDevice.waitForIdle(5000); 
     mDevice.pressHome(); 


    } 


    public void testCSP() throws Exception { 
     //FirstTest 11 Numbers. 


     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     UiObject2 buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(0).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Chamar")), 10000); 
     UiObject2 buttonDial = mDevice.findObject(By.desc("Chamar")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     UiObject2 buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Second Test 7 Numbers. 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(1).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Chamar")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Chamar")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Third Test 12 Numbers 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(2).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Chamar")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Chamar")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Fourth Test 10 Numbers 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(3).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Chamar")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Chamar")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Starting Videocall protocols. 

     //FirstTest 11 Numbers. 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(0).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Videochamada")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Videochamada")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     mDevice.waitForIdle(10000); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Second Test 7 Numbers. 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(1).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Videochamada")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Videochamada")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     mDevice.waitForIdle(10000); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Third Test 12 Numbers 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(2).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Videochamada")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Videochamada")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     mDevice.waitForIdle(10000); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 

     //Fourth Test 10 Numbers 
     mDevice.wait(Until.hasObject(By.res("com.android.contacts:id/digits")), 3000); 
     buttonNumber = mDevice.findObject((By.res("com.android.contacts:id/digits"))); 
     buttonNumber.click(); 

     buttonNumber.setText(numeros.get(3).toString()); 

     mDevice.wait(Until.hasObject(By.desc("Videochamada")), 10000); 
     buttonDial = mDevice.findObject(By.desc("Videochamada")); 
     buttonDial.click(); 

     mDevice.wait(Until.hasObject(By.text("Encerrar")), 50000); 
     buttonEnd = mDevice.findObject(By.text("Encerrar")); 
     buttonEnd.click(); 

     mDevice.waitForIdle(10000); 
     mDevice.pressBack(); 


    } 
} 

你能幫我嗎?當我在一個單一的啞類中編碼時,一切都運行良好,但是當我將它們分開以重新使用代碼時,我得到了這個錯誤....

+0

根據堆棧跟蹤,錯誤發生在AutoCSP.java的第147行。這是什麼?你有猜測哪些引用是空的嗎? –

+0

在你的問題中你有太多的代碼,所以TLDR,但對於那些因爲Uiautomator在測試結束前退出的人來說,請查看這裏的答案:http://stackoverflow.com/questions/31377936/the-synchronization-的-uiautomator/31551028#31551028 – gorbysbm

回答

0

對mDevice.findObject(..)的調用之一是返回null,意味着沒有找到該對象。然後,當您嘗試調用null對象的click()時,您將得到一個NPE。

你應該仔細檢查第147行,看看哪個特定的呼叫失敗。您正在使用的選擇器可能存在問題,或者當它試圖查找UI元素時,測試在錯誤的屏幕上。

相關問題