Commit a9f6d55e authored by Mark Lapierre's avatar Mark Lapierre

Retry registration 3 times before failing

Registration intermittently fails without an obvious cause.
The action to click the button seems to move focus to the right button
but nothing happens.
This change attempts to retry the action under the assumption that
Capybara or Chrome is misbehaving.
It also updates the selectors for the sign up page.
parent 1c51a6be
......@@ -5,22 +5,22 @@
= devise_error_messages!
.form-group
= f.label :name, 'Full name', class: 'label-bold'
= f.text_field :name, class: "form-control top", required: true, title: "This field is required."
= f.text_field :name, class: "form-control top qa-new-user-name", required: true, title: "This field is required."
.username.form-group
= f.label :username, class: 'label-bold'
= f.text_field :username, class: "form-control middle", pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, required: true, title: 'Please create a username with only alphanumeric characters.'
= f.text_field :username, class: "form-control middle qa-new-user-username", pattern: Gitlab::PathRegex::NAMESPACE_FORMAT_REGEX_JS, required: true, title: 'Please create a username with only alphanumeric characters.'
%p.validation-error.hide Username is already taken.
%p.validation-success.hide Username is available.
%p.validation-pending.hide Checking username availability...
.form-group
= f.label :email, class: 'label-bold'
= f.email_field :email, class: "form-control middle", required: true, title: "Please provide a valid email address."
= f.email_field :email, class: "form-control middle qa-new-user-email", required: true, title: "Please provide a valid email address."
.form-group
= f.label :email_confirmation, class: 'label-bold'
= f.email_field :email_confirmation, class: "form-control middle", required: true, title: "Please retype the email address."
= f.email_field :email_confirmation, class: "form-control middle qa-new-user-email-confirmation", required: true, title: "Please retype the email address."
.form-group.append-bottom-20#password-strength
= f.label :password, class: 'label-bold'
= f.password_field :password, class: "form-control bottom", required: true, pattern: ".{#{@minimum_password_length},}", title: "Minimum length is #{@minimum_password_length} characters."
= f.password_field :password, class: "form-control bottom qa-new-user-password", required: true, pattern: ".{#{@minimum_password_length},}", title: "Minimum length is #{@minimum_password_length} characters."
%p.gl-field-hint.text-secondary Minimum length is #{@minimum_password_length} characters
- if Gitlab::CurrentSettings.current_application_settings.enforce_terms?
.form-group
......@@ -33,4 +33,4 @@
- if Gitlab::Recaptcha.enabled?
= recaptcha_tags
.submit-container
= f.submit "Register", class: "btn-register btn"
= f.submit "Register", class: "btn-register btn qa-new-user-register-button"
......@@ -32,6 +32,21 @@ module QA
false
end
def with_retry(max_attempts: 3, reload: false)
attempts = 0
while attempts < max_attempts
result = yield
return result if result
refresh if reload
attempts += 1
end
false
end
def scroll_to(selector, text: nil)
page.execute_script <<~JS
var elements = Array.from(document.querySelectorAll('#{selector}'));
......
......@@ -68,10 +68,6 @@ module QA
end
end
def assert_has_personal_area
raise "Failed to sign in" unless has_personal_area?
end
private
def within_top_menu
......
# frozen_string_literal: true
module QA
module Page
module Main
class SignUp < Page::Base
view 'app/views/devise/shared/_signup_box.html.haml' do
element :name, 'text_field :name'
element :username, 'text_field :username'
element :email_field, 'email_field :email'
element :email_confirmation, 'email_field :email_confirmation'
element :password, 'password_field :password'
element :register_button, 'submit "Register"'
element :new_user_name
element :new_user_username
element :new_user_email
element :new_user_email_confirmation
element :new_user_password
element :new_user_register_button
end
def sign_up!(user)
fill_in :new_user_name, with: user.name
fill_in :new_user_username, with: user.username
fill_in :new_user_email, with: user.email
fill_in :new_user_email_confirmation, with: user.email
fill_in :new_user_password, with: user.password
click_button 'Register'
fill_element :new_user_name, user.name
fill_element :new_user_username, user.username
fill_element :new_user_email, user.email
fill_element :new_user_email_confirmation, user.email
fill_element :new_user_password, user.password
signed_in = with_retry do
click_element :new_user_register_button
Page::Main::Menu.act { has_personal_area? }
end
Page::Main::Menu.act { assert_has_personal_area }
raise "Failed to register and sign in" unless signed_in
end
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment