DEV Community

Discussion on: Bringing new life into Edge Selenium Tools

Collapse
 
sreidhark profile image
sreidhark

Hi Mr Mintz,
I am really surprised by the kind of work you put in seleniumbase.

Just started using this , but is there a way to use this in Behave(BDD) as the step functions don't work with classes and I don't see a way to use BaseCase from a normal function.
Appreciate your help.

Thanks
Sri

Collapse
 
mintzworld profile image
Michael Mintz

Hi Sri,
Thank you. There's a special format for using SeleniumBase without BaseCase. This is done by using SeleniumBase as a pytest fixture. Here's an example of that:
github.com/seleniumbase/SeleniumBa...
This format may be needed when using other pytest fixtures in your tests.

# "sb" pytest fixture test in a method with no class
def test_sb_fixture_with_no_class(sb):
    sb.open("https://google.com/ncr")
    sb.type('input[title="Search"]', 'SeleniumBase\n')
    sb.click('a[href*="github.com/seleniumbase/SeleniumBase"]')
    sb.click('a[title="seleniumbase"]')


# "sb" pytest fixture test in a method inside a class
class Test_SB_Fixture():
    def test_sb_fixture_inside_class(self, sb):
        sb.open("https://google.com/ncr")
        sb.type('input[title="Search"]', 'SeleniumBase\n')
        sb.click('a[href*="github.com/seleniumbase/SeleniumBase"]')
        sb.click('a[title="examples"]')
Enter fullscreen mode Exit fullscreen mode
Collapse
 
sreidhark profile image
sreidhark

Thanks, Let me try and update you.

Thread Thread
 
sreidhark profile image
sreidhark

Sorry for the trouble as I am completely new to behave.
what is "sb" ? Is it an object of some class that needs to eb instantiated in some fixture definition ?
Help appreciated.

Thanks
Sri

Thread Thread
 
mintzworld profile image
Michael Mintz

You're probably looking for stackoverflow.com/a/41151454 , which explains pytest vs behave and has a link to pytest-bdd.

sb is the pytest fixture for SeleniumBase. Using SeleniumBase-as-a-fixture gives you the compatibility that you need to use pytest-bdd fixtures in your code at the same time, such as scenario, given, when, and then. Details on pytest-bdd can be found here: pypi.org/project/pytest-bdd/ . That is completely separate from SeleniumBase, but pytest does allow for the use of multiple fixtures at the same time.

Thread Thread
 
sreidhark profile image
sreidhark

Thanks for the quick response. I will try.

Thread Thread
 
sreidhark profile image
sreidhark

Hi,
Sorry for the long post, I am trying to run sb without pytest. I found this code below from your examples.

1) Are all these settings mandatory ?

2)I am trying to use Allure reports, but its seems sb.pytest_html_report = "sb_report.html" is not generating any report , nor even logs in sb.log_path = "latest_logs/"

3) Eventually I want to create an object of sb and call from behave test steps, some how fixtures thing above didnt work for me . I want to create a SeleniumBase object in environment file before a feature starts running and use the same in test steps.

I have tried writing my own framework, but somehow I keep coming back to your work as I know I cant produce such a comprehensive and stable work ( Kudos!)

Thanks
Sri

Code:

from seleniumbase import BaseCase

class MyTestClass(BaseCase):

def test_basic(self):
    self.open("https://store.xkcd.com/search")
    self.type('input[name="q"]', "xkcd book")
    self.click('input[value="Search"]')
    self.assert_text("xkcd: volume 0", "h3")
    self.open("https://xkcd.com/353/")
    self.assert_title("xkcd: Python")
    self.assert_element('img[alt="Python"]')
    self.click('a[rel="license"]')
    self.assert_text("free to copy and reuse")
    self.go_back()
    self.click_link_text("About")
    self.assert_exact_text("xkcd.com", "h2")
    self.click_link_text("geohashing")
    self.assert_element("#comic img")
Enter fullscreen mode Exit fullscreen mode

if name == "main":
sb = MyTestClass("test_basic")
sb.browser = "chrome"
sb.headless = False
sb.headed = True
sb.start_page = None
sb.locale_code = None
sb.servername = "localhost"
sb.port = 4444
sb.data = None
sb.environment = "test"
sb.user_agent = None
sb.incognito = False
sb.guest_mode = False
sb.devtools = False
sb.mobile_emulator = False
sb.device_metrics = None
sb.extension_zip = None
sb.extension_dir = None
sb.database_env = "test"
sb.log_path = "latest_logs/"
sb.archive_logs = False
sb.disable_csp = False
sb.disable_ws = False
sb.enable_ws = False
sb.enable_sync = False
sb.use_auto_ext = False
sb.no_sandbox = False
sb.disable_gpu = False
sb._reuse_session = False
sb._crumbs = False
sb.visual_baseline = False
sb.maximize_option = False
sb.save_screenshot_after_test = False
sb.timeout_multiplier = None
sb.report_on = True
sb.pytest_html_report = "sb_report.html"
sb.with_db_reporting = False
sb.with_s3_logging = False
sb.js_checking_on = False
sb.is_pytest = False
sb.slow_mode = False
sb.demo_mode = False
sb.time_limit = None
sb.demo_sleep = 1
sb.message_duration = 2
sb.block_images = False
sb.settings_file = None
sb.user_data_dir = None
sb.proxy_string = None
sb.swiftshader = False
sb.ad_block_on = False
sb.highlights = None
sb.check_js = False
sb.cap_file = None
sb.cap_string = None

sb.setUp()
try:
    sb.test_basic()
finally:
    sb.tearDown()
    del sb
Enter fullscreen mode Exit fullscreen mode

_

Thread Thread
 
mintzworld profile image
Michael Mintz

Hi,
1) When using a hack like github.com/seleniumbase/SeleniumBa... to avoid using pytest, the variables still need to be initialized because pytest is no longer initializing them.
2) To get a pytest html report, add --html=report.html from the pytest command line (not the test itself!). For the Allure report, use --alluredir=ALLURE_DIR on the command line.
3) When using other pytest fixtures, you need to use SeleniumBase as a fixture for compatibility. See: github.com/seleniumbase/SeleniumBa... for an example of the sb fixture.

Thread Thread
 
sreidhark profile image
sreidhark

Hi
2) Sorry, forgot to mention. I need the report when NOT running from pytest. How do I pass these arguments when running from main?

Thanks
Sri

Thread Thread
 
mintzworld profile image
Michael Mintz

Hi Sri, those reports are specific to pytest plugins: pytest-html and allure-pytest. You'll need to use pytest for those reports to be generated.

Thread Thread
 
sreidhark profile image
sreidhark

Thanks