2017-02-12 5 views
1

다음과 같은 HTML 페이지가 있습니다. 메뉴 드롭 다운을 클릭하고 6 번째 항목을 클릭해야합니다.셀레늄 웹 드라이버가 선택자를 표시하지 않습니다.

<li class="open"> 
    <a href="#" class="dropdown-toggle "> 
     <i><img src="/cs/images/icon_01.jpg" alt=""></i> 
     <span class="menu-text"> User Account Management </span> 

     <b class="arrow fa fa-angle-down"></b> 
    </a> 
    <b class="arrow"></b> 

    <!-- Account Analysis start --> 
    <ul class="submenu nav-show active" id="useraccount" style="display: block;"> 
     <li class=""> 
      <a href="/cs/servlets/UserServlet?action=newAccountAnalysis&amp;isLogged=true"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">Account Analysis</span> 
      </a> 
      <b class="arrow"></b> 
     </li> 
     <!-- Account Analysis end --> 
     <!-- Delete User Account start --> 
     <li class=""> 
      <a href="/cs/servlets/UserServlet?action=selectUserAccountToDelete&amp;isLogged=true"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">Delete User Account</span> 
      </a> 

      <b class="arrow"></b> 
     </li> 
     <!-- Delete User Account end--> 
     <!-- Unlock/Re-activate User Account  start -->  
     <li class=""> 
      <a href="/cs/servlets/UserServlet?action=selectUserAccountToUnlock&amp;isLogged=true"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">Unlock/Re-activate User Account</span> 
      </a> 

      <b class="arrow"></b> 
     </li> 
     <!-- Unlock/Re-activate User Account end --> 
     <!-- De-activate User Account  start -->  
     <li class=""> 
      <a href="/cs/servlets/UserServlet?action=selectUserAccountToDeactivate&amp;isLogged=true"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">De-activate User Account</span> 
      </a> 

      <b class="arrow"></b> 
     </li> 
     <!-- De-activate User Account end --> 
     <!-- Update User Profile start -->  
     <li class=""> 
      <a href="/cs/jsp/user/rsdUpdateUser.jsp"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">Update User Account</span> 
      </a> 

      <b class="arrow"></b> 
     </li> 
     <!-- Update User Profile end --> 
     <!-- Search RSD User start -->  
     <li class=""> 
      <a href="/cs/servlets/UserServlet?action=searchRsdUser&amp;isLogged=true"> 
       <i class="menu-icon fa fa-caret-right"></i> 
       <span class="menu-text">Search RSD User</span> 
      </a> 

      <b class="arrow"></b> 
     </li> 
     <!-- Search RSD User end --> 
    </ul> 
</li> 

나는 아이템 "검색 RSD 사용자"를 선택해야하고이를 위해 내가 XPath는에 의해 요소를 찾아 사용하기로 결정하고 난 다음 XPath를 썼다.

driver.findElement(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")).click();

그러나 내가 얻을 내 경로가 크롬의 개발자 도구에서 XPath를 테스트하여 정확하고 경로 그러나 그것은 webdriver에서 작동하지 않습니다 잘 작동하면 내가 확인

error.org.openqa.selenium.ElementNotVisibleException: element not visible 

다음과 같습니다.

답변

1

당신은 요소를 찾기 위해

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"useraccount\"]/li[6]/a"))); 
element.click(); 
+0

@Guy 해답을 주셔서 감사합니다. 그러나이 태그에 대해 드라이버가 "대기"하는 이유는 아직 명확하지 않습니다. 설명이있는 문서 나 도움 링크를 가르쳐 주시면 정말 도움이 될 것입니다. 나는 자동화에 초보자이고 배울 려하고있다. 귀중한 도움에 다시 한 번 감사드립니다. – CaRtY5532

+0

@ CaRtY5532 드라이버가 실제로 기다리지 않습니다. 500 밀리 초마다 DOM을 샘플링하고 [예상 조건] (https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#visibilityOfElementLocated- org.openqa.selenium.By-)이 충족되면,이 경우 요소를 찾고 높이 및 너비가 표시되는지 확인합니다 (첨부 된 링크에서 볼 수 있음). 시간 제한 (내 대답에서 10 초)에 성공하면 요소를 반환합니다. 그렇지 않으면'TimeoutException'을 던집니다. – Guy

0

사용 WebDriverWait 그것을 클릭하기 전에 요소가 볼 수 있도록 명시 적으로 대기를 사용할 수 있습니다.

WebDriverWait wait = new WebDriverWait (WebDriverRefrence, TimeOut); WebDriverWait wait = 새 WebDriverWait (driver, 20); wait.until (ExpectedConditions.VisibilityofElementLocated (By.xpath ("// * @"useraccount \ "]/li [6]/a"))));

Check this post.

관련 문제