diff --git a/README.md b/README.md
index 5ce6f63dd05..352b192fe50 100755
--- a/README.md
+++ b/README.md
@@ -134,31 +134,37 @@ class CoffeeCartTest(BaseCase):
💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses Selenium/WebDriver APIs, and incorporates test-runners such as pytest
, pynose
, and behave
to provide organized structure, test discovery, test execution, test state (eg. passed, failed, or skipped), and command-line options for changing default settings (such as choosing the browser to use). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.
💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses Selenium/WebDriver APIs and incorporates test-runners such as pytest
, pynose
, and behave
to provide organized structure, test discovery, test execution, test state (eg. passed, failed, or skipped), and command-line options for changing default settings (eg. browser selection). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.
💡 With raw Selenium, commands that use selectors need to specify the type of selector (eg. "css selector", "button#myButton"
). With SeleniumBase, there's auto-detection between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (but optionally you could).
💡 SeleniumBase's driver manager gives you more control over automatic driver downloads. (Use --driver-version=VER
with your pytest
run command to specify the version.) By default, SeleniumBase will download a driver version that matches your major browser version if not set.
💡 SeleniumBase methods often perform multiple actions in a single method call. For example, self.type(selector,text)
does the following:
1. Waits for the element to be visible.
2. Waits for the element to be interactive.
3. Clears the text field.
4. Types in the new text.
5. Presses Enter/Submit if the text ends in "\n"
.
With raw Selenium, those actions require multiple method calls.
💡 SeleniumBase automatically detects between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (but optionally you could).
+ +💡 SeleniumBase methods often perform multiple actions in a single method call. For example, self.type(selector, text)
does the following:
1. Waits for the element to be visible.
2. Waits for the element to be interactive.
3. Clears the text field.
4. Types in the new text.
5. Presses Enter/Submit if the text ends in "\n"
.
With raw Selenium, those actions require multiple method calls.
💡 SeleniumBase uses default timeout values when not set:
-✅self.click("button")
+✅ self.click("button")
With raw Selenium, methods would fail instantly (by default) if an element needed more time to load:
-❌self.driver.find_element(by="css selector", value="button").click()
+❌ self.driver.find_element(by="css selector", value="button").click()
(Reliable code is better than unreliable code.)
💡 SeleniumBase lets you change the explicit timeout values of methods:
-✅self.click("button",timeout=10)
+✅ self.click("button", timeout=10)
With raw Selenium, that requires more code:
-❌WebDriverWait(driver,10).until(EC.element_to_be_clickable("css selector", "button")).click()
+❌ WebDriverWait(driver, 10).until(EC.element_to_be_clickable("css selector", "button")).click()
(Simple code is better than complex code.)
💡 SeleniumBase gives you clean error output when a test fails. With raw Selenium, error messages can get very messy.
-💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the ./latest_logs/
folder. Raw Selenium does not have these options out-of-the-box.
💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the ./latest_logs/
folder. Raw Selenium does not have these options out-of-the-box.
💡 SeleniumBase includes desktop GUI apps for running tests, such as SeleniumBase Commander for pytest
and SeleniumBase Behave GUI for behave
.
💡 SeleniumBase has its own Recorder / Test Generator for creating tests from manual browser actions.
-💡 SeleniumBase includes desktop GUI apps for running tests, such as SeleniumBase Commander for pytest
and SeleniumBase Behave GUI for behave
.
💡 SeleniumBase comes with test case management software, ("CasePlans"), for organizing tests and step descriptions.
-💡 SeleniumBase has its own Recorder / Test Generator that can create tests from manual browser actions. SeleniumBase also includes other useful tools and console scripts for getting things done quickly. (See the documentation for more details!)
+💡 SeleniumBase includes tools for building data apps, ("ChartMaker"), which can generate JavaScript from Python.
💡 SeleniumBase is a Python test framework for the Selenium/WebDriver browser automation library. This framework incorporates test-runners such as pytest
, nosetests
, and behave
to provide organized structure, test discovery, test execution, test state (eg. passed, failed, or skipped), and command-line options for changing default settings (such as choosing the browser to use). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.
💡 With raw Selenium, you have to manually download drivers (eg. chromedriver) before running tests. With SeleniumBase's driver manager, that's done automatically for you if the required driver isn't already on your PATH. There are also console scripts available for more control (eg. sbase get chromedriver latest
to download the latest version of chromedriver to a local SeleniumBase directory).
💡 SeleniumBase is a Python framework for browser automation and testing. SeleniumBase uses Selenium/WebDriver APIs and incorporates test-runners such as pytest
, pynose
, and behave
to provide organized structure, test discovery, test execution, test state (eg. passed, failed, or skipped), and command-line options for changing default settings (eg. browser selection). With raw Selenium, you would need to set up your own options-parser for configuring tests from the command-line.
💡 With raw Selenium, commands that use selectors need to specify the type of selector (eg. "css selector", "button#myButton"
). With SeleniumBase, there's auto-detection between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (but optionally you could).
💡 SeleniumBase's driver manager gives you more control over automatic driver downloads. (Use --driver-version=VER
with your pytest
run command to specify the version.) By default, SeleniumBase will download a driver version that matches your major browser version if not set.
💡 SeleniumBase methods often perform multiple actions in a single method call. For example, self.type(selector,text)
does the following:
1. Waits for the element to be visible.
2. Waits for the element to be interactive.
3. Clears the text field.
4. Types in the new text.
5. Presses Enter/Submit if the text ends in "\n"
.
With raw Selenium, those actions require multiple method calls.
💡 SeleniumBase automatically detects between CSS Selectors and XPath, which means you don't need to specify the type of selector in your commands (but optionally you could).
-💡 SeleniumBase uses default timeout values when not set, which means that methods automatically wait for elements to appear (up to the timeout limit) before failing:
✅self.click("button")
With raw Selenium, methods would fail instantly (by default) if an element needed more time to load:
❌self.driver.find_element(by="css selector", value="button").click()
(Reliable code is better than unreliable code.)
💡 SeleniumBase methods often perform multiple actions in a single method call. For example, self.type(selector, text)
does the following:
1. Waits for the element to be visible.
2. Waits for the element to be interactive.
3. Clears the text field.
4. Types in the new text.
5. Presses Enter/Submit if the text ends in "\n"
.
With raw Selenium, those actions require multiple method calls.
💡 SeleniumBase lets you change the explicit timeout values of methods:
✅self.click("button",timeout=10)
With raw Selenium, that requires more code:
❌WebDriverWait(driver,10).until(EC.element_to_be_clickable("css selector", "button")).click()
(Simple code is better than complex code.)
💡 SeleniumBase uses default timeout values when not set:
+✅ self.click("button")
+With raw Selenium, methods would fail instantly (by default) if an element needed more time to load:
+❌ self.driver.find_element(by="css selector", value="button").click()
+(Reliable code is better than unreliable code.)
💡 SeleniumBase lets you change the explicit timeout values of methods:
+✅ self.click("button", timeout=10)
+With raw Selenium, that requires more code:
+❌ WebDriverWait(driver, 10).until(EC.element_to_be_clickable("css selector", "button")).click()
+(Simple code is better than complex code.)
💡 SeleniumBase gives you clean error output when a test fails. With raw Selenium, error messages can get very messy.
-💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the ./latest_logs/
folder. Raw Selenium does not have these options out-of-the-box.
💡 SeleniumBase gives you the option to generate a dashboard and reports for tests. It also saves screenshots from failing tests to the ./latest_logs/
folder. Raw Selenium does not have these options out-of-the-box.
💡 SeleniumBase includes desktop GUI apps for running tests, such as SeleniumBase Commander for pytest
and SeleniumBase Behave GUI for behave
.
💡 SeleniumBase has its own Recorder / Test Generator for creating tests from manual browser actions.
+ +💡 SeleniumBase comes with test case management software, ("CasePlans"), for organizing tests and step descriptions.
-💡 SeleniumBase includes desktop GUI apps for running tests, such as SeleniumBase Commander for pytest
, and SeleniumBase Behave GUI.
💡 SeleniumBase includes tools for building data apps, ("ChartMaker"), which can generate JavaScript from Python.
-💡 SeleniumBase has its own Recorder & Test Generator that can create tests from manual browser actions. SeleniumBase also has many other useful tools and console scripts for getting things done quickly. (See the documentation for more details!)