我如何将 'When' 和 'And' 用于同一个函数而不重复它

How do i use both 'When' and 'And' for the same function without duplicating it

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

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

我这样做是出于可读性的目的,我有一个 'And' 更具可读性的场景以及 'When' 更适用的场景。

我看过以下..

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

这允许将多个方案名称用于同一功能,但遗憾的是,我正在寻找相反的名称。

如有任何帮助,我们将不胜感激。

我们正在使用 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();
});

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

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