Экранирование числа или строки в кавычках из инструкции Gherkin

Если у меня есть такое предложение внутри моего определения функции:

Then I can see the "/relative-url-path" page

Огурец наложит этот метод:

@When("^I can see the \"([^\"]*)\" page$")
public void I_open_the_page(String arg1) {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}

Если я хочу выделить относительную часть URL-адреса кавычками, как я могу заставить синтаксический анализатор корнишонов интерпретировать THEN close как «простую строку». Другими словами, я могу как-то избежать этого?

Тот же вопрос в случае, если у меня есть номер?


person Artem Oboturov    schedule 13.04.2012    source источник


Ответы (2)


Во-первых, я не думаю, что перед вашим «Когда» должен быть знак @, если вы используете Ruby для определения шагов. Это может вызвать у вас проблемы (я не знаю). Если вы не используете Ruby, было бы полезно знать, какой язык вы используете для своих определений шагов.

Я могу рассказать вам, что я сделал с путем к файлу в кавычках:

When I upload invoice "C:\Ruby193\automation\myfile.txt"

Затем я использовал этот код:

When /^I upload invoice "(.*)"$/ do |filename|
  @upload_invoice_page = UploadInvoicePage.new(@test_env)
  @upload_invoice_page.upload_file(filename, 'BIRD, INC.')
end

Следуя этому примеру, в Ruby я бы попробовал этот код для вашего шага:

When /^ can see the "(.*)" page$/

Ваш код выглядит как Java, поэтому он может выглядеть примерно так:

@When("^I can see the \"(.*)\" page$")

Вы можете поместить туда более сложное регулярное выражение, но, поскольку это шаг огурца, вам это действительно не нужно. Похоже, в настоящее время вы пытаетесь получить что-то, что не является двойной кавычкой. Вам не нужно этого делать, так как Regex уже ищет открытую и закрытую цитату.

Имейте в виду, что вы также можете полностью избавиться от кавычек:

Then I can see the /relative-url-path page

@When("^I can see the (.*) page$")

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

Чтобы сопоставить только числа, которые вы должны сделать:

Then I can see the 123456

@Then("^I can see the (\d*)$")

Я нашел Cucumber Regex Ричарда Лоуренса. Шпаргалка очень полезна. Там вы найдете большинство нужных вам шаблонов. Если вам нужны более сложные шаблоны, вы можете подумать, лучше ли вам выполнять эту оценку в коде определения шага.

person Doug Noel    schedule 16.04.2012
comment
Извините: я использовал Java add, не уточнял его в тегах. - person Artem Oboturov; 16.04.2012
comment
Вопрос был о возможности побега, а не об общем использовании огурца или огурца. - person Artem Oboturov; 16.04.2012
comment
Извините, я неправильно понял. Я думаю, вы задаете вопрос, специфичный для Java. Попробуйте следующее регулярное выражение: \"([^"]*)\" вместо \"([^\"]*)\". Вам не нужно включать обратную косую черту в Regex (по крайней мере, на основе моих тестов с Rubular), чтобы получить тот же результат, если только Java не удаляет цитату. - person Doug Noel; 16.04.2012
comment
Предложенный вами вариант будет ограничивать конец литерала String в Java. И, следовательно, он вообще не будет компилироваться. - person Artem Oboturov; 16.04.2012
comment
Есть ли причина, по которой это не сработает? @When("^I can see the \"(.*)\" page$") - person Doug Noel; 16.04.2012
comment
Этот захватит все имена страниц, которые я могу себе представить. Это не то, что я хочу. - person Artem Oboturov; 17.04.2012
comment
Он захватит все символы внутри кавычек. Именно то, что должно делать ваше другое регулярное выражение, за исключением того, что оно также будет захватывать кавычки. Можете ли вы дать более подробную информацию о том, что вы хотите исключить и включить в эти кавычки? - person Doug Noel; 17.04.2012
comment
под простой строкой я имею в виду использование регулярного выражения, которое будет именно фразой, а не какой-либо ее частью. - person Artem Oboturov; 17.04.2012
comment
давайте продолжим обсуждение в чате - person Doug Noel; 17.04.2012

Судя по обсуждению, похоже, вам нужна группа без захвата. Это позволит вам указать любой URL-адрес, но полностью проигнорировать его на фактическом этапе (т.е. он не передается в качестве параметра).

Помещение ?: в начале группы сделает ее незахватывающей группой.

@When("^I can see the \"(?:[^\"]*)\" page$")
public void I_open_the_page() {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}
person Justin Ko    schedule 19.04.2012
comment
Моя точка зрения ДЕЙСТВИТЕЛЬНО проста: я хочу, чтобы выражение корнишона было таким, как Учитывая, что я могу видеть страницу something.com и иметь такой метод, как public void I_can_open_something_page. С другой стороны, также хотелось бы иметь выражение Учитывая, что я вижу страницу anotherpage.com, и она должна быть перенаправлена ​​на другой метод. - person Artem Oboturov; 20.04.2012