Java 阿皮姆、爪哇及加拿大;Testng-查找NullPointerException的原因

Java 阿皮姆、爪哇及加拿大;Testng-查找NullPointerException的原因,java,nullpointerexception,appium,driver,Java,Nullpointerexception,Appium,Driver,在Appium和emulator启动之前,我得到了一个NullPointerException。因此,试图通过在代码中包含sysout行来进行调试是毫无帮助的。 如果有人有什么建议,请通过发送,因为我快疯了 我的依赖项: <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artif

在Appium和emulator启动之前,我得到了一个
NullPointerException
。因此,试图通过在代码中包含
sysout
行来进行调试是毫无帮助的。 如果有人有什么建议,请通过发送,因为我快疯了

我的依赖项:

<dependencies>

        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>io.appium</groupId>
            <artifactId>java-client</artifactId>
            <version>7.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.0.0-beta3</version>
        </dependency>

        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>4.0.0</version>
        </dependency>

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies> 
我的testng.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Android Parallel Execution" parallel="tests" thread-count="2" verbose="7">
    <test name="Device1">
        <parameter name="platformVersion" value="9.0"/>
        <parameter name="emulatorNumber" value="emulator-5554"/>
        <parameter name="deviceName" value="Android9_Nexus"/>
        <parameter name="port" value="4723"/>
        <classes>
            <class name="MA.steps.TestRunner"/>
        </classes>
    </test>
</suite>

这是我第一次在测试中调用
驱动程序
,但让我困惑的是,它甚至没有启动appium或启动模拟器就抛出了
nullpointerexception

问题在于测试代码

您创建了一个套件xml文件,仅包含
TestRunner
类。但是整个appium实例化逻辑都被困在
Hooks
类中,该类通过TestNG配置注释
@BeforeTest
@AfterTest
完成。但是这个类既不包括在您的套件中,您的测试类(
TestRunner
)也不扩展它。因此,您的配置不会被调用,从而导致
AppiumDriver
对象的值为空

要解决此问题,可以执行以下操作之一:

  • 编辑套件xml文件,并在其中包含
    Hooks
    (或)
  • 构建一个TestNG监听器,该监听器实现
    IInvokedMethodListener
    ,并在调用之前将驱动程序实例化移动到其

  • 你能试着像下面那样初始化你的驱动程序吗?driver=newandroiddriver(新URL(“:”+port+“/wd/hub”),大写);您能提供myAccountOverviewScreen.java的实现吗?提前感谢感谢您的建议!我在xml文件中包含了钩子,它解决了模拟器没有被实例化的问题。但是,驱动程序仍然会导致问题,因为我的应用程序加载到模拟器上,但仍然会在调用驱动程序的第一段代码上抛出nullpointerexception。您是否知道发生这种情况的原因?驱动程序在到达测试代码之前是正常的,然后变为null。
    package MA.steps;
    
    import cucumber.api.CucumberOptions;
    import cucumber.api.testng.AbstractTestNGCucumberTests;
    
    @CucumberOptions(
            plugin = {"pretty", "html:target/cucumber-reports"}
            , monochrome = true
            , features = "src/test/java/feature"
            , tags = "@Login"
    )
    
    public class TestRunner extends AbstractTestNGCucumberTests {
    
    }
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="Android Parallel Execution" parallel="tests" thread-count="2" verbose="7">
        <test name="Device1">
            <parameter name="platformVersion" value="9.0"/>
            <parameter name="emulatorNumber" value="emulator-5554"/>
            <parameter name="deviceName" value="Android9_Nexus"/>
            <parameter name="port" value="4723"/>
            <classes>
                <class name="MA.steps.TestRunner"/>
            </classes>
        </test>
    </suite>
    
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);