From b3bb993677984fec2c0efaeebc350c18b35581ec Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Sun, 10 Sep 2023 18:55:37 -0400 Subject: [PATCH 1/4] Refactor the extended "driver" instance --- seleniumbase/fixtures/page_actions.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/seleniumbase/fixtures/page_actions.py b/seleniumbase/fixtures/page_actions.py index 02e6d65ceed..3a39f67f238 100644 --- a/seleniumbase/fixtures/page_actions.py +++ b/seleniumbase/fixtures/page_actions.py @@ -107,13 +107,15 @@ def is_element_enabled(driver, selector, by="css selector"): return False -def is_text_visible(driver, text, selector, by="css selector", browser=None): +def is_text_visible( + driver, text, selector="html", by="css selector", browser=None +): """ Returns whether the text substring is visible in the given selector. @Params driver - the webdriver object (required) text - the text string to search for (required) - selector - the locator for identifying the page element (required) + selector - the locator for identifying the page element by - the type of selector being used (Default: "css selector") @Returns Boolean (is text visible) @@ -1640,7 +1642,7 @@ def assert_text( ): browser = driver.capabilities["browserName"].lower() wait_for_text_visible( - driver, text, selector, by=by, timeout=timeout, browser=browser + driver, text.strip(), selector, by=by, timeout=timeout, browser=browser ) @@ -1649,7 +1651,7 @@ def assert_exact_text( ): browser = driver.capabilities["browserName"].lower() wait_for_exact_text_visible( - driver, text, selector, by=by, timeout=timeout, browser=browser + driver, text.strip(), selector, by=by, timeout=timeout, browser=browser ) From 97fcf2202306cc9e2a8f6cc487136c9f100082b7 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Sun, 10 Sep 2023 18:59:42 -0400 Subject: [PATCH 2/4] Add a "sleep" method directly into "driver" instances --- seleniumbase/core/browser_launcher.py | 1 + 1 file changed, 1 insertion(+) diff --git a/seleniumbase/core/browser_launcher.py b/seleniumbase/core/browser_launcher.py index 28018d4bbb6..e057316c08f 100644 --- a/seleniumbase/core/browser_launcher.py +++ b/seleniumbase/core/browser_launcher.py @@ -161,6 +161,7 @@ def extend_driver(driver): driver.get_origin = DM.get_origin driver.get_user_agent = DM.get_user_agent driver.highlight = DM.highlight + driver.sleep = time.sleep return driver From d539c18d8da026a1fdd17a0b07efbe8a986158b4 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Sun, 10 Sep 2023 19:01:44 -0400 Subject: [PATCH 3/4] Add a test for extended "driver" instances --- .../offline_examples/test_extended_driver.py | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 examples/offline_examples/test_extended_driver.py diff --git a/examples/offline_examples/test_extended_driver.py b/examples/offline_examples/test_extended_driver.py new file mode 100755 index 00000000000..44dd08cce2c --- /dev/null +++ b/examples/offline_examples/test_extended_driver.py @@ -0,0 +1,61 @@ +import os +import pytest +from seleniumbase import BaseCase +BaseCase.main(__name__, __file__) + + +@pytest.mark.offline # Can be run with: "pytest -m offline" +class OfflineTests(BaseCase): + def test_extended_driver(self): + # Load a local html file into the web browser + dir_path = os.path.dirname(os.path.abspath(__file__)) + file_path = os.path.join(dir_path, "demo_page.html") + self.load_html_file(file_path) + + # Get the raw driver + driver = self.driver + + # Assert that an element is visible on the page + driver.assert_element("tbody#tbodyId") + + # Assert that a text substring appears in an element + driver.assert_text("Demo Page", "h1") + + # Type text into various text fields and then assert + driver.type("#myTextInput", "This is Automated") + driver.type("textarea.area1", "Testing Time!\n") + driver.type('[name="preText2"]', "Typing Text!") + driver.assert_text("This is Automated", "#myTextInput") + driver.assert_text("Testing Time!\n", "textarea.area1") + driver.assert_text("Typing Text!", '[name="preText2"]') + + # Hover & click a dropdown element and assert results + driver.assert_text("Automation Practice", "h3") + driver.js_click("#dropOption2") + driver.assert_text("Link Two Selected", "h3") + + # Click a button and then verify the expected results + driver.assert_text("This Text is Green", "#pText") + driver.click('button:contains("Click Me")') + driver.assert_text("This Text is Purple", "#pText") + + # Assert that the given SVG is visible on the page + driver.assert_element('svg[name="svgName"]') + + # Assert an element located inside an iframe + self.assert_false(driver.is_element_visible("img")) + driver.switch_to.frame("myFrame1") + self.assert_true(driver.is_element_visible("img")) + driver.switch_to.default_content() + + # Assert text located inside an iframe + self.assert_false(driver.is_text_visible("iFrame Text")) + driver.switch_to.frame("myFrame2") + self.assert_true(driver.is_text_visible("iFrame Text")) + driver.switch_to.default_content() + + # Assert exact text + driver.assert_exact_text("Demo Page", "h1") + + # Highlight a page element (Also asserts visibility) + driver.highlight("h2") From 1af01d30e6a9949cbf02039e25a590a4d7172871 Mon Sep 17 00:00:00 2001 From: Michael Mintz Date: Sun, 10 Sep 2023 19:03:50 -0400 Subject: [PATCH 4/4] Version 4.18.4 --- seleniumbase/__version__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py index edcc1a2dd46..dd499105475 100755 --- a/seleniumbase/__version__.py +++ b/seleniumbase/__version__.py @@ -1,2 +1,2 @@ # seleniumbase package -__version__ = "4.18.3" +__version__ = "4.18.4"