2016-08-30 1 views
0

AT line 106この例外があります。解決しますit.org.openqa.selenium.StaleElementReferenceException: 5.10秒StaleElementReferenceException:キャッシュに要素が見つかりません - ページが検索されてから変更されている可能性がありますコマンドの継続時間またはタイムアウト

CODE:

List<WebElement> select_year = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
    for(WebElement ele: select_year) 
    { 

     String fyear=ele.getText(); 
     if((syear).equals(fyear)) 
     { 
      System.out.println(syear); 
      System.out.println(fyear); 
      ele.click(); 
      List<WebElement>select_month=driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
      for(WebElement ele2:select_month) 
      { 
       String fmonth=ele2.getText(); 
       if((smonth).equals(fmonth)) 
       { 
        ele2.click(); 
        List<WebElement>select_day=driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
        for(WebElement ele3:select_day) 
        { 
         String fday=ele3.getText(); 
         Thread.sleep(3000); 
         if((sday).equals(fday)) 
         { 
          ele3.click(); 

         } 
        } 
       } 
      } 
     } 
    } 
+0

シェアHTMLだけでなく..よりよい解決策のためか、条件が真となった場合とき要素をクリックした後、ループ内で 'break'文を使用し...問題は、あなたが@SaurabhGaur –

+0

がループで解決?? – boopathi

+0

は、なぜあなたはこれをやっているしたいHTML –

答えて

1

ここでループする必要はありません - それは コマンド期間またはタイムアウトを見上げたので、おそらく、ページが変更されました。あなたはテキストで1つだけの要素を見つけると、以下のように選択する必要があります: -

//To select year 
driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + syear+"]")).click(); 

//To select month 
driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + smonth+"]")).click(); 

//To select day 
driver.findElement(By.xpath("//ul[@class='uib-datepicker-pop‌​up dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span[text() = " + sday+"]")).click(); 

編集: - あなたがここにループをしたい場合は、あなただけのif条件は以下のようにtrueになったときにループをbreakする必要があります -

//To select year 
List<WebElement> select_year = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
for(WebElement ele: select_year) 
{ 
    String fyear=ele.getText(); 
    if((syear).equals(fyear)) 
    { 
     ele.click(); 
     break; 
    } 
} 

//To select month 
List<WebElement> select_month = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
for(WebElement ele: select_year) 
{ 
    String fmonth = ele.getText(); 
    if((smonth).equals(fmonth)) 
    { 
     ele.click(); 
     break; 
    } 
} 

//To select day 
List<WebElement> select_day = driver.findElements(By.xpath("//ul[@class='uib-datepicker-popup dropdown-menu ng-scope']/li/div/table/tbody/tr/td/button/span")); 
for(WebElement ele: select_year) 
{ 
    String fday = ele.getText(); 
    if((sday).equals(fday)) 
    { 
     ele.click(); 
     break; 
    } 
} 
+0

そのすべての条件。私たちはここにlooopingする必要があります:( – boopathi

+0

OK、適切なbreakステートメントを使用し、separate.tryの各ループを行って、編集した答えを教えてください.. –

+0

ここで使用するブレークです。教えてください – boopathi

関連する問題