Tom
Tom

Reputation: 1105

Capybara Cucumber Find Field

I'm using Capybara with Cucumber.

The webpage I'm testing contains many email fields throughout but the ID's and labels for the input field change depending on which page you're on.

What I'm trying to do is create an generic reference to any email field so that one fill in method will work for all pages.

When inspecting the input fields, I can see they are of type='email

The full html:

<input id="privatekeeper_email_email" name="privatekeeper_email.email" value="" data-validity-message="Must be a valid email address" no_optional_label="true" type="email" autocomplete="off" maxlength="254">

In my block below you should be able to grasp what I'm tring to do:

email_fields = all('input[type="email"]')
fill_in(email_fields[0], with: text)
fill_in(email_fields[1], with: text)
end

When I run this, I get the following error:

Capybara::ElementNotFound: Unable to find field #<Capybara::Node::Element tag="input" path="/html/body/div[3]/div/div[2]/form/div/div[2]/div[6]/div/div[2]/div/div/div/div[2]/input">

Reading the Capybara docs, I can see that fill_in responds to ID, name or Label so my reference might not work. Is there anyway I could get this block to work?

Like I said, the Id's and labels are not consistent throughout the user journey

Upvotes: 0

Views: 302

Answers (1)

Thomas Walpole
Thomas Walpole

Reputation: 49950

Since you've already found the element you need to call #set on it instead of using fill_in

email_fields[0].set(text)

Upvotes: 1

Related Questions