У меня есть 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&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&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&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&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&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.
Благодарим вас за решение @Guy, но я все еще не понимаю, что делает драйвер «ждать» этого тега. Если вы можете указать мне на любую документацию или ссылку на ссылку, в которой есть объяснение, это будет очень полезно. Я новичок в автоматизации, и я пытаюсь учиться. Еще раз спасибо за ценную помощь. – CaRtY5532
@ 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