splinter - python test framework for web applications

Overview
https://secure.travis-ci.org/cobrateam/splinter.svg?branch=master

splinter - python tool for testing web applications

splinter is an open source tool for testing web applications using Python. It lets you automate browser actions, such as visiting URLs and interacting with their items.

Sample code

from splinter import Browser

browser = Browser()
browser.visit('http://google.com')
browser.fill('q', 'splinter - python acceptance testing for web applications')
browser.find_by_name('btnK').click()

if browser.is_text_present('splinter.readthedocs.io'):
    print("Yes, the official website was found!")
else:
    print("No, it wasn't found... We need to improve our SEO techniques")

browser.quit()

Note: if you don't provide any driver argument to the Browser function, firefox will be used (Browser function documentation).

Changelog

First steps

Splinter open source project

Documentation

External links

Comments
  • Browser instance on a network with proxy

    Browser instance on a network with proxy

    Hi.

    I'm trying to run Splinter in a Windows 7 machine, in a local network that needs a proxy.

    When a new instance of the Browser() is created in the python shell, a firefox window pop-ups with the profile different than the one that I use. So, this new instance and profile don't have none of the configs for proxy.

    This is the message generated by the "browser = Browser()" code:

    Traceback (most recent call last): File "C:\Users\cassio.nandi\Desktop\splinter\exemplo.py", line 3, in browser = Browser() File "C:\Python27\lib\site-packages\splinter\browser.py", line 46, in Browser return driver(_args, *_kwargs) File "C:\Python27\lib\site-packages\splinter\driver\webdriver\firefox.py", line 23, in init self.driver = Firefox(firefox_profile) File "C:\Python27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 47, in init desired_capabilities=DesiredCapabilities.FIREFOX) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 61, in init self.start_session(desired_capabilities, browser_profile) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 98, in start_session 'desiredCapabilities': desired_capabilities, File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 144, in execute self.error_handler.check_response(response) File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 100, in check_response raise exception_class(value) WebDriverException: Message: '\n\nERRO: A URL solicitada não pode ser recuperada\n\n\n

    ERRO

    \n

    A URL solicitada não pode ser recuperada

    \n
    \n

    \nNa tentativa de recuperar a URL:\nhttp://127.0.0.1:51372/hub/session\n

    \nO seguinte erro foi encontrado:\n

      \n
    • \n\nProibido o Acesso.\n\n

      \nO controle de acessos impediu sua requisição.\nCaso você não concorde com isso, por favor, \ncontate seu provedor de serviços, ou o administrador de sistemas.\n

    \n

    \n\n\n
    \n
    \n
    \nGenerated Tue, 08 Nov 2011 18:27:08 GMT by proxy (squid/2.6.STABLE21)\n
    \n \n'

    opened by cassionandi 40
  • "visit" API call looks to access the url twice

    Hi,

    I started a django dev server, and accessed the top page of the server using by django shell:

    from splinter.browser import Browser
    browser = Browser('phantomjs')
    browser.visit('http://localhost:8080/')
    

    server log is:

    [04/Jul/2013 20:31:44] "GET / HTTP/1.1" 200 0
    [04/Jul/2013 20:31:44] "GET / HTTP/1.1" 200 0
    

    Why did the "visit" method call access the page twice? It looks bit strange to me.

    thanks.

    opened by kakusuke 30
  • Stabilize tests

    Stabilize tests

    • Nicely skip tests affected by Selenium defect #4814 (the skips will fall away as soon as Selenium is updated)
    • Do a hard sleep before trying to find asynchronously added elements (again to avoid hitting #4814)
    opened by medwards 19
  • Unable to chain find_by_css().find_by_text() with 0.9.0

    Unable to chain find_by_css().find_by_text() with 0.9.0

    https://github.com/cobrateam/splinter/issues/426 seems to have resurfaced in 0.9.0.

    With 0.8.0, browser.find_by_css(".onboarding-modal").find_by_text("Slack") finds one element on my site, but 0.9.0 returns none.

    I think https://github.com/cobrateam/splinter/commit/1cfd05086a5ccb1c3297072e2bc0e713e71b2156 is the commit that changed this behavior.

    I can try to find a reproduceable example on a public site if necessary.

    bug easy good first issue hacktoberfest NeedsInvestigation 
    opened by jacebrowning 17
  • transfer project ownership to jazzband

    transfer project ownership to jazzband

    Hello @jsfehler . Cobrateam seems dead and splinter does not see much activity. Would you please consider transferring ownership to Jazzband? It's an organization of volunteer python maintainers specialized in the python ecosystem. I appreciate splinter and I would like for it to keep living. Thank you very much.

    opened by deronnax 15
  • status_code is only ever 200 - OK.

    status_code is only ever 200 - OK.

    See attached testcase.

    A status_code of 200 seems to be hard-coded since this commit?

    https://github.com/cobrateam/splinter/commit/d151c565c1068c6f0ac3f09ff010353b9b1a9de2

    import splinter
    
    with splinter.Browser('firefox') as browser:
        # should be 200
        browser.visit('http://google.com')
        print(browser.status_code.code)
        print(browser.status_code.is_success())
    
        browser.visit('http://google.com/is_this_a_bug')
        print(browser.status_code.code)
        print(browser.status_code.is_success())
    
        browser.visit('http://github.com/is_this_a_bug/is_this_a_bug_project')
        print(browser.status_code.code)
        print(browser.status_code.is_success())
    
        browser.visit('http://this_domain_doesnt_even_exist.coma')
        print(browser.status_code.code)
        print(browser.status_code.is_success())
    

    Gives this output:

    $ python ./testcase.py 
    200
    True
    200
    True
    200
    True
    200
    True
    

    This should be returning 404 for all but the 1st example.

    bug 
    opened by lexual 15
  • Splinter crashes when using screenshot with pillow with full=True

    Splinter crashes when using screenshot with pillow with full=True

    I am trying to take a screenshot of the nav element with:

       self.browser.find_by_css("nav").first.screenshot('/tmp/nav_screenshot.png', full=True)
    

    which should be pretty much the example in the docs (using css rather than xpath find).

    Full traceback:

    self = <splinter.driver.webdriver.WebDriverElement object at 0x7feb34c09c18>
    name = '/tmp/nav_screenshot.png', suffix = '.png', full = True
    
        def screenshot(self, name='', suffix='.png', full=False):
            name = name or ''
    
            (fd, filename) = tempfile.mkstemp(prefix=name, suffix=suffix)
            # don't hold the file
            os.close(fd)
    
            if full:
                ori_window_size = self.driver.get_window_size()
    >           self._full_screen()
    E           TypeError: _full_screen() takes 0 positional arguments but 1 was given
    
    /usr/local/lib/python3.6/dist-packages/splinter/driver/webdriver/__init__.py:951: TypeError
    

    OS: Ubuntu 18.04.5 LTS Python: 3.6.9 splinter: 0.14.0 Pillow: 7.2.0 (installed via pip after removing python3-pil package)

    Two things to note about "nav":

    1. It is a column on the left hand side of the screen.
    2. It starts in the viewport and extends outside.

    trying to screenshot it without full=True results in: SystemError: tile cannot extend outside image

    Hmph. Looks like bad def of _full_screen in init.py:

        def _full_screen():
            width = self.driver.execute_script("return Math.max(document.body
    .scrollWidth, document.body.offsetWidth);")
            height = self.driver.execute_script("return Math.max(document.bod
    y.scrollHeight, document.body.offsetHeight);")
            self.driver.set_window_size(width, height)
    
    

    Editing this to: def _full_screen(self): (and clearing the file from the cache) makes it blow up further down in /usr/local/lib/python3.6/dist-packages/PIL/ImageFile.py:514 with:

    SystemError: tile cannot extend outside image
    

    Any ideas?

    Thanks.

    -- rouilj

    opened by rouilj 14
  • javascript:void(0) - issue to click on menu

    javascript:void(0) - issue to click on menu

    Splinter version 0.7.7 Python version 2.7.5

    Hello All,

    I'm struggling for clicking on this menu as below:

    <a class="buttons" id="STR_TOPNAV_REMOTE_CONTROL" href="javascript:void(0)" lnavobj="RMCNTRL_LEFTNAV">Remote Control</a>

    I also tried by class, Xpath, by ID with no luck, would you have any suggestion?

    Thanks

    question 
    opened by yannlm1 14
  • Opening a link in a new tab

    Opening a link in a new tab

    Howdy,

    With Selenium, it is easy to open a link in a new tab. Is this even possible with Splinter? I dived deeply into Splinter API documentation but I did not find anything related to tab features.

    Thank you in advance for any hints, Bill BEGUERADJ

    help wanted good first issue 
    opened by begueradj 14
  • Issue 377 start firefox from custom path

    Issue 377 start firefox from custom path

    Pull request for https://github.com/cobrateam/splinter/issues/377.

    I have to say that I'm not particularly proud of the unit tests as they just mock out half the universe. I'd love to get some guidance how you would consider testing this.

    opened by dwt 13
  • Make `fill_form` more robust by requiring form ID.

    Make `fill_form` more robust by requiring form ID.

    Current implementation for fill_form attempts to find fields by their names. However, if the same name is found in multiple places, this method will either fail with a InvalidElementStateException exception or the wrong field may be filled.

    Please see #564 for more info.

    opened by omaciel 12
  • Changed find_by_name to find_by_xpath in fill()

    Changed find_by_name to find_by_xpath in fill()

    When dealing with a page where the name is set dynamically we were not able to use fill() or attach_file() as it was accepting name as a parameter, so changed it to xpath as we can always get a xpath which is unique

    opened by riddhikt 0
  • Can´t find Iframe

    Can´t find Iframe

    So I am trying to find an Iframe with splinter and I can find the first one with,

    with browser.get_iframe('iframemodal') as iframe: iframe.do_stuff()

    and instead of iframemodal I use index which is 0 and this works fine but when I press the box in that Iframe it opens another Iframe without a name or id and everytime the index order of that newly opened iframe changes so I cant use index again it has a title but I think get.iframe doesnt work with css is there a way to find the second iframe ?

    opened by Peliikan 1
  • Error in Docker Container,

    Error in Docker Container, "unknown error: DevToolsActivePort file doesn't exist"

    I'm trying to run a program in a Docker container using Splinter. Here is my Dockerfile

    FROM python:3.7-alpine
    
    COPY requirements.txt . 
    
    RUN apk update && \
        apk add make automake gcc g++ subversion python3-dev && \
        apk add gcc musl-dev python3-dev libffi-dev openssl-dev && \
        apk add chromium chromium-chromedriver && \
        pip install -r /requirements.txt && \
        rm -rf /root/.[acpw]* ipaexg00301*
    
    COPY . /app
    

    After creating the container and running my code in it I get the following error:

    Traceback (most recent call last): File "/app/youversion_ingress.py", line 387, in main() File "/app/youversion_ingress.py", line 375, in main books_df, grouped_df = books_chapter_count(exploded, max_chapters) File "/app/youversion_ingress.py", line 224, in books_chapter_count browser = Browser('chrome') File "/usr/local/lib/python3.6/site-packages/splinter/browser.py", line 101, in Browser return get_driver(driver, retry_count=retry_count, *args, **kwargs) File "/usr/local/lib/python3.6/site-packages/splinter/browser.py", line 76, in get_driver raise err File "/usr/local/lib/python3.6/site-packages/splinter/browser.py", line 72, in get_driver return driver(*args, **kwargs) File "/usr/local/lib/python3.6/site-packages/splinter/driver/webdriver/chrome.py", line 43, in init self.driver = Chrome(options=options, **kwargs) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in init desired_capabilities=desired_capabilities) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in init self.start_session(capabilities, browser_profile) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/lib/chromium/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

    Running my script locally on my machine works fine so it must be something within Docker container. Input and comments would be appreciated.

    opened by oliverdixon85 2
  • ModuleNotFoundError: No module named 'urllib3'

    ModuleNotFoundError: No module named 'urllib3'

    New to using splinter, just pip installed into a venv, and get a ModuleNotFoundError when trying to import:

    % pip install splinter
    Looking in indexes: https://pypi.org/simple
    Collecting splinter
      Using cached splinter-0.18.1-py3-none-any.whl (37 kB)
    Installing collected packages: splinter
    Successfully installed splinter-0.18.1
    
    % python -c "from splinter import Browser"
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/home/rob/tmp/v/lib64/python3.10/site-packages/splinter/__init__.py", line 5, in <module>
        from splinter.browser import Browser  # NOQA
      File "/home/rob/tmp/v/lib64/python3.10/site-packages/splinter/browser.py", line 12, in <module>
        from urllib3.exceptions import MaxRetryError
    ModuleNotFoundError: No module named 'urllib3'
    
    opened by rgilton 5
  • Submitting a form send inputs of type submit that were not clicked

    Submitting a form send inputs of type submit that were not clicked

    Serializing a form is meant to remove inputs of type submit, so that they are not sent: https://github.com//cobrateam/splinter/blob/c04a75dede7f314bba69a7ff188c147417647b12/splinter/driver/lxmldriver.py#L50-L60 (changed in https://github.com//cobrateam/splinter/commit/ad28ab4aeb56cde66a20e67cb3261324eecebeec (#611, for #595)).

    However, since the change it will silently skip errors due to the element not being at the root / a direct child of the form element.

    Changing the code to form_input.getparent().remove(form_input) fixes that, but has the downside of changing the form as a side-effect (i.e. serializing it twice has a different outcome).

    Note that lxml provides helpers to submit a form (https://github.com/lxml/lxml/blob/50c276412880c1a3dde8a6d6c909e3ed8ef47e43/src/lxml/html/init.py#L1081-L1116), and getting a form's values specifically (https://github.com/lxml/lxml/blob/50c276412880c1a3dde8a6d6c909e3ed8ef47e43/src/lxml/html/init.py#L1011-L1041), which should be used here instead probably.

    As a workaround I've used this now:

    from splinter.driver.djangoclient import DjangoClient
    
    class CustomDjangoClient(DjangoClient):
        def serialize(self, form):
            """Work around https://github.com/cobrateam/splinter/issues/1059."""
            return dict(form.form_values())
    
    opened by blueyed 0
  • Clicking a checkbox should not submit the form

    Clicking a checkbox should not submit the form

    Using a Django client, checkboxes are considered to be LxmlControlElements, where click then will submit the form: https://github.com//cobrateam/splinter/blob/986ce0a10c52f08196b32b91f752182cb7517892/splinter/driver/lxmldriver.py#L421-L433

    I've used browser.find_by_id("id_foo").first.click(). The workaround is using browser.check("foo").

    bug django 
    opened by blueyed 1
Releases(0.18.1)
  • 0.18.1(Jun 28, 2022)

    What's New in Splinter 0.18.1?

    Changed:

    • Set Firefox preferences through options instead of FirefoxProfile

    Fixed:

    • Use dedicated logger in browser.py to avoid clobbing other Python logging
    • Removed required selenium import for error handling, making it possible to use splinter without installing selenium (as long as a selenium driver isn't used)
    Source code(tar.gz)
    Source code(zip)
  • 0.18.0(Jun 10, 2022)

    What's New in Splinter 0.18.0?

    Added:

    • WebDriverElement() now implements the shadow_root property. This returns a ShadowRootElement() object to interact with the shadow root of an element.
    • Failed driver imports are logged at the debug level instead of silently ignored
    • browser.html_snapshot() now takes the optional unique_file argument. Setting this to False will disable the addition of random characters to the filename.

    Changed:

    • repr(ElementList()) now returns the repr of the internal container.
    • Driver.find_link_by_ methods have been removed. Use Driver.links.find_by_.
    • Screenshot taken by WebDriverElement.screenshot() now implements Selenium's element screenshot instead of cropping a full page screenshot.
    • Flask/Django's back/forward methods more accurately store browsing history
    • Official Python 3.6 support has been removed

    Fixed:

    • 0.17.0 would report as 0.16.0. 0.18.0 reports correctly.
    • When using Firefox, extensions can now be installed
    Source code(tar.gz)
    Source code(zip)
  • 0.17.0(Dec 20, 2021)

    What's New in Splinter 0.17.0?

    • Added parameter to DriverAPI.screenshot and ElementAPI.screenshot to indicate if unique filename should be ensured (https://github.com/cobrateam/splinter/pull/949)
    • Added Selenium 4 support

    Backward incompatible changes

    • Removed python 2.7 support (https://github.com/cobrateam/splinter/pull/952)
    • Selenium 3 is no longer installed by default. To install Selenium 3, use the selenium3 extra argument
    Source code(tar.gz)
    Source code(zip)
  • 0.16.0(Oct 17, 2021)

    whats's new in splinter 0.16.0?

    • Pin Selenium < 4.0 (https://github.com/cobrateam/splinter/pull/930)
    • Add support for Microsoft Edge (https://github.com/cobrateam/splinter/pull/912)
    • Accept extra arguments for cookies (https://github.com/cobrateam/splinter/pull/895)
    • Fix lxmldriver url join when form action is empty (https://github.com/cobrateam/splinter/pull/900)
    • Use io.open() to fix encoding issues on some platforms (https://github.com/cobrateam/splinter/pull/904)
    • allow passing options to Firefox webdriver (https://github.com/cobrateam/splinter/pull/892)

    Backward incompatible changes

    • Remove sending a list of cookie dicts to CookieManager.add() (https://github.com/cobrateam/splinter/pull/799)
    Source code(tar.gz)
    Source code(zip)
  • 0.15.0(Jun 30, 2021)

    whats's new in splinter 0.15.0?

    • Add more input types to Webdriver clear() (https://github.com/cobrateam/splinter/pull/780)
    • Standardize init of CookieManager (https://github.com/cobrateam/splinter/pull/795)
    • Add delete_all method to CookieManager (https://github.com/cobrateam/splinter/pull/797)
    • Warn user when cookies list is used (https://github.com/cobrateam/splinter/pull/801)
    • Added retry_count to get_driver (https://github.com/cobrateam/splinter/pull/754)
    • Fix full screen screenshot (https://github.com/cobrateam/splinter/pull/810)
    • Add flag to ignore missing fields in fill_form (https://github.com/cobrateam/splinter/pull/821)
    • Opening a link in a new tab (https://github.com/cobrateam/splinter/pull/800)
    Source code(tar.gz)
    Source code(zip)
  • 0.13.0(Dec 15, 2019)

    whats's new in splinter 0.13.0?

    • Patch Remote WebDriver to add retry attempts (https://github.com/cobrateam/splinter/pull/742)
    • Add driver attribute to WebDriverElement. This fixes an issue where mouse interaction fails on nested elements (https://github.com/cobrateam/splinter/pull/740)
    • Fix WebDriverElement.select and .select_by_text to search only inside the parent element (https://github.com/cobrateam/splinter/pull/729)
    • find_by with 0 second wait_time only checks once (https://github.com/cobrateam/splinter/pull/739)
    • Fix FlaskClient redirects (https://github.com/cobrateam/splinter/pull/721)
    Source code(tar.gz)
    Source code(zip)
  • 0.12.0(Dec 9, 2019)

    whats's new in splinter 0.12.0?

    • find_by_text now handle strings with quotation marks (https://github.com/cobrateam/splinter/issues/457)
    • find_link_by methods are now chainable (https://github.com/cobrateam/splinter/pull/699)
    • ElementList.__getattr__() no longer hide ElementNotFound (https://github.com/cobrateam/splinter/pull/707)
    • Firefox headless mode now handle custom firefox_binary option (https://github.com/cobrateam/splinter/pull/714)
    • Firefox driver now respects headless option in subsequent calls (https://github.com/cobrateam/splinter/pull/715)
    • Browser.get_alert() returns None if no alert exists (https://github.com/cobrateam/splinter/issues/387)
    • Retry WebElement.click if Exception is thrown (https://github.com/cobrateam/splinter/pull/725)
    • find_by methods in WebDriverElement now uses retry mechanism (https://github.com/cobrateam/splinter/pull/727)
    • is_not_present/visible returns True immediately after not finding anything (https://github.com/cobrateam/splinter/pull/732)
    • Accept all valid arguments for Remote WebDriver (https://github.com/cobrateam/splinter/pull/734)
    • Allow ActionChains when using Remote WebDriver (https://github.com/cobrateam/splinter/pull/738)
    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Jun 28, 2019)

    whats's new in splinter 0.11.0?

    • Browser.get_alert() returns Alert instead of a wrapper object
    • Add browser.html_snapshot method
    • Allow browser.get_iframe() to accept a web element
    • Fix mouse_out method
    • ElementList is no longer a subclass of list
    • Browser.get_alert() now waits for alert to present
    • Use 'switch_to.alert' instead of deprecated 'switch_to_alert'
    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Nov 16, 2018)

    whats's new in splinter 0.10.0?

    • Scroll to elements before to execute action chains
    • Using options instead firefox_options to avoid warnings (https://github.com/cobrateam/splinter/pull/634)
    • Add support for *args parameter in execute_script (https://github.com/cobrateam/splinter/issues/436)
    • Implement __ne__ in StatusCode (https://github.com/cobrateam/splinter/issues/460)
    • Using the new syntax switch_to_alert instead switch_to.alert to avoid webdriver warnings.
    • CookieManager. __eq__ returns a bool value (https://github.com/cobrateam/splinter/issues/308)
    • Fix find_by_text to be used inside a chain (https://github.com/cobrateam/splinter/issues/6281)
    • Add support for selenium 3.141.0
    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Aug 27, 2018)

    whats's new in splinter 0.9.0?

    • phantomjs support was removed (https://github.com/cobrateam/splinter/issues/592)
    • add options argument for chrome driver (https://github.com/cobrateam/splinter/pull/345)
    • (bugfix) avoid element.find_by_text searches whole dom (https://github.com/cobrateam/splinter/issues/612)
    • add suport for zope.testbrowser 5+
    • handle webdriver StaleElementReferenceException (https://github.com/cobrateam/splinter/issues/541)
    • add support for Flask 1+
    • add support for seleniu 3.14.0
    • update lxml to 4.2.4
    • update cssselect to 1.0.3
    Source code(tar.gz)
    Source code(zip)
  • 0.8.0(May 3, 2018)

    whats's new in splinter 0.8.0?

    • add support for Firefox incognito mode (https://github.com/cobrateam/splinter/pull/578)
    • allow return value for execute_script to be returned (https://github.com/cobrateam/splinter/pull/585)
    • chrome_options parameter renamed to options (https://github.com/cobrateam/splinter/pull/590)
    • removed deprecated mouseover method
    • raises NotImplementedError on status_code in drivers based on webdriver
    • phantomjs is deprecated (this driver will be removed in 0.9.0)
    Source code(tar.gz)
    Source code(zip)
  • 0.7.6(Jul 30, 2017)

    • fix fill_form for select element
    • support chrome headless mode

    you can see more in https://splinter.readthedocs.io/en/latest/news/0.7.6.html

    Source code(tar.gz)
    Source code(zip)
  • 0.7.4(Aug 7, 2016)

    whats's new in splinter 0.7.4?

    • support Selenium 2.53.6
    • find_by_text support quotes (#420).
    • Selenium capabilities for Firefox driver (#417).
    • multi-select support for Django and Flask (#443).
    • custom headers support to Flask (#444).
    • add in operation for cookies (#445).
    • Support for is_element_present_by_* in non-javascript drivers (#463).
    • incognito mode for Google Chrome (#465).
    • support for clearing text field types (#479).
    • allow to pass a chrome Options instance to Browser ([#494 (https://github.com/cobrateam/splinter/pull/494)).
    • new click_link_by_id method (#498).

    Backward incompatible changes

    • RequestHandler is removed and the status use lazy evaluation.
    Source code(tar.gz)
    Source code(zip)
pytest splinter and selenium integration for anyone interested in browser interaction in tests

Splinter plugin for the pytest runner Install pytest-splinter pip install pytest-splinter Features The plugin provides a set of fixtures to use splin

pytest-dev 238 Nov 14, 2022
Pynguin, The PYthoN General UnIt Test geNerator is a test-generation tool for Python

Pynguin, the PYthoN General UnIt test geNerator, is a tool that allows developers to generate unit tests automatically.

Chair of Software Engineering II, Uni Passau 976 Nov 17, 2022
This is a web test framework based on python+selenium

Basic thoughts for this framework There should have a BasePage.py to be the parent page and all the page object should inherit this class BasePage.py

Cactus 2 Mar 9, 2022
A small automated test structure using python to test *.cpp codes

Get Started Insert C++ Codes Add Test Code Run Test Samples Check Coverages Insert C++ Codes you can easily add c++ files in /inputs directory there i

Alireza Zahiri 2 Aug 3, 2022
A framework-agnostic library for testing ASGI web applications

async-asgi-testclient Async ASGI TestClient is a library for testing web applications that implements ASGI specification (version 2 and 3). The motiva

null 122 Nov 7, 2022
a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)

pytest-sugar pytest-sugar is a plugin for pytest that shows failures and errors instantly and shows a progress bar. Requirements You will need the fol

Teemu 945 Nov 21, 2022
Ab testing - The using AB test to test of difference of conversion rate

Facebook recently introduced a new type of offer that is an alternative to the current type of bidding called maximum bidding he introduced average bidding.

null 5 Nov 21, 2022
A set of pytest fixtures to test Flask applications

pytest-flask An extension of pytest test runner which provides a set of useful tools to simplify testing and development of the Flask extensions and a

pytest-dev 433 Nov 8, 2022
A set of pytest fixtures to test Flask applications

pytest-flask An extension of pytest test runner which provides a set of useful tools to simplify testing and development of the Flask extensions and a

pytest-dev 354 Feb 17, 2021
pytest_pyramid provides basic fixtures for testing pyramid applications with pytest test suite

pytest_pyramid pytest_pyramid provides basic fixtures for testing pyramid applications with pytest test suite. By default, pytest_pyramid will create

Grzegorz Śliwiński 12 Nov 3, 2022
A modern API testing tool for web applications built with Open API and GraphQL specifications.

Schemathesis Schemathesis is a modern API testing tool for web applications built with Open API and GraphQL specifications. It reads the application s

Schemathesis.io 1.5k Nov 20, 2022
A modern API testing tool for web applications built with Open API and GraphQL specifications.

Schemathesis Schemathesis is a modern API testing tool for web applications built with Open API and GraphQL specifications. It reads the application s

Schemathesis.io 1.5k Nov 17, 2022
A testing system for catching visual regressions in Web applications.

Huxley Watches you browse, takes screenshots, tells you when they change Huxley is a test-like system for catching visual regressions in Web applicati

Facebook Archive 4.1k Nov 9, 2022
Parameterized testing with any Python test framework

Parameterized testing with any Python test framework Parameterized testing in Python sucks. parameterized fixes that. For everything. Parameterized te

David Wolever 705 Nov 17, 2022
Ward is a modern test framework for Python with a focus on productivity and readability.

Ward is a modern test framework for Python with a focus on productivity and readability.

Darren Burns 1k Nov 18, 2022
Based on the selenium automatic test framework of python, the program crawls the score information of the educational administration system of a unive

whpu_spider 该程序基于python的selenium自动化测试框架,对某高校的教务系统的成绩信息实时爬取,在检测到成绩更新之后,会通过电子邮件的方式,将更新的成绩以文本的方式发送给用户,可以使得用户在不必手动登录教务系统网站时,实时获取成绩更新的信息。 该程序仅供学习交流,不可用于恶意攻

null 1 Dec 30, 2021
Front End Test Automation with Pytest Framework

Front End Test Automation Framework with Pytest Installation and running instructions: 1. To install the framework on your local machine: clone the re

Sergey Kolokolov 2 Jun 17, 2022
Green is a clean, colorful, fast python test runner.

Green -- A clean, colorful, fast python test runner. Features Clean - Low redundancy in output. Result statistics for each test is vertically aligned.

Nathan Stocks 749 Oct 17, 2022
A test fixtures replacement for Python

factory_boy factory_boy is a fixtures replacement based on thoughtbot's factory_bot. As a fixtures replacement tool, it aims to replace static, hard t

FactoryBoy project 3k Nov 22, 2022