2017-02-12 23 views
1

У меня есть HTML-страница, которая выглядит так. Я должен щелкнуть по выпадающему меню и нажать на его 6-й элемент.Selenium Web Driver возвращает Селектор не отображается

<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();

Однако я получаю следующее

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

Я проверил, если мой путь является правильным путем тестирования XPath из инструментов разработчика Chrome и путь отлично работает, однако он не работает на WebDriver.

ответ

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 Драйвер на самом деле не ждет. Он примеряет DOM каждые 500 миллисекунд и проверяет, есть ли [ожидаемое условие] (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 = новый WebDriverWait (WebDriverRefrence, TimeOut); WebDriverWait wait = новый WebDriverWait (драйвер, 20); wait.until (ExpectedConditions.VisibilityofElementLocated (By.xpath ("// * [@ id = \" useraccount \ "]/li [6]/a")));

Check this post.

 Смежные вопросы

  • Нет связанных вопросов^_^