ATM我正在重构我们的Selenium E2 E测试框架以使用Spring。
我的类/豆:
package info.fingo.selenium.utils.driver;
@Component
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class ProxyDecorator extends WebDriverDecorator<WebDriver> {
@Autowired
public ProxyDecorator(TestUtils testUtils, DriverManager driverManager) {
super(WebDriver.class);
this.testUtils = testUtils;
this.driverManager = driverManager;
超类别:
package org.openqa.selenium.support.decorators;
public class WebDriverDecorator<T extends WebDriver> {
private final Class<T> targetWebDriverClass;
private Decorated<T> decorated;
@SuppressWarnings("unchecked")
public WebDriverDecorator() {
this((Class<T>) WebDriver.class);
}
public WebDriverDecorator(Class<T> targetClass) {
this.targetWebDriverClass = targetClass;
}
public final T decorate(T original) {
Require.nonNull("WebDriver", original);
decorated = createDecorated(original);
return createProxy(decorated, targetWebDriverClass);
}
调用此线路时出现问题:
createProxy(decorated, targetWebDriverClass)
其中targetWebDriverClass
因为未知原因是null
,并且稍后抛出了NullPointerException。这不应该发生,因为targetWebDriverClass
总是通过构造函数设置的--要么由客户端提供(调用super(class)),要么默认为默认WebDriverDecorator构造函数中的WebDriver.class。没有Spring也能正常工作,不幸的是我对Spring的了解不够,无法通过调试获得任何信息。
我的Spring依赖项:
ext.springVersion = '2.7.1'
dependencies {
//SPRING BOOT
api "org.springframework.boot:spring-boot-starter:$springVersion",
"org.springframework.boot:spring-boot-starter-aop:$springVersion",
"org.springframework.boot:spring-boot-starter-test:$springVersion",
1条答案
按热度按时间yjghlzjz1#
超类
WebDriverDecorator
中的decorate
方法被标记为final
,这使得它不适合Spring CGLIB代理,因为它不能代理final方法(& classes)-抱歉,我不知道导致我的问题的确切原因。这不是我自己的类,它是从依赖项内部获取的,所以我不能更改它。这意味着这个类不能被Spring管理。为了让这个类工作,我去掉了继承(
extends
关键字),用composition
代替它。需要做一些反射魔法(对于它的一个protected
方法),但这似乎可以做到。