From 63fcdbc9224654bf95e728124978b940e5b254b3 Mon Sep 17 00:00:00 2001 From: Greg Gauthier Date: Tue, 23 Jul 2024 15:00:35 +0100 Subject: [PATCH] fix code, update pylint, other goodies --- .gitignore | 3 ++- Pipfile | 23 --------------------- README.md | 1 + behave.ini | 6 +++--- browserdriver/__init__.py | 37 +++++++++++----------------------- conftest.py | 2 +- features/browser_demo.feature | 3 ++- features/environment.py | 6 +++++- features/steps/browser_demo.py | 20 +++++++++--------- pytests/test_basic.py | 4 +--- 10 files changed, 37 insertions(+), 68 deletions(-) delete mode 100644 Pipfile diff --git a/.gitignore b/.gitignore index 3445c5c..2c3d48e 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ **/.DS_Store **/__pycache/ .idea/ -.vscode/ \ No newline at end of file +.vscode/ +.venv/ diff --git a/Pipfile b/Pipfile deleted file mode 100644 index d95261d..0000000 --- a/Pipfile +++ /dev/null @@ -1,23 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] -flask = "*" -pytest = "*" -behave = "*" -selenium = "*" -webdriver_manager = "*" -msedge-selenium-tools = "*" - -[packages] -flask = "*" -pytest = "*" -behave = "*" -selenium = "*" -webdriver_manager = "*" -msedge-selenium-tools = "*" - -[requires] -python_version = "3.6" \ No newline at end of file diff --git a/README.md b/README.md index 36fc97f..e2050e6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # behave-framework + basic python test framework diff --git a/behave.ini b/behave.ini index d2d15e0..0941af4 100644 --- a/behave.ini +++ b/behave.ini @@ -1,9 +1,9 @@ [behave] default_format = pretty -show_skipped = true -show_timings = true +show_skipped = true +show_timings = true stdout_capture = yes -logging-level = ERROR +logging-level = ERROR default_tags = ~@skip [behave.userdata] diff --git a/browserdriver/__init__.py b/browserdriver/__init__.py index 7659f2f..9459a71 100755 --- a/browserdriver/__init__.py +++ b/browserdriver/__init__.py @@ -1,51 +1,38 @@ +# pylint: disable=too-few-public-methods from selenium import webdriver -from msedge.selenium_tools import Edge, EdgeOptions -from webdriver_manager.firefox import GeckoDriverManager -from webdriver_manager.chrome import ChromeDriverManager -from webdriver_manager.microsoft import EdgeChromiumDriverManager - class BrowserDriver: + @staticmethod def get(browser=None, headless=True): - if browser == "chrome": - return chrome(headless) - elif browser == "firefox": - return firefox(headless) - elif browser == "edge": - return edge(headless) - elif browser == "safari": - return safari() - else: - raise ValueError("'{}' is not a supported browser".format(browser)) + valid_browsers = ['chrome', 'firefox', 'safari', 'edge'] + if browser in valid_browsers: + browser_method = globals()[browser] + return browser_method(headless) + + raise ValueError(f"'{browser}' is not a supported browser") def chrome(headless=True): options = webdriver.ChromeOptions() options.headless = headless options.add_argument('--ignore-certificate-errors') - return webdriver.Chrome( - ChromeDriverManager().install(), - options=options) + return webdriver.Chrome(options=options) def firefox(headless=True): options = webdriver.FirefoxOptions() options.accept_insecure_certs = True options.headless = headless - gecko_driver = GeckoDriverManager().install() - return webdriver.Firefox( - executable_path=gecko_driver, - options=options) + return webdriver.Firefox(options=options) def edge(headless=True): - options = EdgeOptions() + options = webdriver.EdgeOptions() options.use_chromium = True options.headless = headless - edge_driver = EdgeChromiumDriverManager().install() - driver = Edge(edge_driver, options=options) + driver = webdriver.Edge(options=options) return driver diff --git a/conftest.py b/conftest.py index 10cc643..a8f320b 100755 --- a/conftest.py +++ b/conftest.py @@ -1,6 +1,6 @@ import configparser -import pytest +import pytest config = configparser.ConfigParser() diff --git a/features/browser_demo.feature b/features/browser_demo.feature index 09ee36c..d18e624 100644 --- a/features/browser_demo.feature +++ b/features/browser_demo.feature @@ -1,4 +1,5 @@ Feature: Browser Demo + Scenario: Load test.io web page with chrome Given I have a chrome driver When I navigate to test.io @@ -9,12 +10,12 @@ Feature: Browser Demo When I navigate to test.io Then The page is displayed - @skip Scenario: Load test.io web page with edge Given I have an edge driver When I navigate to test.io Then The page is displayed + @skip Scenario: Load test.io web page with safari Given I have a safari driver When I navigate to test.io diff --git a/features/environment.py b/features/environment.py index d445eeb..19b0157 100644 --- a/features/environment.py +++ b/features/environment.py @@ -1,5 +1,9 @@ - +# pylint: disable=unused-argument def before_all(context): # -- SET LOG LEVEL: behave --logging-level=ERROR ... # on behave command-line or in "behave.ini". context.config.setup_logging() + + +def after_scenario(context, scenario): + context.driver.quit() diff --git a/features/steps/browser_demo.py b/features/steps/browser_demo.py index 14de24f..7d1f397 100644 --- a/features/steps/browser_demo.py +++ b/features/steps/browser_demo.py @@ -1,34 +1,34 @@ +# pylint: disable=no-name-in-module from behave import then, when, given from browserdriver import BrowserDriver @given('I have a firefox driver') -def step_impl(context): +def get_firefox_driver(context): context.driver = BrowserDriver.get("firefox") @given('I have a chrome driver') -def step_impl(context): +def get_chrome_driver(context): context.driver = BrowserDriver.get("chrome") -@given(u'I have an edge driver') -def step_impl(context): +@given('I have an edge driver') +def get_edge_driver(context): context.driver = BrowserDriver.get("edge") -@given(u'I have a safari driver') -def step_impl(context): +@given('I have a safari driver') +def get_safari_driver(context): context.driver = BrowserDriver.get("safari") @when('I navigate to test.io') -def step_impl(context): +def navigate_to_testio(context): context.driver.get("https://test.io") - print(context.driver.title) @then('The page is displayed') -def step_impl(context): - assert context.driver.title == "QA Testing as a Service | test IO" +def page_is_displayed(context): + assert context.driver.title == "Home | Test IO" diff --git a/pytests/test_basic.py b/pytests/test_basic.py index 7de66f7..132f3a9 100644 --- a/pytests/test_basic.py +++ b/pytests/test_basic.py @@ -1,5 +1,4 @@ from browserdriver import BrowserDriver -import pytest def test_firefox_browser(headless): @@ -16,14 +15,13 @@ def test_chrome_browser(headless): bd.quit() -def test_safari_browser(headless): +def test_safari_browser(): bd = BrowserDriver().get("safari", headless=False) bd.get('https://test.io') assert "QA Testing as a Service | test IO" == bd.title bd.quit() -@pytest.mark.skip(reason="Edge has inconsistent implementations across platforms") def test_edge_browser(headless): bd = BrowserDriver().get("edge", headless=headless) bd.get('https://test.io')