discourse/spec/system/page_objects/pages/search.rb
David Battersby 3efbd95ad8
FEATURE: add search field to header (#31447)
Adds a search field to the page header on desktop that is controlled by
a site setting (within Search).

The search field toggles back to the search icon (magnifying class) when
the header is minimized (ie. scrolling in topics) and restores to the
field again when header is no longer minimized.

On mobile the search experience is still the same.
2025-02-28 12:47:09 +04:00

108 lines
2.6 KiB
Ruby
Vendored

# frozen_string_literal: true
module PageObjects
module Pages
class Search < PageObjects::Pages::Base
def type_in_search(input)
find("input.full-page-search").send_keys(input)
self
end
def type_in_search_menu(input)
find("input#search-term").send_keys(input)
self
end
def click_search_menu_link
find(".search-menu .results .search-link").click
end
def clear_search_input
find("input.full-page-search").set("")
self
end
def heading_text
find("h1.search-page-heading").text
end
def click_search_button
find(".search-cta").click
end
def click_search_icon
find(".d-header #search-button").click
end
def click_in_posts_by_user
find(".search-menu-container .search-menu-assistant-item").click
end
def click_first_topic
find(".topic-list-body tr:first-of-type").click
end
def has_search_menu_visible?
page.has_selector?(".search-menu .search-menu-panel", visible: true)
end
def has_no_search_menu_visible?
page.has_no_selector?(".search-menu .search-menu-panel")
end
SEARCH_ICON_SELECTOR = "#search-button.btn-icon"
SEARCH_FIELD_SELECTOR = ".floating-search-input .search-menu"
SEARCH_RESULT_SELECTOR = ".search-results .fps-result"
def has_search_icon?
page.has_selector?(SEARCH_ICON_SELECTOR, visible: true)
end
def has_no_search_icon?
page.has_no_selector?(SEARCH_ICON_SELECTOR)
end
def has_search_field?
page.has_selector?(SEARCH_FIELD_SELECTOR, visible: true)
end
def has_no_search_field?
page.has_no_selector?(SEARCH_FIELD_SELECTOR)
end
def has_topic_title_for_first_search_result?(title)
page.has_css?(".search-menu .results .search-result-topic", text: title)
end
def has_search_result?
page.has_selector?(SEARCH_RESULT_SELECTOR)
end
def has_no_search_result?
page.has_no_selector?(SEARCH_RESULT_SELECTOR)
end
def has_warning_message?
page.has_selector?(".search-results .warning")
end
def has_found_no_results?
page.has_css?(".search-menu-container .results .no-results")
end
def search_term
page.find("#search-term").value
end
SEARCH_PAGE_SELECTOR = "body.search-page"
def active?
has_css?(SEARCH_PAGE_SELECTOR)
end
def not_active?
has_no_css?(SEARCH_PAGE_SELECTOR)
end
end
end
end