diff options
Diffstat (limited to 'qa/qa/page')
-rw-r--r-- | qa/qa/page/base.rb | 19 | ||||
-rw-r--r-- | qa/qa/page/component/blob_content.rb | 11 | ||||
-rw-r--r-- | qa/qa/page/component/new_snippet.rb | 3 | ||||
-rw-r--r-- | qa/qa/page/component/snippet.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/dashboard/snippet/edit.rb | 3 | ||||
-rw-r--r-- | qa/qa/page/file/form.rb | 3 | ||||
-rw-r--r-- | qa/qa/page/group/settings/group_deploy_tokens.rb | 8 | ||||
-rw-r--r-- | qa/qa/page/main/login.rb | 12 | ||||
-rw-r--r-- | qa/qa/page/merge_request/index.rb | 17 | ||||
-rw-r--r-- | qa/qa/page/merge_request/new.rb | 15 | ||||
-rw-r--r-- | qa/qa/page/merge_request/show.rb | 9 | ||||
-rw-r--r-- | qa/qa/page/project/pipeline/new.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/project/pipeline/show.rb | 6 | ||||
-rw-r--r-- | qa/qa/page/project/pipeline_editor/show.rb | 30 | ||||
-rw-r--r-- | qa/qa/page/project/settings/ci_cd.rb | 7 | ||||
-rw-r--r-- | qa/qa/page/project/settings/deploy_tokens.rb | 24 | ||||
-rw-r--r-- | qa/qa/page/project/settings/general_pipelines.rb | 23 | ||||
-rw-r--r-- | qa/qa/page/project/settings/merge_request.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/project/settings/services/prometheus.rb | 2 | ||||
-rw-r--r-- | qa/qa/page/project/show.rb | 6 |
20 files changed, 140 insertions, 68 deletions
diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index 83db8bc0fd6..248c5f38438 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -218,6 +218,15 @@ module QA page.validate_elements_present! if page end + # Uses capybara to locate and click an element instead of `click_element`. + # This can be used when it's not possible to add a QA selector but we still want to log the click + # + # @param [String] method the capybara method to use + # @param [String] locator the selector used to find the element + def click_via_capybara(method, locator) + page.public_send(method, locator) + end + def fill_element(name, content) find_element(name).set(content) end @@ -452,7 +461,7 @@ module QA click_by_js ? page.execute_script("arguments[0].click();", box) : box.click end - def feature_flag_controlled_element(feature_flag, element_when_flag_enabled, element_when_flag_disabled) + def feature_flag_controlled_element(feature_flag, element_when_flag_enabled, element_when_flag_disabled, visibility = true) # Feature flags can change the UI elements shown, but we need admin access to get feature flag values, which # prevents us running the tests on production. Instead we detect the UI element that should be shown when the # feature flag is enabled and otherwise use the element that should be displayed when the feature flag is @@ -463,12 +472,12 @@ module QA # load and render the UI wait_for_requests - return element_when_flag_enabled if has_element?(element_when_flag_enabled, wait: 1) - return element_when_flag_disabled if has_element?(element_when_flag_disabled, wait: 1) + return element_when_flag_enabled if has_element?(element_when_flag_enabled, wait: 1, visible: visibility) + return element_when_flag_disabled if has_element?(element_when_flag_disabled, wait: 1, visibile: visibility) # Check both options again, this time waiting for the default duration - return element_when_flag_enabled if has_element?(element_when_flag_enabled) - return element_when_flag_disabled if has_element?(element_when_flag_disabled) + return element_when_flag_enabled if has_element?(element_when_flag_enabled, visible: visibility) + return element_when_flag_disabled if has_element?(element_when_flag_disabled, visible: visibility) raise ElementNotFound, "Could not find the expected element as #{element_when_flag_enabled} or #{element_when_flag_disabled}." \ diff --git a/qa/qa/page/component/blob_content.rb b/qa/qa/page/component/blob_content.rb index ce743b24dda..c2a1687ccfc 100644 --- a/qa/qa/page/component/blob_content.rb +++ b/qa/qa/page/component/blob_content.rb @@ -63,6 +63,17 @@ module QA end end + def has_normalized_ws_text?(text, wait: Capybara.default_max_wait_time) + if has_element?(:blob_viewer_file_content, wait: 1) + # The blob viewer renders line numbers and whitespace in a way that doesn't match the source file + # This isn't a visual validation test, so we ignore line numbers and whitespace + find_element(:blob_viewer_file_content, wait: 0).text.gsub(/^\d+\s|\s*/, '') + .start_with?(text.gsub(/\s*/, '')) + else + has_text?(text.gsub(/\s+/, " "), wait: wait) + end + end + def click_copy_file_contents(file_number = nil) within_file_by_number(:default_actions_container, file_number) { click_element(:copy_contents_button) } end diff --git a/qa/qa/page/component/new_snippet.rb b/qa/qa/page/component/new_snippet.rb index 6ccf8a4043e..9c4408e36e4 100644 --- a/qa/qa/page/component/new_snippet.rb +++ b/qa/qa/page/component/new_snippet.rb @@ -76,8 +76,7 @@ module QA end def click_create_snippet_button - wait_until(reload: false) { !find_element(:submit_button).disabled? } - click_element(:submit_button) + click_element_coordinates(:submit_button) wait_until(reload: false) do has_no_element?(:snippet_title_field) end diff --git a/qa/qa/page/component/snippet.rb b/qa/qa/page/component/snippet.rb index a8ae706858e..47d32ae8225 100644 --- a/qa/qa/page/component/snippet.rb +++ b/qa/qa/page/component/snippet.rb @@ -82,7 +82,7 @@ module QA base.view 'app/views/layouts/nav/_breadcrumbs.html.haml' do element :breadcrumb_links_content - element :breadcrumb_sub_title_content + element :breadcrumb_current_link end end @@ -257,7 +257,7 @@ module QA def snippet_id within_element(:breadcrumb_links_content) do - find_element(:breadcrumb_sub_title_content).text.delete_prefix('$') + find_element(:breadcrumb_current_link).text.delete_prefix('$') end end end diff --git a/qa/qa/page/dashboard/snippet/edit.rb b/qa/qa/page/dashboard/snippet/edit.rb index d84a053591c..8af3eb5693c 100644 --- a/qa/qa/page/dashboard/snippet/edit.rb +++ b/qa/qa/page/dashboard/snippet/edit.rb @@ -63,8 +63,7 @@ module QA end def save_changes - wait_until(reload: false) { !find_element(:submit_button).disabled? } - click_element(:submit_button) + click_element_coordinates(:submit_button) wait_until(reload: false) do has_no_element?(:file_name_field) end diff --git a/qa/qa/page/file/form.rb b/qa/qa/page/file/form.rb index a6251f185f9..bb8934db498 100644 --- a/qa/qa/page/file/form.rb +++ b/qa/qa/page/file/form.rb @@ -4,8 +4,9 @@ module QA module Page module File class Form < Page::Base - include Shared::CommitMessage include Page::Component::DropdownFilter + include Page::Component::BlobContent + include Shared::CommitMessage include Shared::CommitButton include Shared::Editor diff --git a/qa/qa/page/group/settings/group_deploy_tokens.rb b/qa/qa/page/group/settings/group_deploy_tokens.rb index 65ee3fc72eb..7d908f473de 100644 --- a/qa/qa/page/group/settings/group_deploy_tokens.rb +++ b/qa/qa/page/group/settings/group_deploy_tokens.rb @@ -30,10 +30,10 @@ module QA end def fill_scopes(read_repository: false, read_registry: false, read_package_registry: false, write_package_registry: false ) - check_element(:deploy_token_read_repository_checkbox) if read_repository - check_element(:deploy_token_read_package_registry_checkbox) if read_package_registry - check_element(:deploy_token_read_registry_checkbox) if read_registry - check_element(:deploy_token_write_package_registry_checkbox) if write_package_registry + check_element(:deploy_token_read_repository_checkbox, true) if read_repository + check_element(:deploy_token_read_package_registry_checkbox, true) if read_package_registry + check_element(:deploy_token_read_registry_checkbox, true) if read_registry + check_element(:deploy_token_write_package_registry_checkbox, true) if write_package_registry end def add_token diff --git a/qa/qa/page/main/login.rb b/qa/qa/page/main/login.rb index d8b7bb90437..f3ee627c41e 100644 --- a/qa/qa/page/main/login.rb +++ b/qa/qa/page/main/login.rb @@ -30,9 +30,8 @@ module QA element :register_tab end - view 'app/views/devise/shared/_tabs_normal.html.haml' do + view 'app/views/devise/shared/_tab_single.html.haml' do element :sign_in_tab - element :register_tab end view 'app/helpers/auth_helper.rb' do @@ -134,6 +133,14 @@ module QA has_css?('[name="arkose_labs_token"][value]', visible: false) end + def has_accept_all_cookies_button? + has_button?('Accept All Cookies') + end + + def click_accept_all_cookies + click_button('Accept All Cookies') + end + def switch_to_sign_in_tab click_element :sign_in_tab end @@ -180,6 +187,7 @@ module QA fill_element :password_field, user.password if Runtime::Env.running_on_dot_com? + click_accept_all_cookies if has_accept_all_cookies_button? # Arkose only appears in staging.gitlab.com, gitlab.com, etc... # Wait until the ArkoseLabs challenge has initialized diff --git a/qa/qa/page/merge_request/index.rb b/qa/qa/page/merge_request/index.rb new file mode 100644 index 00000000000..ae024c16566 --- /dev/null +++ b/qa/qa/page/merge_request/index.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module QA + module Page + module MergeRequest + class Index < Page::Base + view 'app/views/shared/empty_states/_merge_requests.html.haml' do + element :new_merge_request_button + end + + def click_new_merge_request + click_element(:new_merge_request_button) + end + end + end + end +end diff --git a/qa/qa/page/merge_request/new.rb b/qa/qa/page/merge_request/new.rb index bcc60a8275d..b19a0d1a830 100644 --- a/qa/qa/page/merge_request/new.rb +++ b/qa/qa/page/merge_request/new.rb @@ -12,6 +12,11 @@ module QA element :issuable_form_description end + view 'app/views/projects/merge_requests/creations/_new_compare.html.haml' do + element :compare_branches_button + element :source_branch_dropdown + end + view 'app/views/projects/merge_requests/show.html.haml' do element :diffs_tab end @@ -27,6 +32,10 @@ module QA "to customize #{scanner_name} settings." end + def click_compare_branches_and_continue + click_element(:compare_branches_button) + end + def create_merge_request click_element(:issuable_create_button, Page::MergeRequest::Show) end @@ -43,6 +52,12 @@ module QA def has_file?(file_name) has_element?(:file_name_content, text: file_name) end + + def select_source_branch(branch) + click_element(:source_branch_dropdown) + fill_element(:dropdown_input_field, branch) + click_via_capybara(:click_on, branch) + end end end end diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index 689b3dba286..8f5ac62d127 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -49,8 +49,8 @@ module QA element :comment_now_button end - view 'app/assets/javascripts/vue_merge_request_widget/components/mr_widget_header.vue' do - element :download_dropdown + view 'app/views/projects/merge_requests/_code_dropdown.html.haml' do + element :mr_code_dropdown element :download_email_patches_menu_item element :download_plain_diff_menu_item element :open_in_web_ide_button @@ -343,12 +343,12 @@ module QA end def view_email_patches - click_element(:download_dropdown) + click_element(:mr_code_dropdown) visit_link_in_element(:download_email_patches_menu_item) end def view_plain_diff - click_element(:download_dropdown) + click_element(:mr_code_dropdown) visit_link_in_element(:download_plain_diff_menu_item) end @@ -359,6 +359,7 @@ module QA end def click_open_in_web_ide + click_element(:mr_code_dropdown) click_element(:open_in_web_ide_button) wait_for_requests end diff --git a/qa/qa/page/project/pipeline/new.rb b/qa/qa/page/project/pipeline/new.rb index 96a48e6240a..6cf5c3b1134 100644 --- a/qa/qa/page/project/pipeline/new.rb +++ b/qa/qa/page/project/pipeline/new.rb @@ -16,9 +16,9 @@ module QA click_element(:run_pipeline_button, Page::Project::Pipeline::Show) end - def add_variable(key, value, row_index: 0) + def configure_variable(key: nil, value: 'foo', row_index: 0) within_element_by_index(:ci_variable_row_container, row_index) do - fill_element(:ci_variable_key_field, key) + fill_element(:ci_variable_key_field, key) unless key.nil? fill_element(:ci_variable_value_field, value) end end diff --git a/qa/qa/page/project/pipeline/show.rb b/qa/qa/page/project/pipeline/show.rb index f499b748fb4..3f1cc2f1257 100644 --- a/qa/qa/page/project/pipeline/show.rb +++ b/qa/qa/page/project/pipeline/show.rb @@ -74,7 +74,11 @@ module QA end def has_linked_pipeline?(title: nil) - title ? find_linked_pipeline_by_title(title) : has_element?(:linked_pipeline_container) + # If the pipeline page has loaded linked pipelines should appear, but it can take a little while, + # especially on busier environments. + retry_until(reload: true, message: 'Waiting for linked pipeline to appear') do + title ? find_linked_pipeline_by_title(title) : has_element?(:linked_pipeline_container) + end end alias_method :has_child_pipeline?, :has_linked_pipeline? diff --git a/qa/qa/page/project/pipeline_editor/show.rb b/qa/qa/page/project/pipeline_editor/show.rb index 1a8e1e07994..197fd8fd9fb 100644 --- a/qa/qa/page/project/pipeline_editor/show.rb +++ b/qa/qa/page/project/pipeline_editor/show.rb @@ -5,6 +5,10 @@ module QA module Project module PipelineEditor class Show < QA::Page::Base + view 'app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue' do + element :pipeline_editor_app, required: true + end + view 'app/assets/javascripts/pipeline_editor/components/file_nav/branch_switcher.vue' do element :branch_selector_button, required: true element :branch_menu_item_button @@ -12,7 +16,7 @@ module QA end view 'app/assets/javascripts/pipeline_editor/components/commit/commit_form.vue' do - element :target_branch_field, required: true + element :source_branch_field, required: true end view 'app/assets/javascripts/pipeline_editor/components/editor/ci_editor_header.vue' do @@ -46,7 +50,23 @@ module QA element :file_editor_container end + view 'app/assets/javascripts/pipeline_editor/components/popovers/file_tree_popover.vue' do + element :file_tree_popover + end + + def initialize + dismiss_file_tree_popover if has_element?(:file_tree_popover) + + super + end + + def dismiss_file_tree_popover + # clicking outside the popover will dismiss it + click_element(:pipeline_editor_app) + end + def open_branch_selector_dropdown + dismiss_file_tree_popover if has_element?(:file_tree_popover, wait: 1) click_element(:branch_selector_button) end @@ -57,8 +77,8 @@ module QA wait_for_requests end - def target_branch_name - find_element(:target_branch_field).value + def source_branch_name + find_element(:source_branch_field).value end def editing_content @@ -76,8 +96,8 @@ module QA wait_for_requests end - def set_target_branch(name) - find_element(:target_branch_field).fill_in(with: name) + def set_source_branch(name) + find_element(:source_branch_field).fill_in(with: name) end def current_branch diff --git a/qa/qa/page/project/settings/ci_cd.rb b/qa/qa/page/project/settings/ci_cd.rb index 6df285cdd93..c5fad2efcfe 100644 --- a/qa/qa/page/project/settings/ci_cd.rb +++ b/qa/qa/page/project/settings/ci_cd.rb @@ -11,13 +11,6 @@ module QA element :autodevops_settings_content element :runners_settings_content element :variables_settings_content - element :general_pipelines_settings_content - end - - def expand_general_pipelines(&block) - expand_content(:general_pipelines_settings_content) do - Settings::GeneralPipelines.perform(&block) - end end def expand_runners_settings(&block) diff --git a/qa/qa/page/project/settings/deploy_tokens.rb b/qa/qa/page/project/settings/deploy_tokens.rb index 407d57bc54e..cf25f4a0568 100644 --- a/qa/qa/page/project/settings/deploy_tokens.rb +++ b/qa/qa/page/project/settings/deploy_tokens.rb @@ -31,11 +31,25 @@ module QA end def fill_scopes(scopes) - check_element(:deploy_token_read_repository_checkbox) if scopes.include? :read_repository - check_element(:deploy_token_read_package_registry_checkbox) if scopes.include? :read_package_registry - check_element(:deploy_token_write_package_registry_checkbox) if scopes.include? :write_package_registry - check_element(:deploy_token_read_registry_checkbox) if scopes.include? :read_registry - check_element(:deploy_token_write_registry_checkbox) if scopes.include? :write_registry + if scopes.include? :read_repository + check_element(:deploy_token_read_repository_checkbox, true) + end + + if scopes.include? :read_package_registry + check_element(:deploy_token_read_package_registry_checkbox, true) + end + + if scopes.include? :write_package_registry + check_element(:deploy_token_write_package_registry_checkbox, true) + end + + if scopes.include? :read_registry + check_element(:deploy_token_read_registry_checkbox, true) + end + + if scopes.include? :write_registry + check_element(:deploy_token_write_registry_checkbox, true) + end end def add_token diff --git a/qa/qa/page/project/settings/general_pipelines.rb b/qa/qa/page/project/settings/general_pipelines.rb deleted file mode 100644 index 5a98849a41d..00000000000 --- a/qa/qa/page/project/settings/general_pipelines.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module QA - module Page - module Project - module Settings - class GeneralPipelines < Page::Base - include QA::Page::Settings::Common - - view 'app/views/projects/settings/ci_cd/_form.html.haml' do - element :build_coverage_regex_field - element :save_general_pipelines_changes_button - end - - def configure_coverage_regex(pattern) - fill_element :build_coverage_regex_field, pattern - click_element :save_general_pipelines_changes_button - end - end - end - end - end -end diff --git a/qa/qa/page/project/settings/merge_request.rb b/qa/qa/page/project/settings/merge_request.rb index dbe804bfdd0..0d5d4df9f34 100644 --- a/qa/qa/page/project/settings/merge_request.rb +++ b/qa/qa/page/project/settings/merge_request.rb @@ -29,7 +29,7 @@ module QA end def enable_merge_if_all_disscussions_are_resolved - check_element(:allow_merge_if_all_discussions_are_resolved_checkbox) + check_element(:allow_merge_if_all_discussions_are_resolved_checkbox, true) click_save_changes end end diff --git a/qa/qa/page/project/settings/services/prometheus.rb b/qa/qa/page/project/settings/services/prometheus.rb index 8ae4ded535e..2e3c385a27d 100644 --- a/qa/qa/page/project/settings/services/prometheus.rb +++ b/qa/qa/page/project/settings/services/prometheus.rb @@ -8,7 +8,7 @@ module QA class Prometheus < Page::Base include Page::Component::CustomMetric - view 'app/views/projects/services/prometheus/_custom_metrics.html.haml' do + view 'app/views/shared/integrations/prometheus/_custom_metrics.html.haml' do element :custom_metrics_container element :new_metric_button end diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb index b234a9ba986..9983ee2a33d 100644 --- a/qa/qa/page/project/show.rb +++ b/qa/qa/page/project/show.rb @@ -120,6 +120,10 @@ module QA click_element(:new_issue_link) end + def has_create_merge_request_button? + has_css?(element_selector_css(:create_merge_request)) + end + def has_file?(name) return false unless has_element?(:file_tree_table) @@ -144,7 +148,7 @@ module QA def new_merge_request wait_until(reload: true) do - has_css?(element_selector_css(:create_merge_request)) + has_create_merge_request_button? end click_element :create_merge_request |