扩展NavigatorFactory以记录诸如click(),sendKeys()之类的操作

时间:2019-04-12 15:28:33

标签: groovy geb

我试图覆盖诸如click()和leftShift()/ value()之类的几种方法,以便使用诸如log4j / slf4j之类的任何日志库来记录操作。

是否可以使用NavigatorFactory(http://gebish.org/manual/current/#navigator-factory)扩展/覆盖EmptyNavigator和NonEmptyNavigator类中的方法?

如果是,请提供实现这一目标所需的指针/步骤/代码段。

如果不可能,请提出任何其他实现此目标的方法。

谢谢。

1 个答案:

答案 0 :(得分:0)

谢谢 到geb邮件列表中的@erdi(Marcin Erdmann),能够在NonEmptyNavigator中实现替代方法。以下是对我有用的代码段。

GebConfig.groovy

innerNavigatorFactory = { Browser browser, List<WebElement> elements ->
 elements ? new NonEmptyCustomNavigator(browser, elements) : new EmptyCustomNavigator()
}

NonEmptyCustomNavigator.groovy

import geb.Browser
import geb.navigator.Navigator
import geb.navigator.NonEmptyNavigator
import groovy.util.logging.Log4j
import org.openqa.selenium.WebElement

@Log4j
class NonEmptyCustomNavigator extends NonEmptyNavigator{

 NonEmptyCustomNavigator(Browser browser, Collection<? extends WebElement> contextElements) {
 super(browser, contextElements)
 }

 @Override
 Navigator click() {
 ensureContainsSingleElement("click")
 contextElements.first().click()
 log.info("[" + contextElements.first().toString() + "] Click element")
 this
 }
}

EmptyCustomNavigator.groovy

import geb.Browser
import geb.navigator.EmptyNavigator

class EmptyCustomNavigator extends EmptyNavigator {

 EmptyCustomNavigator(Browser browser) {
 super(browser)
 }
}