2017-08-30 59 views
0

大家好我已经在我创造了一个下面类当我试图执行开放网站的操作我得到空指针异常

utility package  

public class Utils   
{ 
    public static void openBrowser(WebDriver driver,String url)    
    {    
     System.out.println("Internet Explorer is selected");   

     System.setProperty("webdriver.ie.driver","D:\\Requirede for Automation\\IEDriverServer.exe");   
     driver = new InternetExplorerDriver();    
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);  
     driver.manage().window().maximize();   
     driver.get(url);  
    }  
}       

现在上面的类我创建了一个工具包试图访问我的主要自动化包,并能够这样做,但是当我试图在开放网站上执行操作时,我得到空指针异常,所以可以请一些人告诉我什么是正确的方式来调用一个类,并做对其进行操作。下面

Internet Explorer中收到

public class dropdown 
{   

    WebDriver driver;     

    @Test  
    public void openBrowser() {   

     String url = ("https://loadfocus.com/blog/2016/06/13/how-to-select-adropdown-in-selenium-webdriver-using-java");            

     WebDriver driver = null;         
     utility.Utils.openBrowser(driver, url);             
    }       

    @Test          

    public void open() 
    {             

     Select dropdown = new Select(driver.findElement(By.id("mySelect")));           
     dropdown.selectByIndex(2);               
    }             
}              

错误选择的入门InternetExplorerDriver服务器 (32位) 2.39.0.0侦听端口18171的log4j:警告没有附加目的地可以为记录器(组织中找到。 apache.http.client.protocol.RequestAddCookies)。 log4j:WARN请正确初始化log4j系统。 log4j:WARN有关更多信息,请参阅 http://logging.apache.org/log4j/1.2/faq.html#noconfig。 2017年8月30日下午1时54分35秒org.openqa.selenium.remote.ProtocolHandshake 了createSession信息:检测到的话:OSS通过:openBrowser失败: 开显示java.lang.NullPointerException在 automationFramework.dropdown.open(下拉。的java:45)在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)at

回答

-1

添加IEDriverS erver.exe在

C:\ Windows \ System32下

,并重新启动计算机。它会成功运行。

0

你看到一个NullPointerException因为当你调用openBrowser()方法您发送driver作为null因为你已经保持WebDriver driver = null

解决您的问题的方法是初始化WebDriver实例并将其转换为您的测试类中的InternetExplorerDriver,即dropdown类。

您所需要的变化是:

  • dropdown

    WebDriver driver = new InternetExplorerDriver(); //add the cast         
    utility.Utils.openBrowser(driver, url); 
    
  • Utils

    System.setProperty("webdriver.ie.driver","D:\\Requirede for Automation\\IEDriverServer.exe");   
    // remove "driver = new InternetExplorerDriver();"    
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 
    
+0

非常感谢您的答复,但这也不适合我,因为我能够打开网站,无论我写的任何代码。但之后,我无法在该网站上执行任何操作 –

+0

@HaRiShBisht在你提到的问题中'当我试图在开放网站上执行操作时,我得到空指针异常',所以如果我的回答解决了你的问题请点击答案旁边的勾号旁边的“上/下”按钮来“接受”答案。您可以随时根据新的要求提出新的问题。谢谢 – DebanjanB

0

它看起来像你到底想要根据你的代码来做剪切,你的openBrowser()方法是一种设置方法。目前,您有一个由openBrowser方法初始化的驱动程序的本地实例,open()方法因此不使用NPE。请尝试以下方法

@Before 
public void openBrowser() { 
    String url = ("https://loadfocus.com/blog/2016/06/13/how-to-select-adropdown-in-selenium-webdriver-using-java");            

    driver = utility.Utils.openBrowser(driver, url); 
} 

@Test 
public void open() { 
    Select dropdown = new Select(driver.findElement(By.id("mySelect")));           
    dropdown.selectByIndex(2); 
} 

这还需要您的Utils类中的openBrowser()返回浏览器的实例。我实际上会考虑在你的Utils类中使用一个静态方法来简单地初始化驱动程序并返回实例,但这些都是你想要设计类的方法。

还要记住@Before在每次测试之前执行,也许您可​​能要根据您的目标使用@BeforeMethod或@BeforeClass。它也取决于你是否使用TestNG或JUnit,但是两者的文档都值得关注。

相关问题