首页 > 解决方案 > selenium NullPointerException 解决方案的驱动程序

问题描述

我有测试用例。

public class BaseTest {
    public WebDriver driver;
    ...
   @BeforeClass(alwaysRun = true)
    public void setUp() throws Exception {
        driver = getDriver("chrome");
         ...}
    }

我正在使用带有 testng 的侦听器。

    public void onTestFailure(ITestResult result) {

        String excepionMessage=Arrays.toString(result.getThrowable().getStackTrace());
        testReport.get().fail("<details>" + "<summary>" + "<b>" + "<font color=" + "red>" + "Exception Occured:Click to see"
                + "</font>" + "</b >" + "</summary>" +excepionMessage.replaceAll(",", "<br>")+"</details>"+" \n");

        extentManager.captureScreenshot();
}

extentManager 有这样的 captureScreentshot

    public void captureScreenshot() {
        Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);

        Date d = new Date();
        screenshotName = "Record_" + "customer.getRecordNum()" + "_" + d.toString().replace(":", "_").replace(" ", "_") + ".jpg";

        try {
            ImageIO.write(screenshot.getImage(),"jpg",new File(".//reports//" + screenshotName));
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

在 extentManager 中必须有来自测试库的驱动程序实例,但它为空。

所以我添加了 Driver 单例模式类。

public class Driver {
    private static Driver driver = null;
    public WebDriver webDriver;

    Driver(WebDriver webDriver){
        this.webDriver = webDriver;
    };

    public static Driver getInstance(WebDriver webDriver){
        //lazy initialization
        if (driver== null)
            driver = new Driver(webDriver);
        return driver;
    }

}

固定基数测试

    // static constants
    public static Driver DRIVER;


    @BeforeClass(alwaysRun = true)
    public void setUp() throws Exception {
        DRIVER = Driver.getInstance(getDriver("chrome"));
        driver = DRIVER.webDriver;

并捕获截图

public class ExtentManager extends BaseTest {
    ...
    public void captureScreenshot() {
        Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(DRIVER.webDriver);

        Date d = new Date();
        screenshotName = "Record_" + "customer.getRecordNum()" + "_" + d.toString().replace(":", "_").replace(" ", "_") + ".jpg";

        try {
            ImageIO.write(screenshot.getImage(),"jpg",new File(".//reports//" + screenshotName));
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

我添加了 DRIVER 的静态变量。

驱动程序-> DRIVER.webDriver

因为我是 JAVA 编程的新手。我不知道如何处理类之间的实例。有哪位专家可以对此发表评论吗?

谢谢你。

标签: javaseleniumtestng

解决方案


推荐阅读