是否可以使用 Spring 注入 WebDriver?我读过它不能是单例,通常应该在@Before块期间实例化。我可以在这一点上创建它,但我希望它"神奇地"提供给一些"帮助程序"类,而不是手动将引用传递给它们。
更新
我让它在本地工作正常,使用一次测试
@DirtiesContext( classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
但是一旦我把它放在我们运行并发测试和事情的服务器上,我就遇到了这个错误。
当该工厂的单例正在破坏时,不允许创建单例豆。
使用Prototype
也不是一个好主意,因为我也想注入WebDriverBackedSelenium
(这需要驱动程序并最终创建了 2 个实例),在某些原型情况下我遇到了这个问题。
嵌套异常是 org.openqa.selenium.WebDriver异常:转发新会话请求超时等待节点可用时
出错
是的,这是可能的,对我有用。在上下文弹簧文件中,包括以下内容:
<bean id="driver" class="org.openqa.selenium.firefox.FirefoxDriver"
destroy-method="quit">
</bean>
然后在您的班级中:
@Autowired
private WebDriver adriver;
public WebDriver getAdriver() {
return adriver;
}
请参阅此链接以获取更多信息
使用 Spring 模拟@Before
逻辑的一种方法是将驱动程序 Bean 范围设置为原型。这将为每个请求创建一个新的驱动程序实例。问题是,如果要在将创建 webdriver 新实例的帮助程序类上使用@Autowired
。
为了同时运行测试,我们已经将 Web 驱动程序实现为 threadlocal。这允许对测试用例重用驱动程序实例,每个测试类的驱动程序实例一次。然后,可以在同一 JVM 和线程中运行的任何类中引用线程本地副本。