gpt4 book ai didi

ruby-on-rails - Capybara:ElementNotFound:无法在多部分表单上找到字段名称

转载 作者:行者123 更新时间:2023-12-04 21:42:43 27 4
gpt4 key购买 nike

我在尝试使用此功能规范时难以隔离问题。

require 'spec_helper'

feature 'Add Employee', type: :feature do
scenario 'with valid information' do
# visit setup_add_employees_path
visit '/setup/add_employees'
# save_and_open_page
fill_in "First Name", with: 'Test'
fill_in 'Last Name', with: 'Employee'
fill_in 'Email', with: 'testemployee@example.com'
# fill_in , with: 'testemployee@example.com'

# expect(page).to find_field('First Name').value
end
end

这是多部分表单的第 2 步,我已经编写了第一步的规范并且工作正常。但是,在此规范中,对表单字段使用 fill_in 不会。

这是我与此规范相关的文件:
# add_employees.html.haml

= render "partials/nav_left_setup"
- model_class = Invitation.new.class
#alert_message
.page-header
%h1 Invite Your Employees
%p.lead Now it's time to add your employees to HuddleHR. We'll send an email to your employees when setup is complete. Don't worry, the email will include instructions on how to setup their account and update their personal information.
%p.lead
If you like, you can import your employee list from an
= succeed "." do
%a#show_import_form{ href: "#" } Excel file

= render "partials/setup_import_employees"

= nested_form_for @account, :html => {:class => "invitation"} do |f|
%br/
= f.fields_for :invitations, @invitations do |invitation_form|
= invitation_form.hidden_field :product_id, :value => "1"
= invitation_form.text_field :first_name, :class => "input-small", :placeholder => "First Name", :required => :true
= invitation_form.text_field :last_name, :class => "input-small", :placeholder => "Last Name", :required => :true
%span= invitation_form.email_field :email, :class => "text_field", :placeholder => "Email Address", :required => :true
= invitation_form.collection_select :team_id, @teams, :id, :name
- if invitation_form.object.new_record?
= hidden_field_tag :invitaion_new_record, "new record"
= link_to "Delete", "javascript:void(0);", :class => "btn btn-danger delete_invitation_row_button", :style => "margin-bottom: 12px"
- else
= link_to "Delete", invitation_form.object, :confirm => "Are you sure?", :method => :delete, :remote => true, :class => "btn btn-danger btn-delete destroy_duplicate_nested_form", :style => "margin-bottom: 12px"
= f.link_to_add raw("<i class=\"icon-plus-sign icon-white\"></i> Add An Employee"), :invitations, class: "btn btn-success"
.form-actions
= link_to "Back", @optional_step.prv_link, class: "btn"
= f.submit "Save & Continue", :class => "btn btn-primary"
= link_to "Skip This Step", @optional_step.next_link, class: "btn" if @optional_step.optional == true


# The accounts_controller's create method

def create # TODO we need to document this...
@account = Account.new(params[:account])

if @account.save
# Send the account setup email to the account creator
UserMailer.account_setup_email(current_user).deliver

current_user.add_role!(User::ROLES[0]) # asigning the role roster_admin
current_user.add_role!(User::ROLES[3]) # asigning the role employee

# Sign the account up for Roster and create some inital records like:
# Register Roster as a product the account has subscribed to.
AccountProduct.create!(:account_id => @account.id, :product_id => Product.where(:name => "Roster").first.id)

# Create the account holder's profile
Profile.create!(:user_id => current_user.id, :first_name => @account.account_owner_first_name_input, :last_name => @account.account_owner_last_name_input)

# Create their first default team so they have a place to keep people
Team.create!(name: "Example Team", description: "This is just a placeholder team. You can rename or delete it.", account_id: @account.id, manager_id: current_user.id)

# Create their first job description so they have a place to keep people
JobDescription.create!(title: "Example Job Description", description: "This is just a placeholder job description. You can rename or delete it.", account_id: @account.id)

# Create a first post for the company so they have something on their homepage...
Post.create!(title: "Welcome to HuddleHR", body: "The simple and easy way to manage employee information in the cloud. You can invite employees, setup your org chart, fill out your profile and more.", account_id: @account.id, author_id: current_user.id, scope_id: "1")

# Create the initial employment record
Employment.create!(:user_id => current_user.id, :team_id => Team.find_by_account_id(@account.id).id, :effective_date => Date.today, :comment => "Initial creation of HuddleHR account owner employment record.")

# Set the User.account_id to the created account.id
current_user.update_attributes!(:account_id => @account.id)

setup_steps = @account.product_setup_steps

