当我使用 pojo 时,出现异常?

when i am using pojo, i am getting exception?

大家好,请检查我的代码

public class Sample1 extends Sample {
        public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver",
                "C:\Users\Balaji-PC\cucumber\SamplePro\driver\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.facebook.com/");
        driver.manage().window().maximize();

        Sample s= new Sample1();
        WebElement d = s.getUsername();

        d.sendKeys("lsmanikandan");
        s.getPassword().sendKeys("manikandan");
    }
}

请查看下面我的pojo class

public class Sample {
    WebDriver driver;
    public Sample() {
        PageFactory.initElements(driver, this);
    }

    @FindBy(id = "email")
    private WebElement username;

    @FindBy(id = "pass")
    private WebElement password;

    public WebElement getUsername() {
        return username;
    }

    public WebElement getPassword() {
        return password;
    }

}

请在下面找到例外情况

Exception in thread "main" java.lang.NullPointerException at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69) at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38) at com.sun.proxy.$Proxy4.sendKeys(Unknown Source) at org.test.Sample1.main(Sample1.java:18)

您的代码中的问题是您没有将 driver 状态从 child class 示例 1 传递到基础 class 示例。

神奇就在这三点

  1. 在 Child class - Sample1

    中添加参数化构造函数

    public Sample1(WebDriver driver) { super(driver); }

  2. 在 Parent Class - 示例中添加参数化构造函数

    public 示例(WebDriver driver){ PageFactory.initElements(driver, 这个); System.out.println("Page Factory started"); }

  3. 通过传递 driver.

    创建 object 以在 Parent class 中调用页面工厂

    样本 s = 新样本 1(driver);

    public class Sample {
    WebDriver driver;
    public Sample(WebDriver driver) {
        PageFactory.initElements(driver, this);
        System.out.println("Page Factory started");
    }
    
    @FindBy(id = "email")
    private WebElement username;
    
    @FindBy(id = "pass")
    private WebElement password;
    
    public WebElement getUsername() {
        System.out.println(username.getAttribute("data-testid"));
        return username;
    }
    
    public WebElement getPassword() {
        System.out.println(username.getAttribute("data-testid"));
        return password;
    }  }
    
    public class Sample {
        WebDriver driver;
    public Sample(WebDriver driver) {
        PageFactory.initElements(driver, this);
        System.out.println("Page Factory started");
    }
    
    @FindBy(id = "email")
    private WebElement username;
    
    @FindBy(id = "pass")
    private WebElement password;
    
    public WebElement getUsername() {
        System.out.println(username.getAttribute("data-testid"));
        return username;
    }
    
    public WebElement getPassword() {
        System.out.println(username.getAttribute("data-testid"));
        return password;
    }    }