Skip to content

Instantly share code, notes, and snippets.

@lejonmanen
Last active April 5, 2025 19:29
Show Gist options
  • Save lejonmanen/77dbc7e6853c54acaf82b9bdec82cbaa to your computer and use it in GitHub Desktop.
Save lejonmanen/77dbc7e6853c54acaf82b9bdec82cbaa to your computer and use it in GitHub Desktop.
Exempel på Page Object för söksida för en musiktjänst
Feature: Musiksökning
Som en användare av musiktjänsten
Vill jag kunna söka efter musik
För att hitta musik jag gillar
Background:
Given att jag är inloggad på musiktjänsten
And att jag är på söksidan
Scenario: Söka efter musik med giltigt sökord
When jag söker efter "Coldplay"
Then bör jag se minst 5 sökresultat
And sökresultaten bör innehålla "Coldplay"
Scenario: Söka efter musik som inte finns
When jag söker efter "xyzqwerty123notfound"
Then bör jag se meddelandet "Inga resultat hittades"
Scenario: Markera musik som favorit från sökresultaten
When jag söker efter "ABBA"
And jag stjärnmarkerar den första låten i resultatlistan
Then bör jag se ett bekräftelsemeddelande om att låten har lagts till i favoriter
And när jag går till "Mina favoriter"-sidan
Then bör den stjärnmarkerade låten finnas i min favoritlista
Scenario Outline: Söka efter olika artister
When jag söker efter "<artist>"
Then bör jag se minst <antal_resultat> sökresultat
Examples:
| artist | antal_resultat |
| The Beatles | 10 |
| Michael Jackson | 8 |
| Avicii | 5 |
| Håkan Hellström | 7 |
Scenario: Filtrera sökresultat efter album
When jag söker efter "Metallica"
And jag filtrerar resultaten efter albumet "Black Album"
Then bör alla visade resultat tillhöra albumet "Black Album"
Scenario: Avancerad sökning med genre
When jag öppnar avancerad sökning
And jag väljer genre "Rock"
And jag klickar på sök
Then bör alla resultat ha genren "Rock"
class SearchPage:
def __init__(self, page):
self.page = page
self.search_input = page.locator("#search-input")
self.search_button = page.locator("#search-button")
self.results = page.locator(".search-results .song-item")
self.favorite_buttons = page.locator(".song-item .favorite-btn")
def navigate(self):
self.page.goto("https://musiktjanst.se/search")
def search_for(self, query):
self.search_input.fill(query)
self.search_button.click()
# Tänk på att det kan ta en liten stund innan self.results har ett innehåll
return self.results
def get_search_results(self):
return [item.text_content() for item in self.results.all()]
def mark_as_favorite(self, result_index):
self.favorite_buttons.nth(result_index).click()
# Vänta på bekräftelse
self.page.wait_for_selector(".favorite-confirmation", timeout=100)
from behave import when, then
from pages.search_page import SearchPage
@when('jag söker efter "{query}"')
def step_impl(context, query):
search_page = SearchPage(context.page)
search_page.navigate()
search_page.search_for(query)
context.search_page = search_page
@when('jag stjärnmarkerar den första låten i resultatlistan')
def step_impl(context):
context.search_page.mark_as_favorite(0)
@then('bör jag se minst {count:d} sökresultat')
def step_impl(context, count):
results = context.search_page.get_search_results()
assert len(results) >= count, f"Expected at least {count} results, got {len(results)}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment