Java “面向”;“空指针异常”;在阿皮姆

Java “面向”;“空指针异常”;在阿皮姆,java,android,selenium-webdriver,appium,Java,Android,Selenium Webdriver,Appium,我正在学习appium,试图将对象从一个类调用到另一个类,但遇到空指针异常。 下面是我的代码: public class TestCommons { public AndroidDriver driver; public void setUp() { DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("deviceN

我正在学习appium,试图将对象从一个类调用到另一个类,但遇到空指针异常。 下面是我的代码:

public class TestCommons {

    public AndroidDriver driver;

    public void setUp() {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "MotoE");
        File file = new File("D:/APK1/com.vector.guru99.apk");
        capabilities.setCapability("app", file);

        try {
            driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    public void tearDown() {

        driver.closeApp();
    }
}
我想在其他类中使用上述类,即“TestCommons”。我想使用驱动程序对象

二等舱如下:

public class Day03 extends TestCommons {

    TestCommons commons = new TestCommons();

    @BeforeClass
    public void beforeClass() {
        commons.setUp();

    }

    @Test(enabled = true)
    public void f() {

        if (driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed()) {
            System.out.println("Quiz is displayed");
            driver.findElement(By.id("com.vector.guru99:id/action_quiz")).click();
            System.out.println("quiz is click");

        }
    }

    @AfterClass(enabled = true)
    public void afterClass() {
        commons.tearDown();
    }

}
正在第二个程序@中获取空指针:

if(driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed();

谁能给我澄清一下。

你有两个问题之一

1) 在setUp()中未正确设置驱动程序。如果是这种情况,你可能会有一个例外。检查日志以确保没有异常

2) driver.findElement(By.id(“com.vector.guru99:id/action\u quick”)返回null。您可以通过设置调试点并在该调用上运行求值表达式来检查这一点。

请尝试以下方法:

public class TestCommons {

    public static AndroidDriver driver;
    @BeforeClass
    public void setUp() {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "MotoE");
        File file = new File("D:/APK1/com.vector.guru99.apk");
        capabilities.setCapability("app", file);

        try {
            driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
    @AfterClass
    public void tearDown() {

        driver.closeApp();
    }
}


在哪里声明驱动程序?在“TestComons”类中声明。问题中的第一个类在调用isDisplayed()之前检查driver.findElement的结果。我想你会发现你的空问题。试过了。但仍然面对着相同的方向,请。此外,appium日志将非常感谢!它工作得很好。你能给我解释一下以下几点吗。我们将“驱动程序”声明为静态的,所以不需要实例化。我们正在void setUp()中初始化为“new=…”。我们要超越司机吗?
public class Day03 extends TestCommons {

       @Test(enabled = true)
    public void f() {

        if (driver.findElement(By.id("com.vector.guru99:id/action_quiz")).isDisplayed()) {
            System.out.println("Quiz is displayed");
            driver.findElement(By.id("com.vector.guru99:id/action_quiz")).click();
            System.out.println("quiz is click");

        }
    }



}