0

conftest.py

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as CH
from selenium.webdriver.edge.service import Service as EG
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager


@pytest.fixture
def driver(request, session=None):
    browser = request.config.getoption("--browsers")

    if browser == "chrome":
        if session is not None:
            options = webdriver.ChromeOptions()
            options.add_argument("user-data-dir=" + session)
            test_driver = webdriver.Chrome(service=CH(ChromeDriverManager().install()), options=options)
        else:
            test_driver = webdriver.Chrome(service=CH(ChromeDriverManager().install()))
    elif browser == "edge":
        if session is not None:
            options = webdriver.EdgeOptions()
            options.add_argument("user-data-dir=" + session)
            test_driver = webdriver.Edge(service=EG(EdgeChromiumDriverManager().install()), options=options)
        else:
            test_driver = webdriver.Edge(service=EG(EdgeChromiumDriverManager().install()))
    else:
        raise TypeError(f"'{browser}' isn't installed/provided")

    yield test_driver
    test_driver.quit()


def pytest_addoption(parser):
    parser.addoption(
        "--browsers",
        action="store",
        default="chrome",
        help="browsers to run the tests (chrome/edge)"
    )

Based on previous setup, I tried to save the current test session using options.add_argument("user-data-dir=" + session). But every time I use it, those condition never been fulfilled and my test always executing the default driver setup. Did I miss something?


This is the example from my test pattern

page_object/base_page.py

from selenium.webdriver.remote.webdriver import WebDriver
# Another import module . . .

class BasePage:
    def __init__(self, driver: WebDriver, session: str = None):
        self._driver = driver
        self._session = session

# Another custom function...

page_object/login_page.py

from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from page_objects.base_page import BasePage

class LoginPage(BasePage):
    __loginUrl = 'https://any-valid-URL.com'

    def __init__(self, driver: WebDriver, session: str = None):
        super().__init__(driver, session)

    def open_page(self):
        super()._open_url(self.__loginUrl)

# Rest of the code . . .

test_page.py

from page_objects.login_page import LoginPage


class TestLoginAsAdmin:
    def test_login_as_Admin(self, driver):
        login = LoginPage(driver, session="test_login")
        login.open_page()

# Rest of the code . . .

I've tried using these method:
options.add_argument("user-data-dir=" + session)
options.add_argument(f"user-data-dir=" + session)
options.add_argument(r"--user-data-dir=" + session)
None of that is working

But when I try to pass it directly like this test

from page_objects.login_page import LoginPage
from selenium.webdriver.chrome.options import Options
from selenium import webdriver


class TestLoginAsAdmin:
    def test_login_as_Admin(self):
        chrome_options = Options()
        chrome_options.add_argument("user-data-dir=login")
        driver = webdriver.Chrome(options=chrome_options)

        login = LoginPage(driver)

# Rest of the code . . .

It works

Hazeya
  • 1

0 Answers0