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
  • Changelog: Single file?

    Changelog: Single file?

    I think it's far easier to comprehend across multiple versions when release notes are just text, in a single file - without extra distractions / spacing / etc. Is it possible to just to have a single changelog file?

    Example: https://github.com/SeleniumHQ/selenium/blob/selenium-4.7.2-python/py/CHANGES

    opened by tony 0
  • 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
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_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 Dec 04, 2022
Enabling easy statistical significance testing for deep neural networks.

deep-significance: Easy and Better Significance Testing for Deep Neural Networks Contents ⁉️ Why 📥 Installation 🔖 Examples Intermezzo: Almost Stocha

Dennis Ulmer 270 Dec 20, 2022
pytest plugin for testing mypy types, stubs, and plugins

pytest plugin for testing mypy types, stubs, and plugins Installation This package is available on PyPI pip install pytest-mypy-plugins and conda-forg

TypedDjango 74 Dec 31, 2022
Coverage plugin for pytest.

Overview docs tests package This plugin produces coverage reports. Compared to just using coverage run this plugin does some extras: Subprocess suppor

pytest-dev 1.4k Dec 29, 2022
This repository contains a set of benchmarks of different implementations of Parquet (storage format) <-> Arrow (in-memory format).

Parquet benchmarks This repository contains a set of benchmarks of different implementations of Parquet (storage format) - Arrow (in-memory format).

11 Dec 21, 2022
An Instagram bot that can mass text users, receive and read a text, and store it somewhere with user details.

Instagram Bot 🤖 July 14, 2021 Overview 👍 A multifunctionality automated instagram bot that can mass text users, receive and read a message and store

Abhilash Datta 14 Dec 06, 2022
Flexible test automation for Python

Nox - Flexible test automation for Python nox is a command-line tool that automates testing in multiple Python environments, similar to tox. Unlike to

Stargirl Flowers 941 Jan 03, 2023
✅ Python web automation and testing. 🚀 Fast, easy, reliable. 💠

Build fast, reliable, end-to-end tests. SeleniumBase is a Python framework for web automation, end-to-end testing, and more. Tests are run with "pytes

SeleniumBase 3k Jan 04, 2023
Load Testing ML Microservices for Robustness and Scalability

The demo is aimed at getting started with load testing a microservice before taking it to production. We use FastAPI microservice (to predict weather) and Locust to load test the service (locally or

Emmanuel Raj 13 Jul 05, 2022
show python coverage information directly in emacs

show python coverage information directly in emacs

wouter bolsterlee 30 Oct 26, 2022
It helps to use fixtures in pytest.mark.parametrize

pytest-lazy-fixture Use your fixtures in @pytest.mark.parametrize. Installation pip install pytest-lazy-fixture Usage import pytest @pytest.fixture(p

Marsel Zaripov 299 Dec 24, 2022
Django test runner using nose

django-nose django-nose provides all the goodness of nose in your Django tests, like: Testing just your apps by default, not all the standard ones tha

Jazzband 880 Dec 15, 2022
A grab-bag of nifty pytest plugins

A goody-bag of nifty plugins for pytest OS Build Coverage Plugin Description Supported OS pytest-server-fixtures Extensible server-running framework w

Man Group 492 Jan 03, 2023
Compiles python selenium script to be a Window's executable

Problem Statement Setting up a Python project can be frustrating for non-developers. From downloading the right version of python, setting up virtual

Jerry Ng 8 Jan 09, 2023
Automatic SQL injection and database takeover tool

sqlmap sqlmap is an open source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over of

sqlmapproject 25.7k Jan 04, 2023
Spam the buzzer and upgrade automatically - Selenium

CookieClicker Usage: Let's check your chrome navigator version : Consequently, you have to : download the right chromedriver in the follow link : http

Iliam Amara 1 Nov 22, 2021
An improbable web debugger through WebSockets

wdb - Web Debugger Description wdb is a full featured web debugger based on a client-server architecture. The wdb server which is responsible of manag

Kozea 1.6k Dec 09, 2022
A simple serverless create api test repository. Please Ignore.

serverless-create-api-test A simple serverless create api test repository. Please Ignore. Things to remember: Setup workflow Change Name in workflow e

Sarvesh Bhatnagar 1 Jan 18, 2022
A web scraping using Selenium Webdriver

Savee - Images Downloader Project using Selenium Webdriver to download images from someone's profile on https:www.savee.it website. Usage The project

Caio Eduardo Lobo 1 Dec 17, 2021
pytest plugin for a better developer experience when working with the PyTorch test suite

pytest-pytorch What is it? pytest-pytorch is a lightweight pytest-plugin that enhances the developer experience when working with the PyTorch test sui

Quansight 39 Nov 18, 2022