如何在 Jbebehavior 中将相同的故事文本实现到不同的页面对象



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

例如,假设您有以下两种情况

场景 1

  • 鉴于我在要购买的房产页面上
  • 当我单击"搜索"时
  • 然后我应该看到包含所有要购买的房产的结果页面

场景 2

  • 鉴于我在出租物业页面上
  • 当我单击"搜索"时
  • 然后我应该看到包含所有出租房产的结果页面

如果我使用页面对象模式实现这一点,我会有一个页面对象,例如 buyProperties,同样,对于租赁属性,一个页面对象称为类似 rentProperties 的东西(以及结果页面对象)。

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

我如何实现 Jbehave,以便对于租赁场景,它知道调用实现单击租金属性页面上的搜索按钮的步骤方法,

对于购买场景,它知道调用实现单击购买属性页面上的搜索按钮的步骤方法?

您的步骤类将有两个方法 - 一个用 @Given("...租金")和一个带注释的@Given("...买")。 每种方法都有自己的事情。 如果"rent"和"buy"是一个传入的变量,那么根据该变量的值做不同的事情。 我不确定我是否理解这个问题...不好意思。

尝试

@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();
        }
    });
}

最新更新