0

私は4つの選択肢でフォームをテストしています。最初のものを選択すると、値に応じてajax呼び出しが行われ、次の選択に移ります。しかし、ほとんどの場合私はStaleElementReferenceExceptionを取得しています。 FluentWaitと私のカスタム予想される条件を実装する - 私は選択がwebelementを取得するコードを同じFluentWaitここセレンStaleElementReferenceException ajaxオプションselect

FluentWait<WebDriver> wait = new FluentWait<WebDriver>(webdriver).withTimeout(10, TimeUnit.SECONDS) 
       .pollingEvery(2, TimeUnit.MILLISECONDS) 
       .ignoring(StaleElementReferenceException.class) 
       .ignoring(NoSuchElementException.class); 

をされて使用して

- 私が移入されることをテストし、3番目の要素を選択します。

 WebElement brand= wait.until(ExpectedConditions.elementToBeClickable(By.id("brand"))); 
     Select selectBrand= new Select(brand); 
     wait.until(new SelectCondition(selectBrand));   
     marcaSelect.selectByIndex(2); 


     WebElement model= wait.until(ExpectedConditions.elementToBeClickable(By.id("model"))); 
     Select modelSelect = new Select(model); 
     wait.until(new SelectCondition(modelSelect)); 
     modeloSelect.selectByIndex(2); 

マイカスタム期待条件セレンwebdriverを3.3.1、JSF 2.2はJava 1.7、クロムと

class SelectCondition implements ExpectedCondition{ 

     Select select ; 

     public SelectCondition(Select select){ 
      this.select = select; 
     } 

     public Boolean apply(Object arg0) { 
      return this.select.getOptions().size() > 1 ; 
     } 

    } 

イム・テスト、特定のラインはあなたにStaleEelementExceptionを与える

+0

日食? – kushal

+0

this.select.getOptions()。size()> 1;を返します。 – jckhan

答えて

0
// Below method will wait till value you are expecting is displayed in dropdown 
public void waitForDropDownToLoad(final By by, final String sVal, 
     String iSecs) { 
    try { 

     Wait<WebDriver> wait = new FluentWait<WebDriver>(getDriver()) 
       .withTimeout(Integer.parseInt(iSecs), TimeUnit.SECONDS) 
       .pollingEvery(
         Integer.parseInt(configProperties 
           .getProperty("sPollingTime")), 
         TimeUnit.SECONDS) 
       .ignoring(NoSuchElementException.class) 
       .ignoring(StaleElementReferenceException.class); 
     wait.until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver driver) { 
       Select select = new Select(getDriver().findElement(by)); 
       List<WebElement> options = select.getOptions(); 
       for (WebElement option : options) { 
        if (option.getText().equals(sVal)) { 
         return true; 
        } 
       } 
       return null; 

      } 
     }); 
    } catch (Exception e) { 
     log.info("Exception in waitForDropDownToLoad()" + e); 
    } 
} 

//Now try below code 
WebElement brand= 
wait.until(ExpectedConditions.elementToBeClickable(By.id("brand"))); 

//Wait for option to be loaded in dropdown 
waitForDropDownToLoad(By.id("brand"), "OptionText", "10") 

// Select option in dropdown 
Select selectBrand= new Select(brand); 
selectBrand.selectByVisibleText("OptionText"); 

// Get webelement 
WebElement model= 
wait.until(ExpectedConditions.elementToBeClickable(By.id("model"))); 

//Wait for option to be loaded in dropdown 
waitForDropDownToLoad(By.id("model"), "ModelOption", "10") 

//Select option 
Select modelSelect = new Select(model); 
modeloSelect.selectByVisibleText("ModelOption"); 
+0

私はこのアプローチを使いましたが、まだStaleReferenceExceptionを持っています。Select element = new Select(element); – jckhan

関連する問題