我正在使用firefox浏览器。我尝试将鼠标悬停在菜单上,但是当使用selenium webdriver悬停在主菜单上时不显示其各自的子菜单。它只选择菜单“声明”并且仅停在那里。它不会进一步执行testScript,因为鼠标悬停子菜单未显示。所以
HTML CODE
<body>
<div id="div_LockPane" class="LockOff"/>
<div id="claim-newclaimsearch" class="page-wrap" data-menu-hovered="">
<div class="header">
<div class="row">
<div class="column small-12 large-2 logo">
<nav class="column small-12 large-10 navigation-container" role="navigation">
<ul class="main-menu">
<li>
<li class="active">
<a href="/Menu/Claims">
<div class="menu-icon">
<img src="/content/common/images/menu-icons/claims.png"/>
</div>
<span class="name">Claims</span>
</a><div class="arrow-container">
<div class="sub-menu-container">
<div class="row sub-menu">
<div class="column title-side">
<h2 class="title">Claims</h2>
</div>
<div class="column points-side">
<ul>
<li class="active">
<a href="/Claim/NewClaimSearch">New Claims</a>
</li>
<div class="search-page">
<div id="search-advanced-tools" data-state="collapsed">
<div class="row">
<div class="column">
<h2 class="action-title">New Claims</h2>
</div>
</div>
我必须将鼠标悬停在“声明”菜单上,然后选择子菜单“新索赔”
Selenium Code
//private final By PRODUCT_CATEGORY = By.linkText("Claims");
private final By PRODUCT_CATEGORY= By.xpath("//a[contains(.,'Claims')]");
private final By PRODUCT_SUBCATEGORY = By.linkText("NEW CLAIMS");
@Test()
void testLogincase2() throws Exception{
Thread.sleep(2000);
WebElement hoverBtn = driver.findElement(PRODUCT_CATEGORY);
System.out.println("click on Claims");
Thread.sleep(2000);
Actions action = new Actions(driver);
Thread.sleep(2000);
action.moveToElement(hoverBtn).perform();
Thread.sleep(1000);
WebElement subElement = driver.findElement(PRODUCT_SUBCATEGORY);
Thread.sleep(1000);
action.moveToElement(subElement);
System.out.println("No claims");
Thread.sleep(2000);
action.click();
Thread.sleep(2000);
action.perform();
}
正如您在下面的附图中看到的那样,驱动程序检测到“声明”菜单,因为它的颜色变得比其他菜单稍暗。但子菜单不会像我在上面的图像中显示的那样显示。鼠标悬停事件无法正常工作
答案 0 :(得分:0)
在第二次操作中使用它之前释放你的第一个动作。
action.moveToElement(hoverBtn).perform();
这里你不使用release()方法,但你在下一步使用这个动作。这可能是你的问题之一。所以第二次点击,尝试创建新的动作实例。
其次,对于下一次点击,不需要使用动作,我想你可以通过使用普通点击功能来实现这一点,我的意思是:
driver.findElement(PRODUCT_SUBCATEGORY).click();
并正确调试你的代码,以便你的元素定位器是否正常。
答案 1 :(得分:0)
鼠标悬停后获取菜单后,无需再次使用操作。只需单击子菜单即可。鼠标悬停后尝试以下代码
WebElement subElement = driver.findElement(PRODUCT_SUBCATEGORY);
subElement.click();