如何解決使用 testng 測驗運行類的空指標例外。嘗試使用三個類來制作自動化框架。我嘗試呼叫“driver.get(baseURL);” 在基類的設定中。它有效,但卡在下一個方法輸入用戶名。任何幫助停留在一步?
//base class
package com.crmnext.testCases;
import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import io.github.bonigarcia.wdm.WebDriverManager;
public class BaseClass {
public String baseURL = "https://my.crm.com/crmnext/login/login";
public String username = "[email protected]";
public String password = "abc11";
public static WebDriver driver = null;
@BeforeClass
public void setUp ()
{
System.out.println("in setup");
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().window().maximize();
}
@AfterClass
public void tearDown()
{
// driver.close();
driver.quit();
}
}
//test case class
package com.crmnext.testCases;
import org.testng.annotations.Test;
import com.crmnext.pageObjects.LoginPage;
public class TC1_LoginTest_001 extends BaseClass
{
@Test
public void loginTest()
{
driver.get(baseURL);
LoginPage lp = new LoginPage(driver);
lp.setUserName(username);
lp.setPwd(password);
lp.clickLogin();
}
}
//Page class
package com.crmnext.pageObjects;
import java.time.Duration;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class LoginPage {
WebDriver ldriver;
public LoginPage(WebDriver rdriver)
{
System.out.println("In Login Page object class");
ldriver = rdriver;
PageFactory.initElements(ldriver, this);
}
@FindBy(css="#TxtName")
@CacheLookup
WebElement txtUsername;
@FindBy (css = "[name='SecureTextBox.Text']")
@CacheLookup
WebElement txtPassword;
@FindBy (css ="body.bg-light-gray:nth-child(2) div.body-content.min-vh-100.login-background.h-100:nth-child(1) div.flexbox-row.w-100 div.login-box.relative div.login-container.flexbox-row.items-center.min-vh-100.h-100:nth-child(2) div.flex-1.login-box--inner div:nth-child(1) div.login-form form:nth-child(1) > input.login-button.button.w-100:nth-child(4)")
@CacheLookup
WebElement btnLogin;
//Function to enter user name
public void setUserName (String uname)
{
System.out.println("in set user name " uname);
ldriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
txtUsername.sendKeys(uname);
System.out.println("After enter in user name");
}
//Function to Enter password
public void setPwd (String pwd)
{
System.out.println("in set password");
txtPassword.sendKeys(pwd);
}
// Function to click button
public void clickLogin ()
{
btnLogin.click();
}
}
獲取空指標例外。嘗試發布類似的查詢。但是,沒有任何幫助。
FAILED: loginTest
java.lang.NullPointerException: Cannot invoke "org.openqa.selenium.WebDriver.get(String)" because "com.crmnext.testCases.TC1_LoginTest_001.driver" is null
似乎驅動程式變空了。
uj5u.com熱心網友回復:
方法中有區域driver變數setUp被初始化但在方法完成后丟失setUp。因此,靜態欄位driver保持設定為null,這會在參考靜態欄位時導致 NPE。
修復setUp以洗掉區域變數的宣告:
public void setUp () {
System.out.println("in setup");
WebDriverManager.chromedriver().setup();
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
driver.manage().window().maximize();
}
uj5u.com熱心網友回復:
您在不同級別初始化了多個(兩個)WebDriver實體。
一個在類(
BaseClass) 級別為:public static WebDriver driver = null;另一個在方法(
setUp()) 級別為:WebDriver driver = new ChromeDriver();
一旦程式執行退出setUp()方法,將訪問BaseClass級別為NULL 的WebDriver 實體。因此你面對空指標例外
解決方案
在類級別宣告 WebDriver 實體,因為它是:
public static WebDriver driver;
在方法級別使用與以下相同的 WebDriver 實體:setUp()
driver = new ChromeDriver();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/351359.html
