diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000..56b5592 --- /dev/null +++ b/conftest.py @@ -0,0 +1,59 @@ +import threading +import urllib +import uuid +#import threading +from multiprocessing import Process, Lock +import pytest +from browserstack.local import Local +import os, json +from jsonmerge import merge +from dotenv import load_dotenv +import time + +from playwright.sync_api import Playwright +from playwright.sync_api import Page + +lock = Lock() +threaded_count = 0 + +load_dotenv() + +TASK_ID = int(os.environ['TASK_ID']) if 'TASK_ID' in os.environ else 0 + + +BROWSERSTACK_USERNAME = os.environ['BROWSERSTACK_USERNAME'] +BROWSERSTACK_ACCESS_KEY = os.environ['BROWSERSTACK_ACCESS_KEY'] + + +def update_session_name(page, session_name=''): + if not (page and session_name): + return + + command = { + "action": "setSessionName", + "arguments": { + "name": session_name + } + } + + browser_stack_command = f"browserstack_executor: {json.dumps(command)}" + result = page.evaluate("() => {}", browser_stack_command) + return json.loads(result) + +@pytest.fixture(scope='function') +def session_capabilities(playwright: Playwright): + global timenow + global lock + test_name = os.environ.get('PYTEST_CURRENT_TEST').split(' ')[0].split('::')[1] + capabilities = {} + stringifiedCaps = urllib.parse.quote(json.dumps(capabilities)) + caps = 'wss://cdp.browserstack.com/playwright?caps=' + stringifiedCaps + browser = playwright.chromium.launch() + context = browser.new_context() + page = context.new_page() + update_session_name(page,test_name) + + yield page + context.close() + browser.close() + diff --git a/tests/sample-local-test.py b/tests/sample-local-test.py index 7ab2514..88b3bc8 100644 --- a/tests/sample-local-test.py +++ b/tests/sample-local-test.py @@ -3,7 +3,8 @@ import pytest from playwright.sync_api import expect -def test_bstack_local_sample(page) -> None: +def test_bstack_local_sample(session_capabilities) -> None: + page = session_capabilities try: #Navigate to the base url page.goto("http://bs-local.com:45454", timeout=0) diff --git a/tests/sample-test.py b/tests/sample-test.py index 59410ea..6631fc5 100644 --- a/tests/sample-test.py +++ b/tests/sample-test.py @@ -2,7 +2,8 @@ from playwright.sync_api import expect -def test_bstack_sample(page) -> None: +def test_sample(session_capabilities) -> None: + page = session_capabilities try: # Navigate to the base url page.goto("https://bstackdemo.com/", timeout=0)