Spring DI - Cucumber JVM - Lazy instantiation

时间:2017-09-20 13:14:43

标签: spring selenium-webdriver autowired cucumber-jvm lazy-initialization

我有一个项目,其中我有两种类型的测试,一次需要WebDriver和其他需要自定义队列依赖项。当使用黄瓜时,它不可能有两个单独的Spring配置,因为如果Step类的注释不同,它不允许你运行测试。因此,我决定在我自动装配的所有Beans上使用Lazy注释,以便它们只在需要时进行实例化。

这似乎在WebDriver实例上将JavascriptExecuter强制转换为其代理而不是WebDriver的真实实例时会产生问题。它抱怨它无法将一个com.sun.proxy。$ Proxy26转换为JavascriptExecuter。

在使用Actions类时尝试将WebDriver强制转换为HasInputDevices接口时也会出现这种情况。

当WebDriver被强制转换为接口时,似乎正在发生这种情况。

有没有人遇到过这个问题,是否有可能懒散地实例化WebDriver对象并按照我们的意愿进行投射。

P.S。我不能将测试框架分成两个,因为一个项目依赖于另一个项目。

谢谢你, 约翰

1 个答案:

答案 0 :(得分:0)

我必须使用以下内容从代理中取回对象,最初发布在Casting a Spring's Proxy object to the actual runtime class

private T getTargetObject(Object proxy, Class targetClass) throws Exception {
   while( (AopUtils.isJdkDynamicProxy(proxy))) {
        return (T) getTargetObject(((Advised)proxy).getTargetSource().getTarget(), targetClass);
        }
        return (T) proxy;
}