2016-09-30 3 views
2

MicrosoftEdge에서 셀렌 테스트를 실행할 때 요소가 표시 될 때까지 기다리는 기능에 문제가 있습니다. 특히 요소가 다른 요소 위에있을 때. 누구든지이 문제를 해결하는 방법을 알고 있습니까? 거기에 사용자가 요소를보고 그것을 클릭 할 수 있는지 확인하는 데 사용할 수있는 자바 스크립트 함수가 있나요?셀렌의 waitForElementVisible이 MicrosoftEdge에서 작동하지 않습니다.

는 여기에 문제가 않습니다 지금

function waitForElementDisplay (selector, time) { 
      if (document.querySelector(selector) != null) { 
       return true; 
      } 
      else if (timeLimit < timeSince) { 
       return false; 
      } 
      else { 
       timeSince += time; 
       setTimeout(function() { 
        waitForElementDisplay(selector, time, timeLimit, timeSince); 
       }, time); 
      } 
     } 

답변

0

예, 셀레늄 몇 번 사용하고거야. Edge와 함께 일한 적은 없지만 다른 브라우저와 비슷한 문제가있었습니다.

내가 일반적으로하는 일은 재시도 래퍼를 작성한 다음 스크립트 실행 프로그램 내에서 "document.getElementById"(또는 무언가)를 사용하여 스크립트 실행 프로그램 내에서 요소 참조를 얻는 것입니다. X 초 지연으로 몇 번 시도합니다.

다음 예제는 Java에서 DOM에서 일부 요소에 액세스 할 수있을 때까지 기다리는 방법을 보여줍니다.

@When("^questionnaire response is loaded$") 
public void questionnaire_response_is_loaded() throws Throwable { 

    Predicate<WebDriver> isLoaded = new Predicate<WebDriver>() { 
     @Override 
     public boolean apply(WebDriver webDriver) { 
      Object obj = ((JavascriptExecutor) webDriver).executeScript(
        "return (!document.getElementById('idNotification'))" 
      ); 
      // if element is present the result will turn false, so we have to negate it 
      return !((Boolean) obj); 
     } 
    }; 

    WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 10); 
    wait.until(isLoaded); 
} 
+0

코드 예가 ​​있습니까? – Jasmine

+0

내가 프로젝트에서 사용하는 샘플 코드가 추가되었습니다. –

0

있어서 waitForElementVisible 만 소자 그것은 요소는 인간의 눈의 여부에 의해 표시되는지 여부를 검사하지 않기 0 우수한 크기 및 불투명도 렌더링되었는지 확인 (I는 cucumberJVM 사용하고있다). 요소가있는보기로 스크롤되지 않은 경우는 false를 돌려 것

function isClickable(element) { 
    var doc = element.ownerDocument || document, 
    win = doc.defaultView || window, 
    rect = element.getBoundingClientRect(), 
    elemAt = doc.elementFromPoint(rect.left + (rect.width >> 1), rect.top + (rect.height >> 1)); 

    for (var e = elemAt; e; e = e.parentElement) { 
    if (e === element) return !elemAt.disabled && win.getComputedStyle(elemAt, null).getPropertyValue('pointer-events') !== 'none'; 
    } 
    return false; 
} 

참고 :

당신은 요소를 볼 수 있고 클릭 할 수 있는지 확인하기 위해 자바 스크립트 기능을 사용할 수 있습니다. 따라서 먼저 element.scrollIntoView()으로 전화해야 할 수도 있습니다.