我的在系统经常遇到有
子菜单的情况,但是子菜单的显示需要逐层的打开,我们在使用webdriver的时候如果不逐层的的打开,直接去打开下级菜单时,会报:
element not visible错误,这个时候我们就需要在点击下级菜单的时候,把下级菜单显示出来,我们可以通过Actions的moveToElement方法将鼠标移到父菜单上已到达展开子菜单的效果,展开后就可以操作子菜单了,这个时候就不会包element not visible了
Java代码:
/**
*
* @param menuParentNodeXpath-菜单的父节点xpath
* @param menuName-一级菜单名称
* @param menuTagName-一级菜单tagName
* @param subMenuName-二级菜单名称
* @param subMenuTagName-二级菜单tagName
* @throws InterruptedException
*/
public void openMenu(String menuParentNodeXpath,String menuName,String menuTagName,String subMenuName,String subMenuTagName) throws InterruptedException{
List<WebElement> menus = driver.findElement(By.xpath(menuParentNodeXpath)).findElements(By.tagName(menuTagName));
for(WebElement menu:menus){
if (menu.getAttribute("textContent").equals(menuName)){
List<WebElement> subMenus = driver.findElements(By.tagName(subMenuTagName));
for(WebElement subMenu:subMenus){
if(subMenu.getAttribute("textContent").equals(subMenuName)){
Actions action = new Actions(driver);
action.moveToElement(menu).build().perform();
Thread.sleep(1000);
subMenu.click();
return;
}
}
}
}
}