使用selenium webdriver java

时间:2016-03-29 07:19:26

标签: java selenium selenium-webdriver

我正在使用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>

我必须将鼠标悬停在“声明”菜单上,然后选择子菜单“新索赔”

enter image description here

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();

    }

正如您在下面的附图中看到的那样,驱动程序检测到“声明”菜单,因为它的颜色变得比其他菜单稍暗。但子菜单不会像我在上面的图像中显示的那样显示。鼠标悬停事件无法正常工作

enter image description here

2 个答案:

答案 0 :(得分:0)

在第二次操作中使用它之前释放你的第一个动作。

action.moveToElement(hoverBtn).perform();

这里你不使用release()方法,但你在下一步使用这个动作。这可能是你的问题之一。所以第二次点击,尝试创建新的动作实例。

其次,对于下一次点击,不需要使用动作,我想你可以通过使用普通点击功能来实现这一点,我的意思是:

driver.findElement(PRODUCT_SUBCATEGORY).click();

并正确调试你的代码,以便你的元素定位器是否正常。

答案 1 :(得分:0)

鼠标悬停后获取菜单后,无需再次使用操作。只需单击子菜单即可。鼠标悬停后尝试以下代码

        WebElement subElement = driver.findElement(PRODUCT_SUBCATEGORY);
        subElement.click();