Ich versuche Frühling in Gurken Selen Projekt zu integrieren.Cucumber Spring PageObjectModel
Projekt ist bereits mit PageObjectModel
Design-Muster konfiguriert und funktioniert perfekt vor der Integration mit 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();
}
Nach der Integration mit Spring-Ausgabe bemerkt, sind alle Funktionen in demselben Browser ausgeführt.
vor dem Frühjahr Integration jedes Merkmal in getrennten Browser auszuführen, verwendet als @After
und @Before
Anmerkungen verwendet werden, die in Cucumber
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();
}
}
Nach der Integration mit Frühling sind in applicationcontext.xml
Datei ich den Treiber definiert haben. Ich kann keinen Treiber von @After
und @Before
Methoden aufrufen und alle Tests werden im selben Browser ausgeführt
Unten ist das Code-Snippet beigefügt.
<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();
}
}
ich im Aufruf Frühling Bohne von @After
und @Before
Anmerkungen sieht einen Weg nicht. Ich möchte für jedes Feature einen neuen Browser initiieren.
Ich dachte, Web-Treiber in den Schritten und Pass über die Seiten, aber dafür muss ich definieren einen Konstruktor mit WebDrviver
public HomePage(WebDriver driver) {
super(driver);
PageFactory.initElements(new HtmlElementDecorator(new HtmlElementLocatorFactory(driver)), this);
}
Aber Frühling ist beschweren für eine Bohne damit verbunden erstellen.
Jede Hilfe würde sehr geschätzt werden.