Как использовать «Когда» и «И» для одной и той же функции, не дублируя ее - PullRequest
0 голосов
/ 21 сентября 2018

Я выполняю рефакторинг своего сценария и в настоящее время делаю следующее:

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 голосов
/ 21 сентября 2018

Спасибо @IPolnik, ваше решение было исправлено отдельно от одной части, для разделения «Когда» и «И» вы используете запятую, показанную ниже.

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

Без вашего предложения я бы никогда не сталЯ получил там, хотя, так что большое спасибо, и именно поэтому я сказал, что вы решили мой вопрос.

Хорошего дня, Джек.

edit: Я также обнаружил, что этот синтаксис также работает

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

Я считаю, что, вероятно, будет лучше практиковать.

0 голосов
/ 21 сентября 2018

Мы работаем с 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();
});
...