我目前正在使用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努力工作。
答案 0 :(得分:0)
您可以使用弹簧进行方法注射。
使您的基类抽象并添加抽象方法public abstract ContactPage newPhoneLandingPage()
。
在bean配置中,将<lookup-method name="newPhoneLandingPage" bean="newPhoneLandingPage">
添加到您的bean,其中newPhoneLandingPage
是您的原型bean。
Spring将连接代码,因此如果调用该方法,将返回一个新的(prototype
)实例。