Skip to content

Commit 07bab49

Browse files
committed
Added route interceptor
1 parent ef17d42 commit 07bab49

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

conftest.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from typing import Generator
2+
from urllib.parse import urlparse, parse_qs
3+
24
from dotenv import load_dotenv
35

46
import os
@@ -31,3 +33,47 @@ def request_context(
3133
request_context = playwright.request.new_context(base_url=base_url)
3234
yield request_context
3335
request_context.dispose()
36+
37+
38+
@pytest.fixture(scope="session")
39+
def browser(playwright):
40+
browser = playwright.chromium.launch(headless=False)
41+
yield browser
42+
browser.close()
43+
44+
45+
@pytest.fixture(scope="session")
46+
def context(browser):
47+
context = browser.new_context()
48+
yield context
49+
context.close()
50+
51+
52+
@pytest.fixture
53+
def intercept_route(page):
54+
def setup_routes(route_pattern):
55+
intercepted_data = {
56+
'query_params': {},
57+
'headers': {},
58+
'full_url': '',
59+
'resource_type': ''
60+
}
61+
62+
# Define a function to capture query parameters and handle XHR requests
63+
def handle_route(route):
64+
request = route.request
65+
intercepted_data['headers'].update(request.headers)
66+
intercepted_data['full_url'] = request.url
67+
intercepted_data['resource_type'] = request.resource_type
68+
69+
# Parse the query parameters
70+
parsed_url = urlparse(request.url)
71+
intercepted_data['query_params'].update(parse_qs(parsed_url.query))
72+
73+
route.continue_()
74+
75+
page.route(route_pattern, handle_route)
76+
77+
return intercepted_data
78+
79+
return setup_routes

tests/home/test_home_page.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
import time
2+
from urllib.parse import urlparse, parse_qs
3+
14
import pytest
2-
from playwright.sync_api import Page
5+
from playwright.sync_api import Page, expect
36
from lib.pages.home_page import HomePage
47

58

@@ -8,3 +11,19 @@ def test_demo_qa_home_page_elements_should_be_visible(page: Page, base_url):
811
home_page = HomePage(page)
912
home_page.navigate(base_url)
1013
home_page.elements_are_visible()
14+
15+
16+
def test_get_request_headers(page: Page, base_url, intercept_route):
17+
route_pattern = "**/Account/v1/GenerateToken"
18+
intercepted_data = intercept_route(route_pattern)
19+
# page.route(, handle_route)
20+
page.goto(f'{base_url}/books')
21+
# Click the button that triggers the request
22+
expect(page.locator('span.text', has_text='Login')).to_be_visible()
23+
page.locator('span.text', has_text='Login').click()
24+
page.locator('input#userName').type('someStuff')
25+
page.locator('input#password').type('someStuff')
26+
page.locator('button#login').click()
27+
# time.sleep(3)
28+
# query_params = setup_routes
29+
print(intercepted_data)

0 commit comments

Comments
 (0)