2016-09-19 8 views
1

私はJavaのans Seleniumに手を加えています。同じ「Input_Search_Box」Web要素を使用してクリックメソッドを実行すると、nullpointer例外がスローされます。私はグーグルで、スレッドを追加する、明示的な待機を追加するなどのいくつかの回避策を試してみましたが、まだ私はどこに欠けているか分かりません。どんな提案も大歓迎です。ページが続い/リロードを変更したあなたは再び見つける使用する必要がある場合は私は以前のコードで実行したのと同じWebElementに対してclick()を実行するとnullpointer例外が発生します

public class Testclass { 
    WebElement Input_Search_Box; 
    WebDriver driver; 
    @Test 
    public void openBrowser() throws Exception{ 
     System.setProperty("webdriver.chrome.driver","E:\\Ecilpse\\chromedriver_win32\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
     driver.get("https://en.wikipedia.org/wiki/Main_Page"); 
     driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); 
     driver.manage().window().maximize(); 

     JavascriptExecutor jse = (JavascriptExecutor)driver; 
     jse.executeScript("window.scrollBy(0,500)");  

     WebElement Click_Create_Book = driver.findElement(By.xpath(".//*[@id='coll-create_a_book']/a")); 
     Click_Create_Book.click(); 

     WebElement Start_Book_Creator_Btn = driver.findElement(By.xpath(".//*[@id='mw-content-text']/form/div/div[1]/button")); 
    Start_Book_Creator_Btn.click(); 

    Input_Search_Box = driver.findElement(By.xpath(".//*[@id='searchInput']")); 
     Input_Search_Box.click(); 
     Input_Search_Box.sendKeys("Selenium",Keys.ENTER); 

    for(int i =0;i<=8;i++){ 
      try{ 

       if(driver.findElement(By.xpath(".//*[@id='siteNotice']/div[2]/div[2]/div")).isDisplayed()) 
        break; 
      } 
    catch(Exception e){ 
       jse.executeScript("window.scrollBy(0,2500)"); 

    } 
    } 

    for(int j=0;j<=5;j++){ 

    if(driver.findElement(By.id("coll-add_article")).isDisplayed()) { 
    System.out.println("If Executed"); 
    break; 

    }else 
    { 

    WebElement Book_Remove = driver.findElement(By.xpath(".//*[@id='coll-remove_article']")); 
       Book_Remove.click(); 

    } 
    } 

    WebElement Add_This_Book = driver.findElement(By.xpath(".//*[@id='coll-add_article']")); 
    Add_This_Book.click(); 
    Thread.sleep(3000); 

    for(int k =0;k<=6;k++){ 
    jse.executeScript("window.scrollBy(0,-2500)"); 
    Thread.sleep(3000); 
    } 


    Thread.sleep(4000); 
    System.out.println("Sctipr on hold for 4k seconds"); 

    //Here is the Nullpointer error occuring 
    Input_Search_Box.click(); 
    Input_SearchBox.sendKeys("JSCRIPT",Keys.ENTER);  

    } 

    } 
+1

ページが変更/再読み込みされている場合は、もう一度findを使用する必要があります。 – lauda

+0

@lauda:迅速な対応をありがとうございました。ページがリロードされていません。私は一番上にスクロールして、検索テキストボックスをクリックするだけです。私はそれについてもう一度find要素を追加しようとしましたが、チェックしましたが運がありません。 –

+0

@lauda:コードをもう一度追加して機能しました。ありがとう、ありがとうございます。 WebElement fFind_Search = driver.findElement(By.xpath( ".//*[ id = 'searchInput']")); \t \t fFind_Search.click(); \t \t fFind_Search.sendKeys( "JUnit"); –

答えて

0

は、ここに私のコードです。

ページの状態を変更する可能性があるページを変更できる呼び出しをトリガすることがあり、現在の検出されたオブジェクトが失われることがあります。これにより、古い要素の例外またはnull例外が発生する可能性があります。

+0

ありがとう、トンlauda。 –

+0

あなたは大歓迎です。 – lauda

関連する問題