私はCucumber SeleniumプロジェクトにSpringを統合しようとしています。Cucumber Spring PageObjectModel
プロジェクトは既にPageObjectModel
デザインパターンで構成され、Springと統合する前に完全に動作しています。
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
注釈として分離したブラウザで実行するために使用される各機能は、私はドライバーが定義されているapplicationcontext.xml
ファイルにSpringとの統合後キュウリ
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();
}
}
で利用可能であることに使用されています。 @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を呼び出す方法を表示されません。 私はすべての機能のために新しいブラウザを開始したいと思います。
私はステップでWebドライバを作成して、ページを通過すると思ったが、このために、私はWebDrviver
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
しかし、春にコンストラクタを定義する必要があるが、これに関連するBeanの文句です。
ご協力いただければ幸いです。