Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java UIAutomator-错误-调用虚拟方法_Java_Android_Android Studio_Android Uiautomator - Fatal编程技术网

Java UIAutomator-错误-调用虚拟方法

Java UIAutomator-错误-调用虚拟方法,java,android,android-studio,android-uiautomator,Java,Android,Android Studio,Android Uiautomator,我正在UIautomator上运行一个简单的测试。我有一个类,有两个方法(一个用于设置环境,另一个用于在设备上执行UI交互) 我还有另一个类实例化第一个类并调用它们的方法。但是,当我运行代码时,我看到了这个错误: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.test.uiautomator.UiObject2.click()' on a null object ref

我正在UIautomator上运行一个简单的测试。我有一个类,有两个方法(一个用于设置环境,另一个用于在设备上执行UI交互)

我还有另一个类实例化第一个类并调用它们的方法。但是,当我运行代码时,我看到了这个错误:

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)
我的代码:

主类(自动SP_新):

类,该类执行以下操作:

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();


    }
}

你能帮我一下吗?当我在一个哑类中编码时,一切都运行得很好,但是当我将它们分离以在将来重用代码时,我得到了这个错误….

对mDevice.findObject(..)的一个调用返回null,这意味着找不到该对象。然后,当你尝试调用null对象上的click()时,你会得到一个NPE


您应该仔细检查第147行,看看哪个特定调用失败了。您正在使用的选择器可能有问题,或者测试在试图查找UI元素时出现了错误的屏幕。

对mDevice.findObject(..)的调用之一返回null,表示找不到该对象。然后,当您尝试调用null对象上的click()时,会得到一个NPE


您应该仔细检查第147行,看看哪个特定调用失败了。您正在使用的选择器可能有问题,或者当它试图查找UI元素时,测试出现在错误的屏幕上。

我在使用以下命令从命令行运行时出现此错误:

./gradlew连接Debugandroid试验

./gradlew连接的防松试验

我想我得到这些错误是因为我忘记了。例如,下面是我的
app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mypackage.android.sdk" >
    
    <instrumentation
        android:name="androidx.test.runner.AndroidJUnitRunner"
        android:targetPackage="com.mypackage.android.sdk"/>

</manifest>

使用以下命令从命令行运行时出现此错误:

./gradlew连接Debugandroid试验

./gradlew连接的防松试验

我想我得到这些错误是因为我忘记了。例如,下面是我的
app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mypackage.android.sdk" >
    
    <instrumentation
        android:name="androidx.test.runner.AndroidJUnitRunner"
        android:targetPackage="com.mypackage.android.sdk"/>

</manifest>

我在涉及需要权限的屏幕的测试中遇到此错误。我编写并调用了以下方法来处理请求权限和已授予权限的情况:

/**
 * Taps Allow on permission granting modal
 *
 * @see <a href="https://medium.com/exploring-android/handling-android-runtime-permissions-in-ui-tests-981f9dc11a4e">medium.com article</a>
 *
 * @param uiDevice
 * @throws UiObjectNotFoundException
 */
private void allowPermissionsIfNeeded(UiDevice uiDevice) throws UiObjectNotFoundException {
    if (Build.VERSION.SDK_INT >= 23) {
        UiObject allowPermissions = uiDevice.findObject(new UiSelector().text("ALLOW"));
        if (allowPermissions.exists()) {
            allowPermissions.click();
        }
    }
}
/**
*点击允许权限授予模式
*
*@见
*
*@param ui设备
*@UiObjectNotFoundException
*/
私有void AllowPermissionSifRequired(UiDevice UiDevice)引发UiObjectNotFoundException{
如果(Build.VERSION.SDK_INT>=23){
UiObject allowPermissions=uiDevice.findObject(新的UiSelector().text(“允许”));
if(allowPermissions.exists()){
allowPermissions.click();
}
}
}

多亏了乔·伯奇(Joe Birch),我才适应了屏幕显示“允许”而不是“允许”的情况作为文本。

我在涉及需要权限的屏幕的测试中遇到了这个错误。我编写并调用了以下方法来处理请求权限和已授予权限的情况:

/**
 * Taps Allow on permission granting modal
 *
 * @see <a href="https://medium.com/exploring-android/handling-android-runtime-permissions-in-ui-tests-981f9dc11a4e">medium.com article</a>
 *
 * @param uiDevice
 * @throws UiObjectNotFoundException
 */
private void allowPermissionsIfNeeded(UiDevice uiDevice) throws UiObjectNotFoundException {
    if (Build.VERSION.SDK_INT >= 23) {
        UiObject allowPermissions = uiDevice.findObject(new UiSelector().text("ALLOW"));
        if (allowPermissions.exists()) {
            allowPermissions.click();
        }
    }
}
/**
*点击允许权限授予模式
*
*@见
*
*@param ui设备
*@UiObjectNotFoundException
*/
私有void AllowPermissionSifRequired(UiDevice UiDevice)引发UiObjectNotFoundException{
如果(Build.VERSION.SDK_INT>=23){
UiObject allowPermissions=uiDevice.findObject(新的UiSelector().text(“允许”));
if(allowPermissions.exists()){
allowPermissions.click();
}
}
}

多亏了乔·伯奇(Joe Birch),我才适应了屏幕显示“允许”而不是“允许”的情况如文本所示。

根据stacktrace,错误发生在AutoCSP.java中的第147行。这是哪一行?您是否猜到哪个引用是
null
?您的问题中的代码太多了,所以TLDR,但是对于那些因为Uiautomator在测试结束前退出而来到这里的人,请在此处查看答案:Accordin对于stacktrace,错误发生在AutoCSP.java中的第147行。这是哪一行?您是否猜测哪个引用是
null
?您的问题中有太多的代码,因此TLDR,但是对于那些因为Uiautomator在测试结束前退出而来这里的人,请在此处查看答案: