Last active
April 5, 2025 19:29
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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