2015-04-20 15 views
0

我目前有使用jbehave和spring運行的硒測試。我的模式是故事文件>步驟文件>頁面文件。簡單的方法彈簧注入類而不是返回新的

但是我認爲我返回新頁面文件的方式不是很乾淨,我相信這些頁面可以通過彈簧注入,但我需要幫助實現這一點。

我豆類:

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

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

在我的網頁類:

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(); 
} 

然後從我的步驟,則文件我只是延長BasePage的,所以我有權訪問受保護的頁面。

理想情況下,我想刪除對pagefactory和/或basepage的需求,並讓Spring努力工作。

回答

0

您可以使用彈簧進行方法注射。

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

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

Spring將連線代碼,所以如果該方法被稱爲新的(prototype)實例將被返回。

+0

我設法在無論我需要它的字段聲明上使用@Autowired註釋。這意味着現在不需要BasePage和PageFactory。 但是我的每個步驟和頁面文件都有很多bean,並且我在春天的某個地方閱讀過關於自定義註釋的地方。 我不知道我是否可以利用這個,所以我可以只註釋每個班級,並削減我擁有的豆子? – PSG

相關問題