【问题标题】:Page Factory testNG null pointer exception页面工厂 testNG 空指针异常
【发布时间】:2017-05-06 20:26:42
【问题描述】:

在 2 个不同的 testNg 类上获得 4 个页面和 2 个测试。 当我运行 testNG xml 时,它们会抛出一个空指针异常,我真的不知道为什么。 您能否告诉我您将如何修改以下代码以使其工作并解释原因?

1- 默认登陆页面:

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class DefaultLandingPage {

    private WebDriver driver;

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

    //Find Login link by using xpath
    @FindBy (xpath = "//*[@id='navbar-login-link']")
    private WebElement loginLink;

    //Clicking login link
    public void clickLoginButton(){
        loginLink.click();  
    }   
}

2- 登录页面

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LoginPage {

    private WebDriver driver;


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

    //Using FindBy for locating elements

    @FindBy (id="user_login")
    private WebElement userName;

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

    @FindBy (id="wp-submit")
    private WebElement submitButton;

    @FindBy (id="rememberme")
    private WebElement rememberMeCheckBox;


    public void login_wordpress(String uid,String pass)
    {
    userName.sendKeys(uid);
    password.sendKeys(pass);
    submitButton.click();
    }

    public void doNotRememberMe (){
        if (rememberMeCheckBox.isSelected())
            rememberMeCheckBox.click();
        }       
    }

3- 关注读者页面

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

public class FollowingReader {

    private WebDriver driver;
    public String expectedPageTitle = "Following > Reader - WordPress.com";


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

    @FindBy (how=How.XPATH,using="//*[@title='Create a New Post']")
    private WebElement createNewPostButton;

    public void createNewPost(){
        createNewPostButton.click();
    }

    public String actualPageTitle(){
        driver.getTitle();
        return actualPageTitle();
    }   
}

4- 发布页面

package pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;

public class PostPage {

    private WebDriver driver;

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

    @FindBy(how=How.XPATH,using="//*[@id='primary']/div/div[2]/div[1]/div[3]/div/button[1]")
    private WebElement publishButton;

    @FindBy(how=How.XPATH,using="//*[@id='primary']/div/div[2]/div[2]/div[1]/div[5]/div/textarea")
    private WebElement postTextField;


public void writeNewPost(String text){
    postTextField.sendKeys(text);
    publishButton.click();
    }

}

登录测试

package tests;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import pages.DefaultLandingPage;
import pages.LoginPage;

public class Login {

    WebDriver driver = new FirefoxDriver();

  @BeforeSuite
  public void LaunchMozilla() {
        System.setProperty("webdriver.gecko.driver", "C:\\Drivers\\geckodriver-v0.16.0-win64\\geckodriver.exe");
        driver.get("http:\\wordpress.com");
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
      }

  @Test(description = "Login with valid user", priority =1)
  public void loginValidUser() throws InterruptedException{
      DefaultLandingPage landing_page =PageFactory.initElements(driver, DefaultLandingPage.class);
      landing_page.clickLoginButton();    
      LoginPage login_page=PageFactory.initElements(driver, LoginPage.class);
      login_page.doNotRememberMe();
      login_page.login_wordpress("user", "pw");
  }

}

写新的后测

package tests;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import pages.FollowingReader;
import pages.PostPage;

public class WriteNewPost {

    WebDriver driver;

    @Test(description = "Check window title", priority = 1)
    public void checkWindowTitle() {
     FollowingReader followingReaderPage=PageFactory.initElements(driver, FollowingReader.class);
        Assert.assertEquals(followingReaderPage.expectedPageTitle, followingReaderPage.actualPageTitle());
  }

    @Test (description = "Click on create new post button", priority = 2)
    public void clickOnCreateNewPost(){
        FollowingReader followingReaderPage=PageFactory.initElements(driver, FollowingReader.class);
        followingReaderPage.createNewPost();
    }

    @Test (description = "Write a new post and post it", priority = 3)
    public void createNewPost(){
        PostPage post_page = PageFactory.initElements(driver, PostPage.class);
        post_page.writeNewPost("This is a test");

    }
}

TestNG XML

   <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite guice-stage="DEVELOPMENT" name="Default suite">
      <test verbose="2" name="Default test">
        <classes>
          <class name="tests.Login"/>
          <class name="tests.WriteNewPost"/>
        </classes>
      </test> <!-- Default test -->
    </suite> <!-- Default suite -->

【问题讨论】:

  • 花一些时间学习如何调试自己的代码,您会自己发现并学习作为自动化程序的宝贵技能。
  • 你没有说你的 NPE 位于哪里,但是来自 WriteNewPostdriver 永远不会被初始化。
  • 我尝试调试代码但没有走得很远。我认为问题在于创建@BeforeSuite 的驱动程序没有传递给其他类。我尝试了几种方法,但总是遇到同样的错误。所以我想问题是你是怎么做到的/我做的有什么问题?

标签: java eclipse selenium testng


【解决方案1】:

我终于设法通过创建一个单独的 java 类来找到解决方案,该类通过创建一个单例来处理浏览器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2015-11-11
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多