Java Spring与Selenium的依赖性集成

Java Spring与Selenium的依赖性集成,java,spring,selenium,Java,Spring,Selenium,我不知道为什么,但是Spring没有@Autowired我的依赖项,我总是得到NullPoionterException。我在chromeOptions.addArguments(“测试类型”)上的initializeDriver方法中遇到异常;。我使用工厂模式创建WebDriver,如下所示 public abstract class DriverManager { protected WebDriver webDriver; protected abstract void

我不知道为什么,但是Spring没有@Autowired我的依赖项,我总是得到NullPoionterException。我在chromeOptions.addArguments(“测试类型”)上的initializeDriver方法中遇到异常;。我使用工厂模式创建WebDriver,如下所示

public abstract class DriverManager {

    protected WebDriver webDriver;
    protected abstract void initializeDriver();

    public void quitDriver() {
        if (webDriver != null) {
            webDriver.quit();
            webDriver = null;
        }
    }

    public WebDriver getWebDriver() {
        return webDriver;
    }
}
@Component
public class ChromeDriverManager extends DriverManager {

    @Autowired
    private DesiredCapabilities desiredCapabilities;

    @Autowired
    private ChromeOptions chromeOptions;

    @Autowired
    private BeanFactory beanFactory;

    @Autowired
    private LoggingPreferences loggingPreferences;


    protected void initializeDriver() {
        desiredCapabilities = DesiredCapabilities.chrome();
        chromeOptions.addArguments("test-type");
        chromeOptions.addArguments("--disable-extensions");
        chromeOptions.addArguments("-incognito");
        desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

        loggingPreferences = new LoggingPreferences();
        loggingPreferences.enable(LogType.BROWSER, Level.ALL);
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
        webDriver = beanFactory.getBean(ChromeDriver.class, desiredCapabilities);
    }
}

@Component
public class DriverManagerFactory {

    @Autowired
    @Qualifier("ChromeDriverManager")
    private DriverManager chromeDriverManager;

    public DriverManager getManager(Browser browser) {
        DriverManager driverManager;
        switch (browser) {
            case CH:
                chromeDriverManager.initializeDriver();
                driverManager = chromeDriverManager;
                break;
            default:
                //todo rest of browsers
                driverManager = null;
        }
        return driverManager;
    }
}

@Configuration
@ComponentScan(basePackages = "tmp")
public class AppConfig {

    @Bean
    @Lazy
    public ChromeDriver chromeDriver(DesiredCapabilities desiredCapabilities) {
        System.setProperty("webdriver.chrome.driver", "C:\\ATF\\drivers\\chromedriver.exe");
        return new ChromeDriver(desiredCapabilities);
    }

    @Bean
    public DesiredCapabilities desiredCapabilities() {
        return new DesiredCapabilities();
    }

    @Bean
    public ChromeOptions chromeOptions() {
        return new ChromeOptions();
    }

    @Bean
    public LoggingPreferences loggingPreferences() {
        return new LoggingPreferences();
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class runChrome {

    @Autowired
    DriverManagerFactory driverManagerFactory;

    DriverManager driverManager;

    @Before
    public void beforeTest() {
        driverManager = driverManagerFactory.getManager(Browser.CH);
    }


    @Test
    public void run() {
        driverManager.getWebDriver().get("http://www.google.com");
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class runChrome {

    @Autowired
    private BeanFactory beanFactory;

    @Autowired
    private DesiredCapabilities desiredCapabilities;

    @Autowired
    private LoggingPreferences loggingPreferences;

    @Autowired
    private ChromeOptions chromeOptions;

    @Test
    public void run() {
        desiredCapabilities = DesiredCapabilities.chrome();
        chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("test-type");
        chromeOptions.addArguments("--disable-extensions");
        chromeOptions.addArguments("-incognito");
        desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

        loggingPreferences = new LoggingPreferences();
        loggingPreferences.enable(LogType.BROWSER, Level.ALL);
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
        ChromeDriver chromeDriver = beanFactory.getBean(ChromeDriver.class, desiredCapabilities);
        chromeDriver.get("http://www.google.com");
    }
}
我的ChromeDriverManager类是否需要一些注释?我不明白。我的第一个方法是没有工厂模式,所有的工作都很好。但是我在我的测试课上做所有的事情,它看起来是这样的

public abstract class DriverManager {

    protected WebDriver webDriver;
    protected abstract void initializeDriver();

    public void quitDriver() {
        if (webDriver != null) {
            webDriver.quit();
            webDriver = null;
        }
    }

    public WebDriver getWebDriver() {
        return webDriver;
    }
}
@Component
public class ChromeDriverManager extends DriverManager {

    @Autowired
    private DesiredCapabilities desiredCapabilities;

    @Autowired
    private ChromeOptions chromeOptions;

    @Autowired
    private BeanFactory beanFactory;

    @Autowired
    private LoggingPreferences loggingPreferences;


    protected void initializeDriver() {
        desiredCapabilities = DesiredCapabilities.chrome();
        chromeOptions.addArguments("test-type");
        chromeOptions.addArguments("--disable-extensions");
        chromeOptions.addArguments("-incognito");
        desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

        loggingPreferences = new LoggingPreferences();
        loggingPreferences.enable(LogType.BROWSER, Level.ALL);
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
        webDriver = beanFactory.getBean(ChromeDriver.class, desiredCapabilities);
    }
}

@Component
public class DriverManagerFactory {

    @Autowired
    @Qualifier("ChromeDriverManager")
    private DriverManager chromeDriverManager;

    public DriverManager getManager(Browser browser) {
        DriverManager driverManager;
        switch (browser) {
            case CH:
                chromeDriverManager.initializeDriver();
                driverManager = chromeDriverManager;
                break;
            default:
                //todo rest of browsers
                driverManager = null;
        }
        return driverManager;
    }
}

@Configuration
@ComponentScan(basePackages = "tmp")
public class AppConfig {

    @Bean
    @Lazy
    public ChromeDriver chromeDriver(DesiredCapabilities desiredCapabilities) {
        System.setProperty("webdriver.chrome.driver", "C:\\ATF\\drivers\\chromedriver.exe");
        return new ChromeDriver(desiredCapabilities);
    }

    @Bean
    public DesiredCapabilities desiredCapabilities() {
        return new DesiredCapabilities();
    }

    @Bean
    public ChromeOptions chromeOptions() {
        return new ChromeOptions();
    }

    @Bean
    public LoggingPreferences loggingPreferences() {
        return new LoggingPreferences();
    }
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class runChrome {

    @Autowired
    DriverManagerFactory driverManagerFactory;

    DriverManager driverManager;

    @Before
    public void beforeTest() {
        driverManager = driverManagerFactory.getManager(Browser.CH);
    }


    @Test
    public void run() {
        driverManager.getWebDriver().get("http://www.google.com");
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class runChrome {

    @Autowired
    private BeanFactory beanFactory;

    @Autowired
    private DesiredCapabilities desiredCapabilities;

    @Autowired
    private LoggingPreferences loggingPreferences;

    @Autowired
    private ChromeOptions chromeOptions;

    @Test
    public void run() {
        desiredCapabilities = DesiredCapabilities.chrome();
        chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("test-type");
        chromeOptions.addArguments("--disable-extensions");
        chromeOptions.addArguments("-incognito");
        desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

        loggingPreferences = new LoggingPreferences();
        loggingPreferences.enable(LogType.BROWSER, Level.ALL);
        desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
        ChromeDriver chromeDriver = beanFactory.getBean(ChromeDriver.class, desiredCapabilities);
        chromeDriver.get("http://www.google.com");
    }
}
我的应用程序配置不会更改。我在两种情况下都使用相同的方法。 编辑:我已将代码编辑为建议。但我还是得到了这个丑陋的例外

WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'driverManagerFactory': Unsatisfied dependency expressed through field 'chromeDriverManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'tmp.DriverManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=ChromeDriverManager)}
May 12, 2017 1:20:37 PM org.springframework.test.context.TestContextManager prepareTestInstance
SEVERE: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@47f6473] to prepare test instance [tmp.runChrome@2e005c4b]
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'driverManagerFactory': Unsatisfied dependency expressed through field 'chromeDriverManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'tmp.DriverManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=ChromeDriverManager)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
    ... 24 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'tmp.DriverManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=ChromeDriverManager)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 42 more


java.lang.IllegalStateException: Failed to load ApplicationContext

    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'driverManagerFactory': Unsatisfied dependency expressed through field 'chromeDriverManager'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'tmp.DriverManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=ChromeDriverManager)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
    ... 24 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'tmp.DriverManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=ChromeDriverManager)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1486)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
    ... 42 more
几点

  • 您需要在
    ChromeDriverManager
    类上安装
    @组件(或任何等效组件)。如果没有这个选项,您的任何字段都不会自动连接,因为它根本不会被扫描
    
  • 在您的
    DriverManagerFactory
    类中,您正在执行
    new ChromeDriverManager()
    如果您使用new创建实例,那么您将失去spring自动连接功能,并且您创建的这个新对象中的所有文件都将为null(即使您将@Component放在ChromeDriverManager上)
    因此,您需要在
    DriverManagerFactory
    类中自动连接
    ChromeDriverManager
    。当然,使用@Component制作
    DriverManager工厂
    class a bean(类似于第1点)
  • 几点

  • 您需要在
    ChromeDriverManager
    类上安装
    @组件(或任何等效组件)。如果没有这个选项,您的任何字段都不会自动连接,因为它根本不会被扫描
    
  • 在您的
    DriverManagerFactory
    类中,您正在执行
    new ChromeDriverManager()
    如果您使用new创建实例,那么您将失去spring自动连接功能,并且您创建的这个新对象中的所有文件都将为null(即使您将@Component放在ChromeDriverManager上)
    因此,您需要在
    DriverManagerFactory
    类中自动连接
    ChromeDriverManager
    。当然,使用@Component制作
    DriverManager工厂
    class a bean(类似于第1点)

  • 好的,那么我应该删除我的工厂并在AppConfig中创建驱动程序吗?不。你的设计很完美。在ChromeDriverManager和DriverManager工厂中需要@Component,在DriverManager工厂中不要使用new创建新对象。相反,Autowire ChromeDriverManager
    @Autowired@Qualifier(“ChromeDriverManager”)DriverManager ChromeDriverManager
    ,在tesr类中,Autowire DriverManager工厂并调用getManagerI只需编辑代码,我仍然会遇到异常:(我不明白为什么?我甚至试着在DriverManager上添加@Component,但仍然不起作用。我明白了。修复了
    DriverManager chromeDriverManager
    chromeDriverManager chromeDriverManager
    的问题。现在如果我想要更多的浏览器,我必须
    @Autowire
    所有浏览器吗?是的。在你的工厂,你必须自动连接所有浏览器。)d然后根据浏览器返回正确的驱动程序。声明时应始终使用接口(
    DriverManager
    ),而不要使用实现类(
    ChromeDriverManager
    )。应将
    DriverManager
    与@Qualifier一起使用。我看到了更新的代码。您已使用
    @Qualifier(“ChromeDriverManager”)
    但是限定符中的名称应该是
    chromeDriverManager
    (小写字母“c”而不是“c”)。这是因为当spring为ABC类创建bean时,它会自动将名称命名为ABC(小写第一个字母)。您也可以自定义。exploreOK,那么我应该删除工厂并在AppConfig中创建驱动程序吗?不。您的设计非常完美。您需要在ChromeDriverManager和DriverManager工厂中使用@Component,而在DriverManager工厂中,不要使用new创建新对象。而是使用Autowire ChromeDriverManager
    @Autowired@Qualifier创建新对象(“ChromeDriverManager”)DriverManager ChromeDriverManager
    和在tesr类Autowire DriverManager Factory中并调用GetManager只需编辑代码,我仍然会遇到异常:(我不明白为什么?我甚至试着在DriverManager上添加@Component,但仍然不起作用。我明白了。修复了
    DriverManager chromeDriverManager
    chromeDriverManager chromeDriverManager
    的问题。现在如果我想要更多的浏览器,我必须
    @Autowire
    所有浏览器吗?是的。在你的工厂,你必须自动连接所有浏览器。)d然后根据浏览器返回正确的驱动程序。声明时应始终使用接口(
    DriverManager
    ),而不要使用实现类(
    ChromeDriverManager
    )。应将
    DriverManager
    与@Qualifier一起使用。我看到了更新的代码。您已使用
    @Qualifier(“ChromeDriverManager”)
    但是限定符中的名称应该是
    chromeDriverManager
    (小写字母“c”而不是“c”)。这是因为当spring为ABC类创建bean时,它会自动将名称命名为ABC(小写第一个字母)。您也可以自定义它。浏览