成功登录页面后第二页中的Selenium WebDriver中出现空指针异常
如何解决以下异常 这是代码成功登录页面后第二页中的Selenium WebDriver中出现空指针异常,selenium,exception,nullpointerexception,webdriver,Selenium,Exception,Nullpointerexception,Webdriver,如何解决以下异常 这是代码 package com;` import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Browserfactory { static WebDriver driver; public static WebDri
package com;`
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Browserfactory {
static WebDriver driver;
public static WebDriver startBrowser(String browserName)
{
if(browserName.equalsIgnoreCase("firefox"))
{
System.setProperty("webdriver.firefox.marionette","geckodriver.exe");
driver = new FirefoxDriver();
}
else if(browserName.equalsIgnoreCase("chrome"))
{
System.setProperty("webdriver.chrome.driver","chromedriver.exe");
driver = new ChromeDriver();
}
return driver;
}
}
从另一个类访问。
下面的代码是在不同的类中编写的,并将其作为基类访问
我想把Logout方法作为实用工具,当需要注销时,只需调用它就可以了
package com;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class Guru99 {
//creating a guru99 bank page login verify.
public WebDriver driver=null;
private static final String URL="http://demo.guru99.com/v4/";
@BeforeTest
//pre-requisition
public void launchpage()
{
WebDriver driver = Browserfactory.startBrowser("firefox");
driver.get(URL);
driver.findElement(By.name("uid")).sendKeys("mngr117051");
driver.findElement(By.name("password")).sendKeys("EhYtErY");
driver.findElement(By.name("btnLogin")).click();
}
@Test
public void logout()
{
driver.findElement(By.xpath("html/body/div[2]/div/ul/li[15]/a")).click();
}
}
//Running code through TestNG.
获取错误
FAILED: logout
java.lang.NullPointerException
at com.Guru99.logout(Guru99.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:100)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:646)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:811)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1137)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
at org.testng.TestRunner.privateRun(TestRunner.java:753)
at org.testng.TestRunner.run(TestRunner.java:607)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:368)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:363)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:321)
at org.testng.SuiteRunner.run(SuiteRunner.java:270)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1284)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1209)
at org.testng.TestNG.runSuites(TestNG.java:1124)
at org.testng.TestNG.run(TestNG.java:1096)
at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)
这是因为您在代码中犯了错误 我不明白为什么您在代码中的3个位置声明了驱动程序。每当您一次又一次地声明同一个变量时,它以前的值每次都会被覆盖,这就是您获得
NullPointerException
的原因
我已经修改了你的代码,并验证了工作
public class Browserfactory {
public static WebDriver startBrowser(WebDriver driver,String browserName) {
if (browserName.equalsIgnoreCase("firefox")) {
System.setProperty("webdriver.firefox.marionette","geckodriver.exe");
driver = new FirefoxDriver();
} else if (browserName.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
}
return driver;
}
}
public class Guru99 {
// creating a guru99 bank page login verify.
public WebDriver driver = null;
private static final String URL = "https://demo.guru99.com/v4";
@BeforeTest
// pre-requisition
public void launchpage() {
driver = Browserfactory.startBrowser(driver,"firefox");
driver.manage().window().maximize();
driver.get(URL);
driver.findElement(By.name("uid")).sendKeys("mngr117051");
driver.findElement(By.name("password")).sendKeys("EhYtErY");
driver.findElement(By.name("btnLogin")).click();
}
@Test
public void logout() {
driver.findElement(By.xpath("html/body/div[2]/div/ul/li[15]/a")).click();
}
}
希望这能对您有所帮助。这是因为您在代码中犯了错误 我不明白为什么您在代码中的3个位置声明了驱动程序。每当您一次又一次地声明同一个变量时,它以前的值每次都会被覆盖,这就是您获得
NullPointerException
的原因
我已经修改了你的代码,并验证了工作
public class Browserfactory {
public static WebDriver startBrowser(WebDriver driver,String browserName) {
if (browserName.equalsIgnoreCase("firefox")) {
System.setProperty("webdriver.firefox.marionette","geckodriver.exe");
driver = new FirefoxDriver();
} else if (browserName.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
driver = new ChromeDriver();
}
return driver;
}
}
public class Guru99 {
// creating a guru99 bank page login verify.
public WebDriver driver = null;
private static final String URL = "https://demo.guru99.com/v4";
@BeforeTest
// pre-requisition
public void launchpage() {
driver = Browserfactory.startBrowser(driver,"firefox");
driver.manage().window().maximize();
driver.get(URL);
driver.findElement(By.name("uid")).sendKeys("mngr117051");
driver.findElement(By.name("password")).sendKeys("EhYtErY");
driver.findElement(By.name("btnLogin")).click();
}
@Test
public void logout() {
driver.findElement(By.xpath("html/body/div[2]/div/ul/li[15]/a")).click();
}
}
希望这能对你有所帮助。可能重复的可能重复的可能重复的是,解决了我没有注意到事实上,我认为它会起作用,令人惊讶的是我浪费了2个小时来解决问题,但我无法解决。是的,解决了我没有注意到事实上,我认为它会起作用,令人惊讶的是我浪费了2个小时来解决问题,但我无法解决。