Java 页面工厂testNG空指针异常
在2个不同的testNg类上获得了4个页面和2个测试。 当我运行testngxml时,它们抛出一个空指针异常,我真的不知道为什么。 你能告诉我你将如何修改下面的代码使其工作,并解释为什么 1-默认登录页: 2-登录页面 3-以下读者页 4-贴子页 登录测试 编写新的后测试 testngxmlJava 页面工厂testNG空指针异常,java,eclipse,selenium,testng,Java,Eclipse,Selenium,Testng,在2个不同的testNg类上获得了4个页面和2个测试。 当我运行testngxml时,它们抛出一个空指针异常,我真的不知道为什么。 你能告诉我你将如何修改下面的代码使其工作,并解释为什么 1-默认登录页: 2-登录页面 3-以下读者页 4-贴子页 登录测试 编写新的后测试 testngxml 我最终找到了一个解决方案,创建了一个单独的java类,通过创建一个单例来处理浏览器花一些时间学习如何调试自己的代码,您将自己找到它,并学习作为一个自动机的宝贵技能。可能的重复不是说您的NPE在哪里,而是说
我最终找到了一个解决方案,创建了一个单独的java类,通过创建一个单例来处理浏览器花一些时间学习如何调试自己的代码,您将自己找到它,并学习作为一个自动机的宝贵技能。可能的重复不是说您的NPE在哪里,而是说驱动程序
fromWriteNewPost
从未初始化。我试图调试代码,但没有完成太多。我认为问题在于@BeforeSuite创建的驱动程序没有传递给其他类。我试了好几种方法,但总是犯同样的错误。所以我想问题是你是怎么做到的/我做的有什么不对?
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();
}
}
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();
}
}
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();
}
}
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");
}
}
<?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 -->