黄瓜Jvm之前的所有情景

时间:2016-02-17 13:36:00

标签: selenium jvm cucumber

在Cucumber jvm中,如果我们有多个场景,并且有任何选项可以在一个实例中执行所有场景。我的意思是打开浏览器一次并执行所有方案,而不是为每个方案打开和关闭浏览器。

我在钩子文件中尝试使用BeforeAll但是它抛出了Nullpointer异常。

这是我的代码。我需要转到URL,使用凭据登录并在同一个实例中执行这两个场景。

MaharaTest.feature

Feature: MaharaTest
  Scenario: Creating Profile
    Given I navigate to Content Tab
    And I enter firstname
    And I enter lastname
    And I click save profile
    Then I see profile saved successful message
  Scenario: Creating Profile
    Given I navigate to Portfolio Tab
    And I click create page
    And I enter page title
    And I click save page
    Then I see page saved successful message

MaharaTest.java

public class MaharaTest {
    public WebDriver driver;
    public MaharaTest() {
        driver = Hooks.driver;
    }

    @Given("^I navigate to Content Tab$")
    public void navigate_to_content() {
        driver.findElement(By.linkText("Content")).click();
    }

    @And("^I enter firstname$")
    public void enter_firstname() {
        driver.findElement(By.id("profileform_firstname")).clear();
        driver.findElement(By.id("profileform_firstname")).sendKeys("Test");
    }

    @And("^I enter lastname$")
    public void enter_lastname() {
        driver.findElement(By.id("profileform_lastname")).clear();
        driver.findElement(By.id("profileform_lastname")).sendKeys("User");
    }

    @And("^I click save profile$")
    public void click_save() {
        driver.findElement(By.id("profileform_submit")).click();
    }

    @Then("^I see profile saved successful message$")
    public void profile_success_message() {
        assertEquals("Profile saved successfully",
                driver.findElement(By.className("alert-success")).getText());
    }

    @Given("^I navigate to Portfolio Tab$")
    public void navigate_to_portfolio() {
        driver.findElement(By.linkText("Portfolio")).click();
    }

    @And("^I click create page$")
    public void create_page() {
        driver.findElement(By.id("createview_submit")).click();
    }

    @And("^I enter page title$")
    public void enter_page_title() {
        driver.findElement(By.id("editview_title")).clear();
        driver.findElement(By.id("editview_title")).sendKeys("Test_Profile");
    }

    @And("^I click save page$")
    public void click_save_page() {
        driver.findElement(By.id("editview_submit")).click();
    }

    @Then("^I see page saved successful message$")
    public void page_success_message() {
        assertEquals("Page saved successfully",
                driver.findElement(By.className("alert-success")).getText());
    }
}

Hooks.java

public class Hooks {
    public static WebDriver driver;
    @Before
    public void openBrowser() throws MalformedURLException {
        System.out.println("Called openBrowser");
        driver = new FirefoxDriver();
        driver.manage().window().maximize();
        driver.get("http://demo.mahara.org/");
        driver.findElement(By.id("login_login_username")).sendKeys("student1");
        driver.findElement(By.id("login_login_password")).sendKeys("Testing1");
        driver.findElement(By.id("login_submit")).click();
    }

    @After
    public void embedScreenshot(Scenario scenario) {

        if (scenario.isFailed()) {
            try {
                scenario.write("Current Page URL is " + driver.getCurrentUrl());
                byte[] screenshot = ((TakesScreenshot) driver)
                        .getScreenshotAs(OutputType.BYTES);
                scenario.embed(screenshot, "image/png");
            } catch (WebDriverException somePlatformsDontSupportScreenshots) {
                System.err.println(somePlatformsDontSupportScreenshots
                        .getMessage());
            }

        }
        driver.quit();
    }
}

1 个答案:

答案 0 :(得分:0)

首先,你似乎想要在这里做两件事

创建个人资料 创建投资组合页面

我假设除非您创建了个人资料,否则无法创建投资组合页面。

一种方法是:

Scenario: Create a profile
  When I create a profile
  Then I should see my new profile

这应该足以推动创建配置文件的开发。一旦你可以创建一个配置文件,你就可以

Scenario: Create portfolio page
  Given I have a profile
  When I create a portfolio page
  Then I should see my new portfolio page

您可以通过两种方式实施Given I have a profile

  1. 执行您使用的When you created a profile完全相同的代码,即通过用户界面。

  2. 找到一种更快的方法来创建相同的效果(通常绕过用户界面)

  3. 如果你想要一套快速的功能,你将采用第二种方法。

    有些注意事项:

    没有必要详细说明您在场景中如何创建个人资料/页面。场景应该是关于什么以及为什么不是如何,所以没有点击按钮或填写字段(留下步骤defs)

    因为我们写得非常快(鉴于我有个人资料),我们可以大量使用它并丢失方案,而不用担心需要多长时间。