1

是否可以使用 Spring 注入 WebDriver?我读过它不能是单例,通常应该在 @Before 块期间实例化。我可以在那时创建它,但我希望它“神奇地”提供给一些“帮助”类,而不是手动传递对它们的引用。

更新

我通过一项测试让它在本地运行良好

@DirtiesContext( classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

但是一旦我把它放在运行并发测试的服务器上,我就会遇到这个错误。

当该工厂的单例处于销毁状态时,不允许创建单例 bean。

使用 aPrototype也不是一个好主意,因为我还想注入WebDriverBackedSelenium(需要驱动程序并最终创建 2 个实例),并且在某些原型案例中我遇到了这个问题。

嵌套异常是 org.openqa.selenium.WebDriverException: Error forwarding the new session Request timed out waiting for a node to be available

4

2 回答 2

0

使用 Spring模拟@Before逻辑的一种方法是将驱动程序 bean 范围设置为原型。这将为每个请求创建一个新的驱动程序实例。问题是,如果您想@Autowired在将创建 webdriver 的新实例的帮助程序类上使用。

为了同时运行测试,我们将webdriver 实现为 threadlocal。这允许为测试用例重用驱动程序实例,每个测试类一次驱动程序实例。然后可以在同一 JVM 和线程中运行的任何类中引用线程本地副本。

于 2015-03-12T15:21:13.267 回答
0

是的,这是可能的,并且对我有用。在上下文 spring 文件中,您包括以下内容:

<bean id="driver" class="org.openqa.selenium.firefox.FirefoxDriver"
destroy-method="quit">
</bean> 

然后在你的课上:

@Autowired
 private WebDriver adriver;
 public WebDriver getAdriver() {
    return adriver;
 } 

请参阅此链接以获取更多信息

于 2015-03-11T13:56:20.587 回答