我正在使用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中完成鼠标悬停吗?
答案 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()
}
感谢您的帮助。我也给你的答案评了一遍,因为那些给了我很多见解。