2011-08-12 5 views
0

WebDriver 및 selenium-firefox-driver 버전 2.3.1을 사용하고 있습니다. option.setSelected();이되지 않는 경우 이제, 하나는 직접 또는 더 정확히 option.click();을 수행해야합니다WebDriver의 옵션 선택

if (value.equals(option.getAttribute("value"))) { 
    if(!option.isSelected()) { 
     option.click(); 
     break; 
    } 
} 

문제는 내가 이유없이이 예외를 얻을 것이다.

요소가 현재 표시되지 않는 등 또한

<select id="deadLineDay" name="deadLineDay"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
</select> 

과 상호 작용 할 수 없습니다, 그것은 타이밍 문제 ...는 도대체 무엇인지 어떤 생각을 확실히하지? 예외는 가끔 발생하지만, 내가 말한대로,하지 타이밍 문제, 내가

이것은 코드 디버깅 해요 :

public FillOutForm(WebDriver driver, UploadDocumentPage parent) { 
    this.driver = driver; 
    this.parent = parent; 
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, 3), this); 
} 

@FindBy(how = How.NAME, using = day) 
private WebElement deadLineDay; 
@CacheLookup 
@FindBy(how = How.NAME, using = hour) 
private WebElement deadLineHour; 
@CacheLookup 
@FindBy(how = How.NAME, using = minute) 
private WebElement deadLineMinute; 
@CacheLookup 
@FindBy(how = How.NAME, using = AmPm) 
private WebElement deadLineAmPm; 
@CacheLookup 
@FindBy(how = How.ID, using = desc) 
private WebElement description; 
@CacheLookup 
@FindBy(how = How.ID, using = comm) 
private WebElement comment; 

public boolean validationPasses(Map<String, String> map) { 

    try { 
     for (String key : map.keySet()) { 
      WebElement we = (WebElement) this.getClass().getDeclaredField(key).get(this); 
      setSelectedField(we, map.get(key)); 
     } 
    } catch (Exception e) { 
     throw new Error(e.getMessage()); 
    } 

    valid = elementExists(driver, By.className(validatorError)); 

    return valid; 
} 

public void setSelectedField(WebElement element, String value) { 
    List<WebElement> options = element.findElements(By.tagName("option")); 
    for (WebElement option : options) { 
     if (value.equals(option.getAttribute("value"))) { 
      if(!option.isSelected()) { 
       option.click(); 
       break; 
      } 
     } 
    } 
} 
+0

아마도 당신은 내가 그것이 문제가되지했다 요소 (제대로로드) –

+0

기다릴 org.openqa.selenium.support.ui.WebDriverWait를 구현해야 .. 이미 시도했습니다 – lisak

+0

그것은 선택 필드에 도착하기 전에 해당 페이지에서 10 개의 다른 필드를 처리합니다. 필드가로드 될 때까지 3 초를 기다리고 있습니다 ... 전에 1 초였습니다 ... PageFactory.initElements (new AjaxElementLocatorFactory (driver, 3), this); – lisak

답변

-1

남자는 믿기 어려운 보일 수도 있지만, 한 달 전에 자주 디스크 공간이 부족해 갑자기 모든 테스트가 실패했습니다. 그것은 분명히 당신이 붙여 넣은 코드에서 볼 수있는만큼 실패 할 이유가 없습니다 ...

또한 AjaxElementLocatorFactory를 사용하고 있습니다. DefaultElementLocatorFactory로 전환하면 제거 될 수 있습니다.

0

이 문제도 발생했습니다. Select 물체로 WebElement 포장보십시오 :

import org.openqa.selenium.support.ui.Select; 
... 

public void setSelectedField(WebElement element, String value) { 
    Select dropdown = new Select(element); 
    dropdown.selectByVisibleText(value); 
} 
+0

Joe 정말 대처할 가장 역겨운 버그 중 하나입니다. 에드가가 대답 할 때 나는 시험을 다시한다. 그리고 돌아왔다! Select 개체로 래핑하면 도움이되지 않습니다. 실제로 그것을 감쌀 때, 전혀 찾지 않습니다. \ – lisak

+0

이 방법은 option.click()에서 끝납니다; 또한 실제로는 같고 편리합니다 ... – lisak

+0

페이지가 고정되어 있습니까? 아니면 Ajaxy를하고 있습니까? 경쟁 조건이 의심됩니다. 마크 업 및 함께 제공되는 ECMAScript를 게시하면 자세히 살펴볼 것입니다. –