diff --git a/app/views/layouts/devise.html.haml b/app/views/layouts/devise.html.haml index 4f8db74382f69e1ca22a46bd12dd33fd3f8a304b..6003d973c882456abe5121cb21016a1c09f9272d 100644 --- a/app/views/layouts/devise.html.haml +++ b/app/views/layouts/devise.html.haml @@ -1,7 +1,7 @@ !!! 5 %html.devise-layout-html{ class: system_message_class } = render "layouts/head" - %body.ui-indigo.login-page.application.navless{ data: { page: body_data_page } } + %body.ui-indigo.login-page.application.navless.qa-login-page{ data: { page: body_data_page } } .page-wrap = render "layouts/header/empty" .login-page-broadcast diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index d6b763ed5fc153a81419395ee79df20f84c575b1..615d17bbcfe43f180d499d96ff3ce7b5f3eeabcf 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -108,8 +108,8 @@ module QA element.select value.to_s.capitalize end - def has_element?(name) - has_css?(element_selector_css(name)) + def has_element?(name, wait: Capybara.default_max_wait_time) + has_css?(element_selector_css(name), wait: wait) end def has_no_text?(text) diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index 97ffe0e5716a893e7b0faecc7a0bd68c6cb45ada..cb83ace20b6aaca6a06b04ffd77d8840489576a2 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -35,13 +35,21 @@ module QA element :saml_login_button end + view 'app/views/layouts/devise.html.haml' do + element :login_page + end + def initialize # The login page is usually the entry point for all the scenarios so # we need to wait for the instance to start. That said, in some cases # we are already logged-in so we check both cases here. + # Check if we're already logged in first. If we don't then we have to + # wait 10 seconds for the check for the login page to fail every time + # we use this class when we're already logged in (E.g., whenever we + # create a personal access token to use for API access). wait(max: 500) do - has_css?('.login-page') || - Page::Main::Menu.act { has_personal_area?(wait: 0) } + Page::Main::Menu.act { has_personal_area?(wait: 0) } || + has_element?(:login_page) end end diff --git a/qa/qa/page/main/menu.rb b/qa/qa/page/main/menu.rb index cc2724618e979f4f279975fe2eebfa1ba6f0887a..6804cc8fb20a9bd77e2c6de59b6bf4e60f178d8e 100644 --- a/qa/qa/page/main/menu.rb +++ b/qa/qa/page/main/menu.rb @@ -63,15 +63,11 @@ module QA end def has_personal_area?(wait: Capybara.default_max_wait_time) - using_wait_time(wait) do - page.has_selector?(element_selector_css(:user_avatar)) - end + has_element?(:user_avatar, wait: wait) end def has_admin_area_link?(wait: Capybara.default_max_wait_time) - using_wait_time(wait) do - page.has_selector?(element_selector_css(:admin_area_link)) - end + has_element?(:admin_area_link, wait: wait) end private diff --git a/qa/qa/support/page/logging.rb b/qa/qa/support/page/logging.rb index 5765a8041cc0e4baf0bb274a224379ef3841f6aa..df3b794b14b74dc25429dd59fb32b6b4206e9a84 100644 --- a/qa/qa/support/page/logging.rb +++ b/qa/qa/support/page/logging.rb @@ -77,7 +77,7 @@ module QA super end - def has_element?(name) + def has_element?(name, wait: Capybara.default_max_wait_time) found = super log("has_element? :#{name} returned #{found}")