如何在不重复的情况下将“何时”和“与”用于同一功能

时间:2018-09-21 13:16:22

标签: selenium automation cucumber cucumberjs

我正在重构脚本,目前正在执行以下操作;

When("I click the button {string}", (buttonID, next) => {

    pageElement = driver.findElement(By.id(buttonID));
    driver.wait(until.elementIsVisible(pageElement), 10000);
    pageElement.click();
    next();
});

And("I click the button {string}", (buttonID, next) => {

    pageElement = driver.findElement(By.id(buttonID));
    driver.wait(until.elementIsVisible(pageElement), 10000);
    pageElement.click();
    next();
});

我这样做是出于可读性目的,我有一个“和”更易读的场景,还有一个“何时”更适用的场景。

我看过以下内容。

@Then("^(?:it's do something|it's do another thing)$");

允许将多个方案名称用于同一功能,但可悲的是,我正在寻找相反的情况。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我们正在使用Specflow,当我们需要使用与When And或然后相同的步骤时,我们只需执行以下操作:

[Given(@"I enter all required customer information")]
[When(@"I enter all required customer information")]
[Then(@"I enter all required customer information")]
public void GivenIEnterAllRequiredCustomerInformation()
{
   MyMethod();
}

因此,在您的情况下,请尝试以下操作:

When("I click the button {string}", And("I click the button {string}", (buttonID, next) => {
    pageElement = driver.findElement(By.id(buttonID));
    driver.wait(until.elementIsVisible(pageElement), 10000);
    pageElement.click();
    next();
});

答案 1 :(得分:2)

谢谢@IPoln​​ik,您的解决方案除了一部分之外是正确的,可以用逗号分隔“ When”和“ And”,如下所示。

 When ("I click the button {string}", And ("i click the button {string}"), (buttonID, next) => {

    pageElement = driver.findElement(By.id(buttonID));
    driver.wait(until.elementIsVisible(pageElement), 10000);
    pageElement.click();
    next();
});

如果没有您的建议,我将永远不会到达那里,所以非常感谢您,这也是为什么我说您解决了我的问题。

祝你有美好的一天,杰克。

编辑:我也发现这种语法也可以使用

   When ("I click the button {string}" | And ("i click the button {string}"), (buttonID, next) => {

    pageElement = driver.findElement(By.id(buttonID));
    driver.wait(until.elementIsVisible(pageElement), 10000);
    pageElement.click();
    next();
});

我相信这可能是更好的做法。