Передача параметра в "Примеры:" таблицы "Схема сценария:" в файле объектов

Здесь, как вы можете видеть, я пытаюсь получить значение из .yml файл находится в config/environments в Examples: Таблица.

Но вместо получения он отправляет значение как есть?

Можно ли передать параметр, как это? Если да, то как?

Если нет, какая особенность / концепция Ruby или Cucumber не позволяет пользователю сделать это и почему?

Feature: Verify login of all test users
I want to verify all test users can login.
  Scenario Outline: Login as different users on the website
    Given I am on login page
    When I enter "<username>" and password
    Then I click Login button
    And I see "<user>" successfully logged in
    Examples:
    |user|username|
    |testuser1|#{FigNewton.test1_email}|
    |testuser2|FigNewton.test2_email|

3 ответа

Решение

Ответ на query1: Вы можете параметризовать через Examples: таблица, но не передавая значение напрямую FigNewton gem потому что это .feature файл не рубин .rb файл.

Ответ на query2: Как вы это делаете: параметризовать и зацикливать его на имени пользователя и на вас steps definition упомянуть, что делать, когда определенное имя пользователя найдено. Этим вы можете легко параметризовать.

  1. Примеры:

    |user|username|
    |testuser1|test1|
    |testuser2|test2|
    
  2. Определение шага

    When(/^I enter "([^"]*)" and password$/) do |username|
    case username
    when 'test1'
      on(LoginPage).user_email = FigNewton.test1_email
    when 'test'
      on(LoginPage).user_email = FigNewton.test2_email
    end
    ....
    ....
    end
    

Прежде всего, это довольно плохая особенность, лучше было бы

Scenario: Test Users can login
   Given there are some test users
   When the test users login
   Then all test users should be logged in

или что-то типа того. Функции для определения того, что вы хотите сделать и почему, а не как вы делаете вещи.

Если вы делаете выше, тогда все программирование будет выполнено в определениях шагов. Это позволит вам делать все, что вы хотите.

Вы можете реализовать это довольно легко, например,

Given 'there are some test users' do
  @test_users = create_test_users
end

When 'the test users login' do
  @login_results = login_each(@test_users)
end

Then 'all test users should be logged in' do
  expect(check_for_errors(@login_results).count).to eql 0
end

then implement the methods you need in a step helper e.g

module TestUsersLoginStepHelper
  def create_test_users
    ...

  def login_each(users)
    users.each do 
      ...
  ...
end
World TestUsersLoginStepHelper

Поместив всю работу в определения шагов, вы значительно облегчите себе жизнь, поскольку вы можете использовать всю мощь рубина, чтобы делать то, что вам нужно

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

Файл функции: контрольный пример

Схема сценария: Вход в приложение

Когда я ввожу "имя пользователя>" и "пароль>"

Затем я нажимаю кнопку входа

И я вижу, что пользователь успешно вошел в систему

Примеры:

| Имя пользователя | пароль |

| Abc@gmail.com| test1234!|

| Abc@yahoo.com| test1234!|


Определение шага:

Когда (/^ я ввожу "([^"]) "и" ([^ "])" $/) do | имя пользователя, пароль |

спать 20

on (Логин).email_edit_text_element.send_keys имя пользователя on (Логин).password_edit_text_element.send_keys пароль

конец

Затем (/^ Я нажимаю кнопку входа $/) сделать сон 20

на (Вход).login_button_element.click

конец

Затем (/^ Я вижу, что пользователь успешно вошел в $/) сделать

ожидать (on (логин).account_bg_cover_element.displayed?).to be_truthy

ставитконец успешной регистрации

В файле ruby ​​вы создали методы, которые вы вызываете в определении шага. Это будет работать. убедитесь, что имя параметра вы передаете.

Другие вопросы по тегам