如何在Jbehave中为不同的页面对象实现相同的故事文本

时间:2012-04-27 00:43:47

标签: webdriver jbehave

我刚刚开始使用带有WebDriver的Jbehave Web,并想知道是否可以将相同的文本步骤应用于不同的步骤方法。

比如说你有以下两个场景

情景1

  • 鉴于我正在购买物业页面
  • 点击搜索
  • 然后我应该看到包含所有要购买的属性的结果页面

情景2

  • 鉴于我正在出租物业页面
  • 点击搜索
  • 然后我应该看到包含所有待租房产的结果页面

如果我使用页面对象模式实现这一点,我将有一个页面对象,例如buyProperties,同样对于出租属性,一个页面对象在rentProperties(以及结果页面对象)的行中被称为某个东西。

在这两种情况下,都会单击搜索按钮/链接,因此步骤文本是相同的。但是,实际上它们位于不同的页面(和页面对象)上。

我如何实现Jbehave,以便在租赁场景中它知道调用步骤方法实现单击rentProperties页面上的搜索按钮,并且对于购买场景,它知道调用步骤方法实现单击buyProperties上的搜索按钮网页?

2 个答案:

答案 0 :(得分:0)

您的步骤类将有两个方法 - 一个注释@Given(“... rent”)和一个注释@Given(“... buy”)。每种方法都是自己做的。如果“租”和“买”是传入的变量,那么根据该变量的值做不同的事情。我不确定我得到的问题......抱歉。

答案 1 :(得分:0)

尝试

@Given ("I am on the properties to $action page")
public void given_i_am_on_the_properties_action_page(@Named("action") String action) {
    if (action.equalsIgnoreCase("Buy") {
        do something;
    }
    if (action.equalsIgnoreCase("Rent") {
        do something;
    }
}

'做某事'可能是为后续步骤设置页面对象。 同样,您可以为@Then步骤使用相同的方法和变量。

我使用类似于选择菜单项的东西,并等待页面加载,然后再进行下一步

@When ("I select menu item $menuItem")
public static void when_i_select_menu_item(@Named("menuItem") String menuItem) {
    String item = "";
    String waitFor = "";
    if (menuItem.equalsIgnoreCase("admin")) {
        item = "Admin";
        waitFor = "admin_page";
    }
    if (menuItem.equalsIgnoreCase("home")) {
        item = "Home";
        waitFor = "home_page";
    }
    if (menuItem.equalsIgnoreCase("search")) {
        item = "Search";
        waitFor = "search_page";
    }

    driver.findElement(By.id(item)).click();
    (new WebDriverWait(driver, timeout)).until(new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver d) {
            return element.findElement(By.id(waitFor)).isDisplayed() || d.findElement(By.id(waitFor)).isEnabled();
        }
    });
}