@Then ("^I hover on (.+) menu and (.+) submenu$")
public void mousehover(String elementName,String subMenu) throws InterruptedException{
Actions actions = new Actions(webdriver);
WebElement menuHoverLink = webdriver.findElement(By.xpath("//a[text() = '" + elementName + "']"));
actions.moveToElement(menuHoverLink).build().perform();
Thread.sleep(2000);
actions.moveToElement(menuHoverLink).moveToElement(webdriver.findElement(By.xpath("//a[text() = '" + subMenu + "']"))).click().build().perform();
System.out.println("Sub menu "+subMenu+" Has been clicked");
}
Blockquote大家好。这是我完成鼠标悬停事件的代码,然后单击子链接。但大多数时候子链接点击事件正在运行。但有些时候不行。鼠标悬停事件已完成。但是子链接点击事件没有触发。真的不知道为什么会这样。提前谢谢..
答案 0 :(得分:0)
我会尝试移动到您想要点击的位置,然后点击。使用悬停菜单,您可以从selenium获得关于elemenet是什么时候并且无法点击的奇怪行为。尝试;
actions.MoveToElement(menuHoverLink).Perform();
//wait til clickable, you are sleeping, a wait til element is both displayed and enabled would be better - can explain more if needed
action.Click().Perform();
注意:我认为只使用peform将构建动作而不明确说明
编辑: 我认为有时候它需要比2秒睡眠时间更长的元素才能被点击。抛出什么异常?
而不是thread.sleep使用等待来决定是否可以单击该元素,例如:
public void WaitForElementToBeClickable(IWebElement element)
{
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
wait.Until<bool>((d) =>
{
if (IsElementDisplayed(element) && IsElementEnabled(element))
return true;
else return false;
});
}
public Boolean IsElementEnabled(IWebElement element)
{
try
{
return (element.Enabled);
}
catch (NoSuchElementException)
{
return false;
}
}
public Boolean IsElementDisplayed(IWebElement element)
{
try
{
return (element.Displayed);
}
catch (NoSuchElementException)
{
return false;
}
}