弹簧注入类而不是返回新的简单方法

时间:2015-04-20 15:50:17

标签: java spring selenium dependency-injection jbehave

我目前正在使用jbehave和spring运行selenium测试。我的模式是一个故事文件>步骤文件>页面文件。

但是我认为我返回新页面文件的方式不是很干净,我相信这些页面可以通过spring注入,但我需要帮助实现它。

我的豆子:

<bean id="driverProvider" class="org.jbehave.web.selenium.PropertyWebDriverProvider">
<bean>

<bean id="pageFactory"class="com.automation.pages.Pages
    <constructor-arg ref="driverProvider" />
</bean>

在我的Pages类中:

public class Pages {

    private final WebDriverProvider webDriverProvider;

    public Pages(WebDriverProvider webDriverProvider) {
        this.webDriverProvider = webDriverProvider;
    }

    public HomePage newHomePage() {
        return new HomePage(webDriverProvider);
    }

    public ContactPage newContactPage() {
        return new ContactPage(webDriverProvider);
    }
}

我的BasePage类:

public class BasePage {

protected HomePage homePage;
protected ContactPage contactPage;

public BasePage(PageFactory pageFactory) {
        homePage = pageFactory.newHomePage();
        contactPage = pageFactory.newContactPage();
}

然后从我的Steps文件中我扩展了BasePage,这样我就可以访问受保护的页面了。

理想情况下,我想删除对pagefactory和/或basepage的需求,让Spring努力工作。

1 个答案:

答案 0 :(得分:0)

您可以使用弹簧进行方法注射。

使您的基类抽象并添加抽象方法public abstract ContactPage newPhoneLandingPage()

在bean配置中,将<lookup-method name="newPhoneLandingPage" bean="newPhoneLandingPage">添加到您的bean,其中newPhoneLandingPage是您的原型bean。

Spring将连接代码,因此如果调用该方法,将返回一个新的(prototype)实例。