2016-08-06 4 views
1

EventListenerを初めて使用していますが、例外を以下に示します。誰かが同じことを助けてください。EventListenerを使用している間に面倒なエラーが発生しました

スレッドでの例外seleniumTest.EventListener.beforeFindByで "メイン" のjava.lang.NullPointerException (EventListener.java:62)

package seleniumTest; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.events.EventFiringWebDriver; 


public class MainClass { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     WebElement element ; 
     WebDriver driver = new FirefoxDriver(); 
     EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver); 
     EventListener listener = new EventListener(); 

     eventDriver.register(listener); 
     eventDriver.manage().window().maximize(); 
     eventDriver.get("https://www.google.co.in"); 
//  element = eventDriver.findElement(By.id("sb_ifc0")); 
//  element.sendKeys("Shantaveer"); 
     element = eventDriver.findElement(By.xpath("//input[@type= 'submit']")); 
     element.click(); 

    } 

} 

    package seleniumTest; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.support.events.WebDriverEventListener; 

public class EventListener implements WebDriverEventListener{ 

    public void afterChangeValueOf(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 

     System.out.println("inside method afterChangeValueOf on " + arg0.toString()); 
    } 

    public void afterClickOn(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("inside method afterClickOn on " + arg0.toString()); 
    } 

    public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
     // TODO Auto-generated method stub 
     System.out.println("Find happened on " + arg1.toString() 
       + " Using method " + arg0.toString()); 
    } 

    public void afterNavigateBack(WebDriver arg0) { 
     // TODO Auto-generated method stub 

     System.out.println("Inside the after navigateback to " + arg0.getCurrentUrl()); 
    } 

    public void afterNavigateForward(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("Inside the afterNavigateForward to " + arg0.getCurrentUrl()); 
    } 

    public void afterNavigateTo(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("Inside the afterNavigateTo to " + arg0); 
    } 

    public void afterScript(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("Inside the afterScript to, Script is " + arg0); 
    } 

    public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 

     System.out.println("Inside the beforeChangeValueOf method"); 
    } 

    public void beforeClickOn(WebElement arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("About to click on the " + arg0.toString()); 

    } 

    public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { 
     // TODO Auto-generated method stub 
     System.out.println("Just before finding element " + arg1.toString()); 

    } 

    public void beforeNavigateBack(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("Just before beforeNavigateBack " + arg0.getCurrentUrl()); 

    } 

    public void beforeNavigateForward(WebDriver arg0) { 
     // TODO Auto-generated method stub 
     System.out.println("Just before beforeNavigateForward " + arg0.getCurrentUrl()); 

    } 

    public void beforeNavigateTo(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("Just before beforeNavigateTo " + arg0); 
    } 

    public void beforeScript(String arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("Just before beforeScript " + arg0); 
    } 

    public void onException(Throwable arg0, WebDriver arg1) { 
     // TODO Auto-generated method stub 
     System.out.println("Exception occured at " + arg0.getMessage()); 

    } 


    @Override 
    public void afterNavigateRefresh(WebDriver arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeNavigateRefresh(WebDriver arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

答えて

1

同様のissue 1589を確認してください:

WebDriverEventListenerインターフェイスにbeforeFindByおよびafterFindByメソッドを実装する場合、NullPointerExceptionを取得します。
はリスナーに渡されません。オブジェクトによって正しく渡されます。 WebDriver.findElement(...)、またはWebDriver.findElements(...)、またはWebElement.findElement(...)、またはWebElement.findElements(...)前に呼び出され

void beforeFindBy(By by, 
        WebElement element, 
        WebDriver driver) 

documentationは言及しません。

パラメータ:

element - WebDriverのfindメソッドが呼び出された場合は、nullになります。

author lukeisin the issueコメント:

WebElementパラメータの目的はfindByへの参照ではなく、見つかった要素(複数可)として使用される要素を示すことです。我々はそのようなWebElementfindElement方法を使用するなど、WebDriver別にfindElementを使用する場合

WebElementがnullでありません。

Web要素arg1を保護する必要があります。文書化されているように、nullにすることができます。

+0

詳細を教えてください。私は理由とその解決方法を理解できませんでした。 – user3415045

+0

@ user3415045私は 'eventDriver.findElement()'が 'WebElement'(あなたのarg1)が' null'である 'beforeFind()'を呼び出すと思われます。したがって、null要素に対して 'toString()'を呼び出さないでください。 – VonC

+0

ありがとう、私はあなたにテキストを書いた直後に同じことを試みました。今はその仕事。 – user3415045

関連する問題