current_step = ProductSetupStep.where("link =? AND product_id =?", URI(request.referer).path, 1).first # Getting the current step

if current_step
setup_steps << ProductSetupStep.where("link =? AND product_id =?", URI(request.referer).path, 1).first
setup_steps << ProductSetupStep.where("step_number =? AND product_id =?", 1, 1).first
redirect_to current_step.next_link, :notice => 'Your account was successfully created.' if current_step.next_link.present?
redirect_to account_path(@account), :notice => 'Your account was successfully created.' unless current_step.next_link.present?
else
redirect_to account_path(@account), :notice => 'Your account was successfully created.'
end

else
render :action => "new"
end
end
# the imacros file, which I'm told is similar to selenium

' Add Employee
TAG POS=1 TYPE=A ATTR=TXT:Add<SP>An<SP>Employee
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:edit_account_* ATTR=ID:account_invitations_attributes_*_first_name CONTENT=Test
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:edit_account_* ATTR=ID:account_invitations_attributes_*_last_name CONTENT=Employee{{!VAR1}}
TAG POS=1 TYPE=INPUT:EMAIL FORM=ID:edit_account_* ATTR=ID:account_invitations_attributes_*_email CONTENT=testemployee{{!VAR1}}@huddlehr.com
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:edit_account_* ATTR=NAME:commit
TAG POS=1 TYPE=INPUT:SUBMIT FORM=ID:edit_account_* ATTR=NAME:commit
TAG POS=1 TYPE=A ATTR=TXT:Send<SP>Invitations<SP>To<SP>These<SP>Employees
TAG POS=1 TYPE=A ATTR=TXT:Finish<SP>Setup
TAG POS=1 TYPE=A ATTR=TXT:Finish

如果我不得不猜测,我会说问题在于我没有背景块来模仿此表单的第 2 步将加载的内容。在第 1 步,后台块包含一个 sign_up_with(email, pass)。因此,如果我认为背景是 fill_in 找不到我的 form_field id 名称的原因是正确的,那么我需要在 step2 功能规范的背景块中设置什么?

顺便说一句,第 1 步是一个名为 create account 的规范,如下所示:
# create_account_spec.rb

require 'spec_helper'
# require 'ruby-debug'

feature 'Create Account', type: :feature do
background do
sign_up_with Faker::Internet.email, '1Password'
end

scenario 'Fill form data' do
# visit '/setup'
visit new_account_path
fill_in 'First Name', with: 'Test'
fill_in 'Last Name', with: 'Owner'
fill_in 'Company Name', with: 'Company'
fill_in :account_addresses_attributes_0_line_one, with: '133 Main St'
fill_in :account_addresses_attributes_0_city, with: 'Columbia'
select 'SC', from: 'State'
fill_in :account_addresses_attributes_0_zip, with: '11111'
fill_in :account_phone_numbers_attributes_0_number, with: '(111) 111-11111'
select '(GMT-05:00) Eastern Time (US & Canada)', from: 'Time zone'
click_button('Save & Continue')
end
end

我已阅读以下相关资源以更好地了解 Capybara 和集成测试:

Undefined method `within' using capybara and rspec

Capybara's README on github

Capybara::ElementNotFound, but it is there

rspec Test Result Capybara::ElementNotFound

Capybara::ElementNotFound: Error

How to solve a Capybara::ElementNotFound Error

最佳答案

好的,所以我理解的问题是我没有正确设置我的背景来模仿多表单集成规范的第 2 部分在站点中的位置。我通过使用 FactoryGirl 创建一个用户来解决这个问题,然后使用 Capybara 的 fill_in 和 user.email && user.password 而不是像上面看到的那样使用 faker。

这是我目前的规范:

# spec/features/add_employee_spec.rb
require 'spec_helper'

feature 'Add Employee', type: :feature do
background do
user = create :user
visit user_session_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Sign In'

expect(page).to have_content('Setup An Account')
end

scenario 'clicks Add A New Employee and fills out the form' do
account = create :account
save_and_open_page
visit setup_add_employees_path
fill_in 'first_name', with: 'Test'
fill_in 'Last Name', with: 'Employee'
fill_in 'Email', with: 'testemployee@example.com'
end
end

当使用 Faker 为注册生成不同的用户名时,我没有正确设置“背景”块,就好像我是第一次注册的用户一样。

如果还有什么我忽略的地方,或者可能有一些关于改进我的集成规范的其他提示,我期待着您的评论。

关于ruby-on-rails - Capybara:ElementNotFound:无法在多部分表单上找到字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22445115/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com