我刚刚开始使用带有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();
}
});
}