如何将鼠标悬停在geb spock中

时间:2018-05-18 12:09:25

标签: spock geb

我正在使用geb spock并试图悬停一个元素,但是我收到了错误。以下是详细信息。 页面对象类

class HomePage extends Page {

    static at ={
        title.contains("Activity Dashboard")
    }

    static content = {
        tabConnections (wait : true) {$("a", "class" : contains("dropdown-toggle"), "text" : "Connections")}
        subMenuManageConnections (wait: true) {tabConnections.find("ul").find("a" , "href": "/managecash/EDGE_Network" , "text" : "Manage Connections")}
    }


    public void mouseHoverMethod(){
        waitFor {tabConnections.displayed}

        Actions actions = new Actions(driver)
        actions.moveToElement(tabConnections).build().perform()
    }
}

当我从spock spec文件调用mouseHoverMethod方法时,得到以下错误消息: 在线(actions.moveToElement(tabConnections).build().perform())如下:

错误讯息:

  

groovy.lang.MissingMethodException:没有方法签名:   org.openqa.selenium.interactions.Actions.moveToElement()适用   对于参数类型:(geb.content.TemplateDerivedPageContent)值:   [pageobjects.general.HomePage - > tabConnections:   geb.navigator.NonEmptyNavigator]       可能的解决方案:moveToElement(org.openqa.selenium.WebElement),moveToElement(org.openqa.selenium.WebElement,int,int)

你能帮我解决一下如何在Geb Spock中完成鼠标悬停吗?

3 个答案:

答案 0 :(得分:2)

错误消息告诉您正在向TemplateDerivedPageContent方法提供tabConnections实例(moveToElement())。但是如果你检查方法的签名,你会发现它需要一个WebElement参数。当然,Selenium WebDriver对Geb特定的类一无所知。因此,您必须从导航器中获取Web元素,如下所示:

actions.moveToElement(tabConnections.firstElement()).build().perform()

答案 1 :(得分:2)

你也可以使用Geb的交互块,参见http://www.gebish.org/manual/current/#complex-interactions

您的方法看起来像 - >

public void mouseHoverMethod(){
    waitFor {tabConnections.displayed}
    interact {
        moveToElement(tabConnections)
    }
}

答案 2 :(得分:2)

@kriegaex,@ erdi。 谢谢你的解决方案。我也能找到一个有效的解决方案,并在页面对象中创建了以下方法。这三种方法都运行良好。

public void mouseHoverMethodOne (TemplateDerivedPageContent element){
        waitFor {element}
        element.jquery.mouseover()
        element.click()
    }

public void mouseHoverMethodTwo (TemplateDerivedPageContent element){
        waitFor {element.displayed}
        Actions actions = new Actions(driver)
        actions.moveToElement(element.firstElement()).build().perform()
        element.click()
    }

public void mouseHoverMethodThree (TemplateDerivedPageContent element){
        waitFor {element.displayed}
        interact {
            moveToElement(element)
        }
        element.click()
    }

感谢您的帮助。我也给你的答案评了一遍,因为那些给了我很多见解。