2016-02-04 38 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元素时,测试在错误的屏幕上。

相关问题