【问题标题】:Getting java.lang.NullPointerException in POM uisng page Factory在 POM uisng 页面工厂中获取 java.lang.NullPointerException
【发布时间】:2019-06-26 09:44:00
【问题描述】:

我在下面发布了一些到目前为止我已经完成的示例代码,我收到了一个异常 java.lang.NullPointerException

基类:

public class TestBase {
    public static WebDriver driver= null;

    @BeforeSuite
    public void initialize(){
        System.setProperty("webdriver.chrome.driver","...chromedriver_win32\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.get("abcd.com");
    }

    @AfterSuite
    public void TearDownTest()
    {
        TestBase.driver.quit();
    }
}

登录页面:

public class LoginPage {

    WebDriver driver;

    public LoginPage(WebDriver driver)
    {
        this.driver= driver;
    }

    @FindBy(how=How.XPATH, using="//*[@id='email_id']") WebElement EmailTextBox;
    @FindBy(how=How.XPATH, using="//*[@id='password']")WebElement PassworTextBox;
    @FindBy(how=How.XPATH, using="//*[@id='frm_login']/div[4]/input") WebElement LoginButton;

    public void setemail(String strmail)
    {
        EmailTextBox.sendKeys(strmail);
    }

    public void setpwd(String strpwd)
    {
        try
        {
            PassworTextBox.sendKeys(strpwd);
        }
        catch (TimeoutException e) 
        {
            System.out.println("Time out exception " + e);
        } 
        catch (ElementNotSelectableException e) {
            System.out.println("Element not selectable exception " + e);
        } catch (NoSuchElementException e) {
            System.out.println("No such element found " + e);
        } catch (ElementNotVisibleException e) {
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("Something Wrong " + e);
        }
    }

    public void ClickLoginBtn()
    {
        LoginButton.click();
    }
}

LoginTest 类:

public class LoginTest extends TestBase{

    @Test
    public void init()
    {
        System.out.println("In the init method");
        LoginPage lg=PageFactory.initElements(driver, LoginPage.class);
        lg.setpwd("123123");
        lg.setemail("abc@gmail.com");
        lg.ClickLoginBtn();
    }
}

我在设置用户名和密码时收到NullPointerException。请你帮助我好吗?

我是使用 PageFactory 的 POM 的新手,所以我不知道如何解决它,但如果有人能帮我解决这个问题,那将对我有很大帮助。

【问题讨论】:

    标签: java selenium selenium-webdriver page-factory


    【解决方案1】:

    您不应该初始化 WebDriver 实例,即 driver 两次,如下所示:

    public static WebDriver driver= null;
    

    WebDriver driver=new ChromeDriver();
    

    保持全局声明为:

    public static WebDriver driver= null;
    

    并将该行更改为:

    driver=new ChromeDriver();
    

    【讨论】:

      【解决方案2】:

      尝试在driver.get("abcd.com"); 之后添加超时以确保页面已完成加载,并且可以找到定义 EmailTextBox 和 PassworTextBox 的 WebElements。
      或者像这样使用 WebDriverWait

      new WebDriverWait(driver, 10))
         .until(ExpectedConditions.visibilityOf(By.id("someid")));
      

      【讨论】:

      • 显式等待不会修复 NullPointerException
      • 如果问题来自未定义的元素,因为页面中没有它们的 id,它可能是
      • @Ehcnalb 不,那会抛出NoSuchElementException。如果你不使用PageFactory 类的initElements 方法,NullPointerException 可能会被抛出
      【解决方案3】:

      我希望你已经像这样初始化了页面工厂元素

      public LoginPage(WebDriver driver) {           
        this.driver = driver; 
        PageFactory.initElements(driver, this);
      }
      

      在您的测试课程中, 我会放置

      LoginPage lg = new LoginPage(driver);

      Read more here:
      https://www.seleniumeasy.com/selenium-tutorials/page-factory-pattern-in-selenium-webdriver
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        • 2021-03-25
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多