问题描述
运行以下代码时得到空指针异常但交叉检查定位器没问题,
尝试了几次但得到相同的响应,
用于登录的 pom 类已创建 创建主页的 pom 类 创建宠物的测试类
############################################ ##################
签到类
package com.Medeventage.crm.pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.Select;
public class Crm_create_Patient_page {
/**
*
* All WebElements are identified by @FindBy annotation
*
*/
/// html/body/div[1]/div/div/div[1]/ul/li[1]/a/div[2]
WebDriver driver;
// @FindBy(xpath = "//*[@id=\"actionMenuSidebar\"]/ul/li[1]/a/div[2]")
// WebElement createpetientbutton;
@FindBy(xpath = "//*[@id='first_name']")
WebElement firstname;
@FindBy(xpath = "//*[@id='middle_name_c']")
WebElement middlename;
@FindBy(xpath = "//*[@id='last_name']")
WebElement lastname;
@FindBy(name = "birth_date")
WebElement dateBox;
@FindBy(name = "gender")
WebElement genderdropdown;
@FindBy(name = "race")
WebElement racedropdown;
@FindBy(name = "ethnicity")
WebElement ethnicitydropdown;
@FindBy(name = "phone_home")
WebElement homephone;
@FindBy(name = "phone_mobile")
WebElement mobile;
@FindBy(name = "eaddress")
WebElement email;
@FindBy(name = "primary_care_physician")
WebElement pcpdropdown;
@FindBy(name = "address1")
WebElement address1;
@FindBy(name = "address2")
WebElement address2;
@FindBy(name = "city")
WebElement city;
@FindBy(name = "state1")
WebElement statedropdown;
@FindBy(name = "postal_code")
WebElement postalcode;
@FindBy(name = "cp_email_c")
WebElement emailcheckBox;
@FindBy(name = "sms_c")
WebElement smscheckBox;
@FindBy(css = "#EditView > div.buttons > input[type=button]:nth-child(1)")
WebElement save;
public Crm_create_Patient_page(WebDriver driver) {
this.driver = driver;
// This initElements method will create all WebElements
PageFactory.initElements(driver,this);
}
// //select create patient button
// public void clickcreatepatient() {
// Actions A = new Actions(driver);
// A.click(createpetientbutton).build().perform();
// }
// Set first name in textBox
public void setfName(String fName) {
firstname.sendKeys(fName);
}
// Set middle name in textBox
public void setmiddleName(String mName) {
middlename.sendKeys(mName);
}
// Set last name in textBox
public void setlastName(String lName) {
lastname.sendKeys(lName);
}
public void setdate(String date) {
dateBox.sendKeys(date);
}
// select gender drop down
public void genderDropDown() {
Select drop = new Select(genderdropdown);
drop.selectByVisibleText("Male");
}
// select race drop down
public void raceDropDown() {
Select drop = new Select(racedropdown);
drop.selectByVisibleText("Declined to specify");
}
// select ethinicity drop down
public void ethinictyDropDown() {
Select drop = new Select(ethnicitydropdown);
drop.selectByVisibleText("Other");
}
public void sethomep(String hphone) {
homephone.sendKeys(hphone);
}
public void setmphone(String mphone) {
mobile.sendKeys(mphone);
}
public void setemailadd(String mail) {
email.sendKeys(mail);
}
// select pcp drop down
public void pcpDropDown() {
Select drop = new Select(pcpdropdown);
drop.selectByVisibleText("Derick Trisha");
}
// Set address1 in textBox
public void setaddress1(String add1) {
address1.sendKeys(add1);
}
// Set address2 in textBox
public void setaddress2(String add2) {
address2.sendKeys(add2);
}
// Set city in textBox
public void setcity(String cit) {
city.sendKeys(cit);
}
// select state drop down
public void stateDropDown() {
Select drop = new Select(statedropdown);
drop.selectByVisibleText("New York");
}
// Set postalcode in textBox
public void setpincode(String pincode) {
postalcode.sendKeys(pincode);
}
// Select checkBox
public void clickmailBox() {
boolean select = emailcheckBox.isSelected();
System.out.print(select);
// performing click operation if element is not already selected
if (select == false) {
emailcheckBox.click();
}
}
// Select checkBox
public void clicksmsBox() {
boolean select = smscheckBox.isSelected();
System.out.print(select);
// performing click operation if element is not already selected
if (select == false) {
smscheckBox.click();
}
}
// click login button
public void clicksave() {
save.click();
}
}
创建患者分类
package com.Medeventage.crm.test;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.Medeventage.crm.pages.Crmlogin;
import com.Medeventage.crm.pages.Crm_create_Patient_page;
import com.Medeventage.crm.pages.Crmhomepage;
public class Crm_Create_Patient {
public class Crm_login_valid_credential {
String driverPath = "D:\\CHROME\\chromedriver.exe";
WebDriver driver;
Crmlogin objLogin;
Crmhomepage objHomePage;
Crm_create_Patient_page objcreatepage;
@BeforeTest
public void setup() {
System.setProperty("webdriver.chrome.driver",driverPath);
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.get("https://uatcrm.medevantage.com/index.PHP?module=Users&action=Login");
// creating object of loginpage
objLogin = new Crmlogin(driver);
// Verify login page title
System.out.println("Log In Page Contains MDCRM As A Part Of title");
String loginPageTitle = driver.getTitle();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
Assert.assertTrue(loginPageTitle.toLowerCase().contains("mdcrm"));
System.out.println(loginPageTitle);
// login to application
objLogin.loginTocrm("admin","admin");
// go the next page
objHomePage = new Crmhomepage(driver);
// Verify home page
String actualUrl = "https://uatcrm.medevantage.com/index.PHP?module=patie_patients&action=index";
String expectedUrl = driver.getcurrenturl();
Assert.assertEquals(expectedUrl,actualUrl);
System.out.println("Home Page Opened");
}
/**
*
* This test go to
* https://uatcrm.medevantage.com/index.PHP?module=Users&action=Login
*
*
*
* Login to application
*
* Verify the home page using Dashboard message
*
* @throws InterruptedException
*
*/
@Test(priority = 0)
public void test_Home_Page_Appear_Correct() throws InterruptedException {
// Adding Page Load Time out
driver.manage().timeouts().pageLoadTimeout(20,TimeUnit.SECONDS);
// clicking on create Patient page
System.out.println("Clicking On Create Patient Tab");
WebElement Createpetient = driver
.findElement(By.xpath("/html/body/div[1]/div/div/div[1]/ul/li[1]/a/div[2]"));
Actions act = new Actions(driver);
act.click(Createpetient).build().perform();
driver.manage().timeouts().pageLoadTimeout(20,TimeUnit.SECONDS);
objcreatepage.setfName("Automate");
objcreatepage.setmiddleName("demo");
objcreatepage.setlastName("TestPatient");
objcreatepage.setdate("05092021");
objcreatepage.genderDropDown();
objcreatepage.raceDropDown();
objcreatepage.ethinictyDropDown();
objcreatepage.sethomep("8989789678");
objcreatepage.setmphone("8669164533");
objcreatepage.setemailadd("autodemop@malinator.com");
objcreatepage.setaddress1("Q11");
objcreatepage.setaddress2("Church Road");
objcreatepage.setcity("New York");
// objcreatepage.createp("auto","demo","testpetient");
// driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
// objcreatepage.creatp1("05092021","8888888888","8669164533",// "autodemo@malinator.com");
// objcreatepage.creatp2("midletown","Q101","Church Road","89767");
String createpagetitle = driver.getTitle();
System.out.println(createpagetitle);
}
}
}
登录类
package com.Medeventage.crm.pages;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Crmlogin {
/**
*
* All WebElements are identified by @FindBy annotation
*
*/
WebDriver driver;
@FindBy(name = "user_name")
WebElement userName;
@FindBy(name = "username_password")
WebElement password;
@FindBy(name = "Login")
WebElement login;
public Crmlogin(WebDriver driver) {
this.driver = driver;
// This initElements method will create all WebElements
PageFactory.initElements(driver,this);
}
// Set user name in textBox
public void setUserName(String strUserName) {
userName.sendKeys(strUserName);
}
// Set password in password textBox
public void setPassword(String strPassword) {
password.sendKeys(strPassword);
}
// Click on login button
public void clickLogin() {
login.click();
}
/**
*
* This POM method will be exposed in test case to login in the application
*
* @param strUserName
*
* @param strPasword
*
* @return
*
*/
public void loginTocrm(String strUserName,String strPasword) {
// Fill user name
this.setUserName(strUserName);
// Fill password
this.setPassword(strPasword);
// Click Login button
this.clickLogin();
}
}
错误:
############################################ ###############
[RemoteTestNG] detected TestNG version 7.3.0
Starting ChromeDriver 89.0.4389.23 (61b08ee2c50024bab004e48d2b1b083cdbdac579-refs/branch-heads/4389@{#294}) on port 33685
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[1619767644.909][WARNING]: This version of ChromeDriver has not been tested with Chrome version 90.
Apr 30,2021 12:57:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Log In Page Contains MDCRM As A Part Of title
MDCRM
Home Page Opened
Clicking On Create Patient Tab
Failed: test_Home_Page_Appear_Correct
java.lang.NullPointerException
at com.Medeventage.crm.test.Crm_Create_Patient$Crm_login_valid_credential.test_Home_Page_Appear_Correct(Crm_Create_Patient.java:92)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:132)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:599)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:174)
at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:822)
at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:147)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540)
at org.testng.TestRunner.privateRun(TestRunner.java:764)
at org.testng.TestRunner.run(TestRunner.java:585)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:384)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:378)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:337)
at org.testng.SuiteRunner.run(SuiteRunner.java:286)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1218)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.runSuites(TestNG.java:1069)
at org.testng.TestNG.run(TestNG.java:1037)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
===============================================
Default test
Tests run: 1,Failures: 1,Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1,Passes: 0,Skips: 0
===============================================
[TestNG] Reporter [FailedReporter passed=0 Failed=0 skipped=0] Failed
java.lang.NullPointerException
at java.base/java.util.HashMap.putMapEntries(HashMap.java:496)
at java.base/java.util.HashMap.putAll(HashMap.java:780)
at org.testng.xml.XmlClass.setParameters(XmlClass.java:233)
at org.testng.reporters.FailedReporter.createXmlClasses(FailedReporter.java:199)
at org.testng.reporters.FailedReporter.createXmlTest(FailedReporter.java:150)
at org.testng.reporters.FailedReporter.generateXmlTest(FailedReporter.java:124)
at org.testng.reporters.FailedReporter.generateFailureSuite(FailedReporter.java:64)
at org.testng.reporters.FailedReporter.generateReport(FailedReporter.java:49)
at org.testng.TestNG.generateReports(TestNG.java:1099)
at org.testng.TestNG.run(TestNG.java:1042)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
解决方法
我认为您在此行 objcreatepage.setfName("Automate");
上为对象 objcreatepage
获得了 NPE。我在您的代码中没有看到该对象的任何初始化。您刚刚声明了它,但尚未对其进行初始化。
你能确认这是你班级的第 92 行吗?我看不到行号所以不知道。
,你是如何安装TestNG的。对我来说,testNG 下载链接显示 404 错误