在 Java 页面对象模型中创建步骤时实例化对象的最佳方法是什么?
有谁知道Cucumber脚本是如何编译的吗?
我想如果一切都已构建并遵守,下面的第二个或第三个选项可能是最好的方法。
如果只编译与正在执行的测试相关的步骤,那么我想这将是第一个。
我有以下示例:
private LoginPage loginPage = new LoginPage(driver);
@Given("^I have logged in as customer with two stored cards$")
public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable {
new HomePage(driver).clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d1a5b4a2a591a5b4a2a5ffb2bebc" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^I have logged in as customer with expired card$")
public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable {
new HomePage(driver).clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99edfceaeda9abd9edfceaedb7faf6f4" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^the user logged in as customer with three stored cards$")
public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable {
new HomePage(driver).clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0175647275313241756472752f626e6c" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
以上所有步骤(以及同一 LoginSteps.java 类中的更多步骤)均以
开头new HomePage(driver).clickLoginButton();
这是最好的方法,还是创建单个实例更好?
private LoginPage loginPage = new LoginPage(driver);
private HomePage homePage = new HomePage(driver);
@Given("^I have logged in as customer with two stored cards$")
public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="344051474074405147401a575b59" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^I have logged in as customer with expired card$")
public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="89fdecfafdb9bbc9fdecfafda7eae6e4" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^the user logged in as customer with three stored cards$")
public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4236273136727102362731366c212d2f" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
或者在 LoginSteps 扩展的“baseSteps”类中实例化所有页面是否会更有效?
public class LoginSteps extends BaseSteps {
@Given("^I have logged in as customer with two stored cards$")
public void iHaveLoggedInAsCustomerWithTwoStoredCards() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="710514020531051402055f121e1c" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^I have logged in as customer with expired card$")
public void iHaveLoggedInAsCustomerWithExpiredCard() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d79687e793d3f4d79687e79236e6260" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
@Given("^the user logged in as customer with three stored cards$")
public void theUserLoggedInAsCustomerWithThreeStoredCards() throws Throwable {
homePage.clickLoginButton();
loginPage.enterEmail("<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2c58495f581c1f6c58495f58024f4341" rel="noreferrer noopener nofollow">[email protected]</a>");
loginPage.enterPassword("Password1");
loginPage.clickLogin();
}
}
public baseSteps {
protected LoginPage loginPage = new LoginPage(driver);
protected HomePage homePage = new HomePage(driver);
}
最佳答案
我会进行基准测试,看看哪个版本最有效。
Cucumber 代码的编译方式取决于您的构建工具。我假设一切都在使用之前进行了编译。但是,在执行一段时间后进行 self 优化的 JVM 可能在一段时间后表现会有所不同。
我真的很想听听您为什么要考虑这个级别的性能?您是否希望一次执行此代码几个小时?我的大多数场景都很短,在第二个尺度上执行,然后就被扔掉了。
关于Java 页面对象模型最佳实践 - 新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41572760/