2016-06-09 2 views
0

나는 Selenium을 사용하여 firefox 브라우저에서 실행중인 응용 프로그램을 테스트하고 있습니다. 때로는 Selenium이있는 버튼을 클릭하고 싶을 때가 있습니다. 내 눈으로 그 요소를 볼 수 있기 때문에 나는이 이상한 것을 발견한다. (ExpectedConditions.visibilityOfElementLocated()에 의해) Selenium이 그래픽으로 표시되는 요소를 찾을 수없는 이유

  • wait.until (ExpectedConditions.presenceOfElementLocated()에 의해)

    1. wait.until : 이미 같은 다른 exemple 근무 여러 방법을 시도했다 (내가 경로 변수에 XPath를 사용하고, 나는 그가 올바른지 확인 해요), 내가 게시
    2. 그런 다음 다시

    (1000)

  • 에 Thread.sleep 퍼팅 드라이버
  • 에 implictlyWait 설정 왜냐하면 셀레늄이 브라우저에서 디플레이션 된 요소를 볼 수없는 이유를 알지 못하기 때문입니다. 중요한 정보는 아마 당신에게 나에게 적절한 대답을주는 것을 도울 수 있습니다. html DOM은 javascript 이벤트에 의해 트리거되는 websocket에 의해 동적으로 생성됩니다.

    편집 1 :

    <button type="button" class="btn btn-xs btn-block btn-stroke" id="252_button"> 
        Delete 
    </button> 
    

    요소는 내가 액세스를 시도하고있다. 나는 그것을하기 위해 xpath를 사용한다.

    iframe 요소에 없습니다.

    내가 찾아 매개 변수에 XPath를주고 그것을 클릭하도록되어이 방법 한 요소에 액세스하려면 : 여기

    특정 XPATH :

    public void findAndClick(String xpath) { 
         By by = By.xpath(xpath); 
         //wait.until(ExpectedConditions.presenceOfElementLocated(by)); 
         wait.until(ExpectedConditions.visibilityOfElementLocated(by)); 
    
         driver.findElement(by).click(); 
        } 
    

    편집 2 // 사업부의 [을 2]/div/div/div/button Selenium 플러그인을 사용하여 찾았습니다.

    편집 3 :

    내가지고있어 예외는

    StaleReferenceElementException입니다 : 요소가 캐시에서 찾을 수 없습니다 -이 고개를 이후 아마도 페이지에 변화가 있습니다. 내가 그것을보고 수동으로 클릭 수를 변경할 수 없기

    The element has been deleted entirely. 
    The element is no longer attached to the DOM. 
    

    하지만, 수 없습니다 :

    나는이 예외 구성품을 설명 page에 갔다

    , 그것은 말한다.

  • +0

    대상 요소에 'HTML'코드를 제공하십시오. 또한 요소가 iframe/frame 안에 있는지 여부를 알려줍니다. + 이미 시도한 코드를 보여주세요. – Andersson

    +0

    정확하게 사용하는 'XPath'를 지정하십시오. – Andersson

    +1

    'wait.until (ExpectedConditions.visibilityOfElementLocated (by));'이 true 일 때'WebElement'를 반환합니다. 그래서 찾을 필요가 없습니다. 같은 요소 다시 .. 마지막 줄을 제거하십시오.'driver.findElement (by) .click();'와 단지 ..'wait.until (ExpectedConditions.visibilityOfElementLocated (by)). 클릭();' –

    답변

    0

    내 문제에 대한 설명을 발견했다고 생각합니다. the StaleReferenceException에 관한 문서를 읽었습니다. 더 정확하게이 부분에서 :

    요소는

    웹 응용 프로그램에 탭 UI를 시뮬레이션에 사용되는 일반적인 방법은 각 탭 된 div 준비하는 것입니다 DOM에 부착, 만에 하나의 첨부되지 않은 나머지는 변수에 저장합니다. 이 경우 코드가 더 이상 DOM에 연결되지 않은 요소 (즉, "document.documentElement"인 조상을 가짐)에 대한 참조를 가질 수 있습니다. WebDriver가이 경우 부실 요소 예외를 throw하면 요소가 여전히 존재하더라도 참조가 손실됩니다. DOM에 첨부 된 요소를 다시 찾아서 현재 잡고있는 참조를 버리고 대체해야합니다.

    정확히 같은 경우이 요소가 여전히 있어도이 예외가있는 webElement에 대한 참조에서 getText(), getTag() 메서드를 사용할 때도 마찬가지라고 생각합니다. 그래픽으로 볼 수 있습니다. DOM을 변경했기 때문에 DOM에 더 이상 첨부되지 않은 참조에 액세스하려고합니다.

    관련 문제