Java 调用第二个方法时出现空指针异常
主程序Java 调用第二个方法时出现空指针异常,java,selenium,nullpointerexception,Java,Selenium,Nullpointerexception,主程序 public class signin{ public static void main(String[] args) throws Exception { util.OpenBrowser(); b.closebrowser(); } 第一个方法在类util中:openbrowser是一个方法 public class util{ public static WebDriver OpenBrowser(){ System.setPrope
public class signin{
public static void main(String[] args) throws Exception {
util.OpenBrowser();
b.closebrowser();
}
第一个方法在类util中:openbrowser是一个方法
public class util{
public static WebDriver OpenBrowser(){
System.setProperty("webdriver.chrome.driver",
"D:\\Selenium\\selenium3.1\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://www.google.com/");
return driver;
}
第二种方法(closebrowser)在另一个b类中
public class b {
static WebDriver driver;
public static void Execute(WebDriver driver){
homepage.phonenumber(driver).sendKeys(constant.Phonenumber);
homepage.proceedbutton(driver).click();
}
public static void closebrowser(){
driver.close();
}
}
我试图调用另一个类中不同类的2个方法,然后
我得到空指针异常,并将该行指向closebroweser方法。为什么调用第二个方法时发生空指针异常
closebrowser方法只有在我没有从其他类调用openbrowser方法时才起作用。如果我在主程序本身中编写openbrowser代码,它就会工作。您似乎错过了类b中的驱动程序实例化。您应该向类b添加方法以设置实例化驱动程序。并在main方法中调用它
public class b {
static WebDriver driver;
public static void setDriver( WebDriver driver){
b.driver = driver;
}
public static void Execute(WebDriver driver){
homepage.phonenumber(driver).sendKeys(constant.Phonenumber);
homepage.proceedbutton(driver).click();
}
public static void closebrowser(){
driver.close();
}
}
调用方法setDriver:
public static void main(String[] args) throws Exception {
WebDriver driver = util.OpenBrowser();
b.setDriver(driver);
b.closebrowser();
}
您从未实例化过
静态WebDriver类b
中的code>,因此它的值为null
。对null
对象(driver.close()
)调用方法会导致NullPointerException
。关于代码的一些注释:-在Java中,类名应始终以大写字母(signin
->siginin
)开头,而方法应以小写字母(OpenBrowser
->OpenBrowser
)开头。--方法名应始终以camelCase(closebrowser()开头)
->closeBrowser()
)---将每2行设为空行并不会提高代码的可读性。除了@Turing85关于命名约定的建议之外,还有一个补充:常量。Phonenumber
应该是常量。PHONE\u NUMBER
(contants name应该是大写的,用下划线分隔)。更多信息可以在这里找到:Adendum到我的最后一条评论:classsignin
应该重命名为signin
。。。为什么我们只能编辑五分钟的评论-你能再解释一下吗?:)我没有在任何地方使用execute方法,我使用的是closebrowser方法。但我还是遇到了同样的问题。我在closebrowser()处遇到错误。null指针指向closebrowser方法。虽然这修复了NullPointerException,但它引入了一个语义问题:从外观上看,OP通过调用util.OpenBrowser()
创建了一个web驱动程序,并希望通过调用b.closebrowser()
@saman关闭这个web驱动程序。我重新编写了我的评论。我的“旧”评论很快就会自我毁灭。@prashanthiskvl请看我对你的问题的评论。我在这里解释了抛出异常的原因。