我刚刚开始使用带有WebDriver的Jbehave Web,并想知道是否可以将相同的文本步骤应用于不同的步骤方法。
比如说你有以下两个场景
情景1
情景2
如果我使用页面对象模式实现这一点,我将有一个页面对象,例如buyProperties,同样对于出租属性,一个页面对象在rentProperties(以及结果页面对象)的行中被称为某个东西。
在这两种情况下,都会单击搜索按钮/链接,因此步骤文本是相同的。但是,实际上它们位于不同的页面(和页面对象)上。
我如何实现Jbehave,以便在租赁场景中它知道调用步骤方法实现单击rentProperties页面上的搜索按钮,并且对于购买场景,它知道调用步骤方法实现单击buyProperties上的搜索按钮网页?
答案 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();
}
});
}