1

我的班级使用 Selenium WebDriver 并引发错误。

public class Test_Chromedriver {
    public static WebDriver driver; 
    public static void main(String[] args) {
        try {
System.setProperty("webdriver.chrome.driver","E:\\jars\\chromedriver.exe");
            WebDriver driver=new ChromeDriver();
            driver.get("http://www.facebook.com");
            driver.findElement(By.id("email")).sendKeys("surya");
            driver.findElement(By.name("pass")).sendKeys("hello");
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            driver.close();
            driver.quit();
        }
    }
}

一旦我在下面运行上面的代码,就会出现错误消息:

Started ChromeDriver
port=12877
version=23.0.1240.0
log=D:\Eclipse Juno Workspace\AS Selenium workspace\WebDriver Applications\chromedriver.log
Exception in thread "main" java.lang.NullPointerException
    at Test_Chromedriver.main(Test_Chromedriver.java:25)

注意:webdriver 打开 chrome 浏览器,然后在字段中输入值,但上面的错误一直在控制台中显示,最后阻塞也没有执行。

4

2 回答 2

5

你的麻烦来自你的try/catch,特别是你的finally

因为你driver只是你的本地人try{}所以......你finally不能对你的司机做点什么。我将重命名您的驱动程序以帮助您了解此处发生的情况。

public class Test_Chromedriver {
    public static WebDriver driverNULL; // <- never instantiate
    public static void main(String[] args) {
        try {
            System.setProperty("webdriver.chrome.driver","E:\\jars\\chromedriver.exe");
            WebDriver driverOK=new ChromeDriver(); // < - local variable
            driverOK.get("http://www.facebook.com");
            driverOK.findElement(By.id("email")).sendKeys("surya");
            driverOK.findElement(By.name("pass")).sendKeys("hello");
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            driverNULL.close(); // <- want to close a object never instantiate so null pointer exception
            driverNULL.quit();
        }
    }
}

你现在可以做什么 ?

public class Test_Chromedriver {
    public static WebDriver driver; 
    public static void main(String[] args) {
        try {
            System.setProperty("webdriver.chrome.driver","E:\\jars\\chromedriver.exe");
            driver=new ChromeDriver(); // <- remove the Webdriver type
            driver.get("http://www.facebook.com");
            driver.findElement(By.id("email")).sendKeys("surya");
            driver.findElement(By.name("pass")).sendKeys("hello");
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            driver.close();
            driver.quit();
        }
    }
}
于 2013-06-21T14:02:05.300 回答
1

也许尝试使用 TestNG 和注释?

http://testng.org/doc/index.html

他们正在使他们的工作非常好。

使用这种类型的结构可以让您更好地维护测试和执行。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Test_Chromedriver {
    public static WebDriver driver; 


    @BeforeClass
    public void setUp(){
         System.setProperty("webdriver.chrome.driver","E:\\jars\\chromedriver.exe"");
         driver=new ChromeDriver();

}
   @Test 
    public static void TestFacebook() {
        try {
            driver.get("http://www.facebook.com");
            driver.findElement(By.id("email")).sendKeys("surya");
            driver.findElement(By.name("pass")).sendKeys("hello");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



 @AfterClass
 public void tearDown(){
     driver.close();
     driver.quit();
 }

}
于 2013-06-21T14:22:30.817 回答