Selenium Web Driver returns 选择器不可见
Selenium Web Driver returns Selector not visible
我有一个看起来像这样的 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&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>
我需要 select 项目 "search RSD user" 为此,我决定使用 xpath 查找元素,并编写了以下 xpath。
driver.findElement(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")).click();
但是我得到以下
error.org.openqa.selenium.ElementNotVisibleException: element not visible
我通过测试来自 chrome 的开发人员工具的 xpath 验证了我的路径是否正确,路径工作正常,但它不适用于 webdriver。
您可以使用显式等待来确保元素在单击之前可见
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")));
element.click();
使用 WebDriverWait 查找元素。
WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut);
WebDriverWait wait = new WebDriverWait (driver, 20);
wait.until(ExpectedConditions.VisibilityofElementLocated(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")));
我有一个看起来像这样的 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&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>
我需要 select 项目 "search RSD user" 为此,我决定使用 xpath 查找元素,并编写了以下 xpath。
driver.findElement(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")).click();
但是我得到以下
error.org.openqa.selenium.ElementNotVisibleException: element not visible
我通过测试来自 chrome 的开发人员工具的 xpath 验证了我的路径是否正确,路径工作正常,但它不适用于 webdriver。
您可以使用显式等待来确保元素在单击之前可见
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")));
element.click();
使用 WebDriverWait 查找元素。
WebDriverWait wait = new WebDriverWait(WebDriverRefrence,TimeOut); WebDriverWait wait = new WebDriverWait (driver, 20); wait.until(ExpectedConditions.VisibilityofElementLocated(By.xpath("//*[@id=\"useraccount\"]/li[6]/a")));