From 14ea5944250ecfcf9857b315459ac3e8678bae1c Mon Sep 17 00:00:00 2001 From: Greg Gauthier Date: Fri, 9 Oct 2020 18:34:54 +0100 Subject: [PATCH] behave and pytest in the same framework --- .gitignore | 4 ++++ Pipfile | 4 ++-- browserdriver/__init__.py | 42 ++++++++++++++++++++++++++++++++++ features/__init__.py | 0 features/browser_demo.feature | 5 ++++ features/demo.feature | 2 +- features/steps/browser_demo.py | 18 +++++++++++++++ features/steps/demo.py | 11 +++++---- unittests/test_basic.py | 15 ++++++++++++ webdriver/__init__.py | 0 10 files changed, 94 insertions(+), 7 deletions(-) create mode 100755 browserdriver/__init__.py delete mode 100644 features/__init__.py create mode 100644 features/browser_demo.feature create mode 100644 features/steps/browser_demo.py create mode 100644 unittests/test_basic.py delete mode 100644 webdriver/__init__.py diff --git a/.gitignore b/.gitignore index 9822968..3445c5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ *.lock *.iml +*.pyc +*.log +**/.DS_Store +**/__pycache/ .idea/ .vscode/ \ No newline at end of file diff --git a/Pipfile b/Pipfile index 4e672c8..24d9c39 100644 --- a/Pipfile +++ b/Pipfile @@ -8,14 +8,14 @@ flask = "*" pytest = "*" behave = "*" selenium = "*" -django = "*" +webdriver_manager = "*" [packages] flask = "*" pytest = "*" behave = "*" selenium = "*" -djanjgo = "*" +webdriver_manager = "*" [requires] python_version = "3.8" \ No newline at end of file diff --git a/browserdriver/__init__.py b/browserdriver/__init__.py new file mode 100755 index 0000000..a0df79c --- /dev/null +++ b/browserdriver/__init__.py @@ -0,0 +1,42 @@ +from selenium import webdriver +from selenium.webdriver import DesiredCapabilities + +from webdriver_manager.firefox import GeckoDriverManager +from webdriver_manager.chrome import ChromeDriverManager + + +class BrowserDriver: + @staticmethod + def get(browser=None): + if browser == "chrome": + return chrome() + elif browser == "firefox": + return firefox() + elif browser == "edge": + return edge() + elif browser == "safari": + return safari() + else: + raise ValueError("'{}' is not a supported browser".format(browser)) + + +def chrome(): + options = webdriver.ChromeOptions() + options.add_argument('--ignore-certificate-errors') + return webdriver.Chrome(ChromeDriverManager().install(), options=options) + + +def firefox(): + options = webdriver.FirefoxOptions() + options.accept_insecure_certs = True + gecko_driver = GeckoDriverManager().install() + return webdriver.Firefox(executable_path=gecko_driver, firefox_options=options) + + +def edge(): + return webdriver.Edge(DesiredCapabilities.EDGE) + + +def safari(): + # Because safari driver is bundled with safari + return webdriver.Safari() diff --git a/features/__init__.py b/features/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/features/browser_demo.feature b/features/browser_demo.feature new file mode 100644 index 0000000..4816ff4 --- /dev/null +++ b/features/browser_demo.feature @@ -0,0 +1,5 @@ +Feature: Browser Demo + Scenario: Load test.io web page + Given I have a chrome driver + When I navigate to test.io + Then The page is displayed diff --git a/features/demo.feature b/features/demo.feature index 12f020a..301863b 100644 --- a/features/demo.feature +++ b/features/demo.feature @@ -1,5 +1,5 @@ Feature: Demo Feature - Scenario: Demo1 + Scenario: Demo Given A sentence When The sentence is inspected Then The word "the" should be found diff --git a/features/steps/browser_demo.py b/features/steps/browser_demo.py new file mode 100644 index 0000000..ba78978 --- /dev/null +++ b/features/steps/browser_demo.py @@ -0,0 +1,18 @@ +from behave import then, when, given + +from browserdriver import BrowserDriver + + +@given('I have a chrome driver') +def step_impl(context): + context.driver = BrowserDriver.get("chrome") + + +@when('I navigate to test.io') +def step_impl(context): + context.driver.get("https://test.io") + + +@then('The page is displayed') +def step_impl(context): + assert context.driver.title == "QA Testing as a Service | test IO" diff --git a/features/steps/demo.py b/features/steps/demo.py index f9cc79f..fa0a475 100644 --- a/features/steps/demo.py +++ b/features/steps/demo.py @@ -1,13 +1,16 @@ -@given(u'A sentence') +from behave import then, when, given + + +@given('A sentence') def step_impl(context): return True -@when(u'The sentence is inspected') +@when('The sentence is inspected') def step_impl(context): return True -@then(u'The word "the" should be found') +@then('The word "the" should be found') def step_impl(context): - return True \ No newline at end of file + return True diff --git a/unittests/test_basic.py b/unittests/test_basic.py new file mode 100644 index 0000000..37d0703 --- /dev/null +++ b/unittests/test_basic.py @@ -0,0 +1,15 @@ +from browserdriver import BrowserDriver + + +def setup_module(module): + global bd + bd = BrowserDriver().get("firefox") + + +def teardown_module(module): + bd.quit() + + +def test_load_browser(): + bd.get('https://test.io') + assert "QA Testing as a Service | test IO" == bd.title diff --git a/webdriver/__init__.py b/webdriver/__init__.py deleted file mode 100644 index e69de29..0000000