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)
A simple script to login into twitter using Selenium in python.

Quick Talk A simple script to login into twitter using Selenium in python. I was looking for a way to login into twitter using Selenium in python. Sin

Lzy-slh 4 Nov 20, 2022
catsim - Computerized Adaptive Testing Simulator

catsim - Computerized Adaptive Testing Simulator Quick start catsim is a computerized adaptive testing simulator written in Python 3.4 (with modificat

Nguyễn Văn Anh Tuấn 1 Nov 29, 2021
WIP SAT benchmarking tooling, written with only my personal use in mind.

SAT Benchmarking Some early work in progress tooling for running benchmarks and keeping track of the results when working on SAT solvers and related t

Jannis Harder 1 Dec 26, 2021
Webscreener is a tool for mass web domains pentesting.

Webscreener is a tool for mass web domains pentesting. It is used to take snapshots for domains that is generated by a tool like knockpy or Sublist3r. It cuts out most of the pentesting time by scree

Seekurity 3 Jun 07, 2021
The async ready version of the AniManga library created by centipede000.

Async-Animanga An Async/Aiohttp compatible library. Async-Animanga is an async ready web scraping library that returns Manga information from animepla

3 Sep 22, 2022
Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source.

Mockoon Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source. It has been built wi

mockoon 4.4k Dec 30, 2022
User-oriented Web UI browser tests in Python

Selene - User-oriented Web UI browser tests in Python (Selenide port) Main features: User-oriented API for Selenium Webdriver (code like speak common

Iakiv Kramarenko 575 Jan 02, 2023
Minimal example of getting Django + PyTest running on GitHub Actions

Minimal Django + Pytest + GitHub Actions example This minimal example shows you how you can runs pytest on your Django app on every commit using GitHu

Matt Segal 5 Sep 19, 2022
A Proof of concept of a modern python CLI with click, pydantic, rich and anyio

httpcli This project is a proof of concept of a modern python networking cli which can be simple and easy to maintain using some of the best packages

Kevin Tewouda 17 Nov 15, 2022
FaceBot is a script to automatically create a facebook account using the selenium and chromedriver modules.

FaceBot is a script to automatically create a facebook account using the selenium and chromedriver modules. That way, we don't need to input full name, email and password and date of birth. All will

Fadjrir Herlambang 2 Jun 17, 2022
Automação de Processos (obtenção de informações com o Selenium), atualização de Planilha e Envio de E-mail.

Automação de Processo: Código para acompanhar o valor de algumas ações na B3. O código entra no Google Drive, puxa os valores das ações (pré estabelec

Hemili Beatriz 1 Jan 08, 2022
Mock smart contracts for writing Ethereum test suites

Mock smart contracts for writing Ethereum test suites This package contains comm

Trading Strategy 222 Jan 04, 2023
Scraping Bot for the Covid19 vaccination website of the Canton of Zurich, Switzerland.

Hi 👋 , I'm David A passionate developer from France. 🌱 I’m currently learning Kotlin, ReactJS and Kubernetes 👨‍💻 All of my projects are available

1 Nov 14, 2021
Checks for a 200 response from your subdomain list.

Check for available subdomains Written in Python, this terminal based application looks for a 200 response from the subdomain list you've provided. En

Sean 1 Nov 03, 2021
A tool to auto generate the basic mocks and asserts for faster unit testing

Mock Generator A tool to generate the basic mocks and asserts for faster unit testing. 🎉 New: you can now use pytest-mock-generator, for more fluid p

31 Dec 24, 2022
Plugin for generating HTML reports for pytest results

pytest-html pytest-html is a plugin for pytest that generates a HTML report for test results. Resources Documentation Release Notes Issue Tracker Code

pytest-dev 548 Dec 28, 2022
Whatsapp messages bulk sender using Python Selenium.

Whatsapp Sender Whatsapp Sender automates sending of messages via Whatsapp Web. The tool allows you to send whatsapp messages in bulk. This program re

Yap Yee Qiang 3 Jan 23, 2022
Generates realistic traffic for load testing tile servers

Generates realistic traffic for load testing tile servers. Useful for: Measuring throughput, latency and concurrency of your tile serving stack. Ident

Brandon Liu 23 Dec 05, 2022
Aplikasi otomasi klik di situs popcat.click menggunakan Python dan Selenium

popthe-popcat Aplikasi Otomasi Klik di situs popcat.click. aplikasi ini akan secara otomatis melakukan click pada kucing viral itu, sehingga anda tida

cndrw_ 2 Oct 07, 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 Jan 05, 2023