我正在嘗試將Spring集成到Cucumber Selenium項目中。黃瓜春季PageObjectModel
在與Spring集成之前,項目已經配置了PageObjectModel
設計模式並完美工作。
public abstract class BasePage {
public WebDriver driver;
public BasePage(WebDriver driver) {
this.driver = driver;
}
public void verifyPage() {
//verify page
}
}
public class HomePage extends BasePage {
@FindBy(how = How.ID, using = "MENU_lINK")
private Link MENU_HEADER;
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
public Link getMENU_HEADER() {
return MENU_HEADER;
}
}
public class HomePageSteps {
private static final Logger LOGGER = Logger.getLogger(HomePageSteps.class.getName());
private WebDriver driver;
HomePage homePage;
HelperPage helperPage;
public HomePageSteps() {
driver = WebDriverProvider.driver; //Driver initiated here
homePage = new HomePage(driver);
}
@Given("I'm on home page")
public void navigateToHomePage() {
homePage.getMENU_HEADER().click();
}
與Spring問題集成後注意到所有功能都在同一個瀏覽器中執行。
Spring集成之前用於分離瀏覽器中執行的@After
和@Before
註釋每個功能所使用的是黃瓜
public class WebDriverProvider {
public static WebDriver driver;
@Before
public void openBrowser() throws MalformedURLException {
System.setProperty("webdriver.chrome.driver", new File(".").getAbsolutePath() + "/drivers/chromedriver.exe");
if (driver != null) driver.quit();
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
}
@After
public void embedScreenshot(Scenario scenario) {
driver.quit();
}
}
提供經過整合與春天applicationcontext.xml
文件我已經定義的驅動程序。我無法撥打@After
和@Before
方法的驅動程序,並且所有測試都在同一瀏覽器中執行。
下面是附加的代碼片段。
<bean id="driverProvider" class="com.ecom.utils.DriverProvider" scope="prototype"/>
<bean id="webDriver"
class="org.openqa.selenium.WebDriver"
factory-bean="driverProvider"
factory-method="getDriver" scope="prototype"/>
public abstract class BasePage {
@Autowired
protected WebDriver driver;
public void verifyPage() {
//verify Page
}
}
@Component
public class HomePage extends BasePage {
@FindBy(how = How.XPATH, using = "//*[@id='js-siteMainNavigation']//a[@class='qa-Cl_Menu c-site-nav-main-link-1']")
private Link MENU_HEADER;
public HomePage(WebDriver driver) {
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
public Link getMENU_HEADER() {
return MENU_HEADER;
}
}
public class HomePageSteps {
private static final Logger LOGGER = Logger.getLogger(HomePageSteps.class.getName());
@Autowired
HomePage homePage;
@When("I navigate to pizza selection page")
public void navigateToMenuPage() {
homePage.getMENU_HEADER().click();
}
}
我沒有看到從@After
和@Before
註釋調用Spring bean的一種方式。 我想爲每個功能啓動全新的瀏覽器。
我認爲創建步驟捲筒紙驅動器,並在頁面之間傳遞,但爲了這個,我必須定義與WebDrviver
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
一個構造函數,但春天是抱怨關聯到這一個bean。
任何幫助將不勝感激。