A testing system for catching visual regressions in Web applications.

Related tags

Testing huxley
Overview

Huxley

Watches you browse, takes screenshots, tells you when they change

Huxley is a test-like system for catching visual regressions in Web applications. It was built by Pete Hunt with input from Maykel Loomans at Instagram.

Archived Repo

This is an archived project and is no longer supported or updated by Facebook or Instagram. Please do not file issues or pull-requests against this repo. If you wish to continue to develop this code yourself, we recommend you fork it.

What is the problem?

  • UI tests are hard to write and are usually fragile.
  • Automated testing can't tell you if something doesn't look right, so UI regressions may go undetected.
  • It can be difficult for designers to participate in the code review process even though reviewing the way the UI looks is just as important as reviewing the code that creates it.

How does Huxley help me?

Huxley runs in two modes:

Record mode

Using Selenium WebDriver, Huxley opens a page and records your actions. When you press enter in the Huxley terminal, Huxley will save a screenshot.

Testing a new flow is as simple as manually testing it once. Huxley will remember and re-run your "manual" test plan for you automatically.

Playback mode

You should run Huxley in playback mode before submitting code for review and in continuous integration. Huxley will open the page and re-run your actions with WebDriver. It will take screenshots and compare them with the original screenshots. If they have changed, it will save the new screenshots and warn you that they have changed.

When screenshots have changed, those screenshot changes will show up in your commit. A designer can review them to be sure they're OK. And your continuous integration system can alert you if you forgot to run Huxley.

By default, Huxley will overwrite the old screenshots with new ones. That means you don't have to rewrite anything when your UI changes like you would with a traditional WebDriver test -- Huxley will just take a new screenshot for you and when it's checked in your test is updated!

Installation

pip install huxley

Tutorial

In examples/ you'll find two simple completed Huxley tests. To start from scratch, simply remove toggle.huxley, type.huxley and Huxleyfile.

Motivation

In examples/webroot/toggle.html you'll find a very simple JavaScript application that implements a toggle button. The goal of Huxley is to make creating an integration for this component effortless, and to make it easy to update the test when the UI changes.

Step 1: host your app somewhere

For our example, simply cd to examples/webroot and run python -m SimpleHTTPServer to start a basic server for our demo. In your app you may need to start up whatever framework you're using.

Step 2: create a Huxleyfile

A Huxleyfile describes your test. Create one that looks like this:

[toggle]
url=http://localhost:8000/toggle.html

This creates a test named toggle that tests the URL http://localhost:8000/toggle.html.

Step 2: record the test

Huxley makes writing tests easy because it simply records your browser session -- specifically mouse clicks and key presses on a single page -- and can replay them in an automated way. To do this you need to install Selenium Server and start it. It's as easy as java -jar selenium-server-standalone-XXX.jar.

Then, run Huxley in record mode: huxley --record. Huxley will bring up a browser using Selenium. Press enter in the Huxley console to take a screen shot of the initial page load. Then toggle the button in the browser a few times. After every click, switch back to the Huxley console to take a screen shot. When you've tested all of the functionality you want to test, simply type q and then enter in the Huxley console to exit.

After confirming, Huxley will automatically record the test for you and save it to disk as toggle.huxley. Be sure to commit the Huxleyfile as well as toggle.huxley into your repository so you can track changes to them.

Step 3: playback

Simply run the huxley command in the same directory as the Huxleyfile to be sure that your app still works.

Step 4: update the test with new screen shots

You'll likely update the UI of the component a lot without changing its core functionality. Huxley can take new screen shots for you when this happens. Tweak the UI of the component in toggle.html somehow (maybe change the button color or something) and re-run huxley. It will warn you that the UI has changed and will automatically write new screen shots for you. If you run huxley again, the test will pass since the screen shots were updated.

The best part is, since the screen shots are checked into the repository, you can review the changes to the UI as part of the code review process if you'd like. At Instagram we have frontend engineers reviewing the JavaScript and designers reviewing the screenshots to ensure that they're pixel perfect.

Step 5: run in CI mode

If you're using a continuous integration solution like Jenkins you probably don't want to automatically rerecord screen shots on failure. Simply run huxley --playback-only to do this.

Additionally, you may find that you're dissatisfied with Huxley replaying your browsing session in real-time. You can speed it up (or slow it down) by editing your Huxleyfile to read:

[toggle]
url=http://localhost:8000/toggle.html
sleepfactor=0.5

This edit should cut the execution time in half.

Best practices

Integration tests sometimes get a bad rap for testing too much at once. We've found that if you use integration tests correctly they can be just as effective and accurate as unit tests. Simply follow a few best practices:

  • Don't test a live app. Use mocking to make your components reliable instead. If you hit your live app, failures in any number of places could trigger false failures in your UI tests. Instead of hitting a real URL in your app, create a dedicated test URL for Huxley to hit that uses mocking (and perhaps dependency injection) to isolate your UI component as much as possible. Huxley is completely unopinionated; use whatever tools you want to do this.
  • Test a small unit of functionality. You should try to isolate your UI into modular components and test each one individually. Additionally, try to test one interaction per Huxley test so that when it fails, it's easy to tell exactly which interaction is problematic and it's faster to re-run it.

Technical FAQ

Why does Huxley stop recording when I navigate away from the page?

Huxley is designed for testing JavaScript UI components at this time. We've found that you can test multiple pages by creating a new Huxley test for each URL. This is valuable even if you don't use the interactive features of Huxley because it will ensure your static pages stay pixel perfect.

I can't tell what changed!

It's usually best if you use an image comparison tool like Kaleidoscope to tell what changed. But Huxley includes a simple image diff tool; simply run huxley with the --save-diff option to output a diff.png which will show you the pixels that changed.

How do I use a remote webdriver server?

You can set the HUXLEY_WEBDRIVER_LOCAL environment variable to tell Huxley which webdriver URL to use for --record mode. You can set the HUXLEY_WEBDRIVER_REMOTE environment variable to tell Huxley which webdriver URL to use for screenshots and playback. Usually you only need to use this when working in a team setting such that everyone's screenshots are taken on the same machine configuration (otherwise they'll change depending on who ran them last).

Can I test responsive design?

Of course! Simply add a screensize setting to your Huxleyfile. The default is screensize=1024x768.

Philosophical FAQ

Why would you use this instead of unit testing?

First of all, if you sufficiently componentize your UI, Huxley can be used as a unit testing tool.

With that said, unit tests have two shortcomings today.

  • They usually take a long time to write. Instagram on the web had a single engineer and a designer working on a ton of things in parallel, and we didn't have time to write beautifully isolated tests with elegant dependency injection and comprehensive assertions. We just had to make sure that we didn't cause bugs when we were frantically shipping code. A lot of small web teams can probably identify with this.
  • They do not test the look of the UI. Huxley does pixel-by-pixel comparisons of the UI. Traditional UI test systems inspect the DOM but do not look at how it actually renders. We once had a bug where a CSS rule made the height of all image components 0px; without a pixel-by-pixel comparison it's unlikely we would have ever written an explicit test for this.

What's the best way to use Huxley?

Use it however you want! But we generally shell out to it from within an existing test runner (i.e. Django or Rails). This lets us programmatically start a test server for Huxley to hit.

If you're using Python, you can use Huxley directly in a test (see huxley.integration.HuxleyTestCase) or browse the source to see its core APIs.

If you're on a team I recommend setting up webdriver on a shared server and changing the HUXLEY_WEBDRIVER_REMOTE environment variable such that everyone's screenshots are pixel perfect (see the technical FAQ above).

Why is it called Huxley?

Lots of test frameworks and methodologies are very opinionated about how your code should be structured or how you should write tests. Some tools are so opinionated that they're almost religious about their view of testing! We wanted a tool that got out of our way and let us fight regressions as quickly and easily as possible without being opinionated about it. So we named it after the guy who coined the term "agnostic", Thomas Henry Huxley.

Comments
  • Huxley failing immediately after --record (on a test app) and on any running of tests in example app

    Huxley failing immediately after --record (on a test app) and on any running of tests in example app

    I am trying to get Huxley up and running so I can evaluate it, and see if it fits my needs. Unfortunately I can't.

    I installed Huxley, pip install huxley.

    I did have to install all the dependencies manually, pip install jsonpickle, pip install plac, pip install selenium, pip install PIL.

    Example App

    I navigate to /examples/webroot/ and fire up the example app, python -m SimpleHTTPServer.

    When I run the tests, huxley, I get the following:

    Fail 1 Gist

    Test App

    My Huxleyfile looks like this;

    [index]
    url=http://localhost:3000/
    

    I navigate to my test app's huxley directory, and try and record, huxley --record.

    First, I get 2 Firefox windows that open;

    screen shot 2013-09-16 at 4 14 47 pm

    After I have clicked around, and made my screen shots, when huxley begins re-running my actions, the empty window closes;

    screen shot 2013-09-16 at 4 15 11 pm

    Then the whole thing fails;

    Fail 2 Gist

    I really love the idea of Huxley, and want to use it, but this is keeping me from evaluating it. Any thoughts?

    opened by igreulich 21
  • just tried to install it on windows

    just tried to install it on windows

    pip install huxley ...

    File "build\bdist.win32\egg\setuptools\command\egg_info.py", line 369, in add_ defaults

    File "build\bdist.win32\egg\setuptools\command\sdist.py", line 296, in read_ma nifest

    File "build\bdist.win32\egg\setuptools\command\egg_info.py", line 284, in appe nd

    File "c:\Python27\lib\distutils\util.py", line 124, in convert_path

    raise ValueError, "path '%s' cannot be absolute" % pathname
    

    ValueError: path '/' cannot be absolute


    opened by pythonmobile 12
  • Missing dependencies for `pip install huxley`

    Missing dependencies for `pip install huxley`

    pip install huxley failed, so I had to run the following individually:

    $ pip install jsonpickle
    $ pip install plac
    $ pip install selenium
    $ pip install pil
    

    Finally, I could run:

    $ pip install huxley
    

    Want me to add this to the README?

    opened by ericclemmons 7
  • Next release: fully automated option

    Next release: fully automated option

    Would it be possible for Huxley to automatically run through each webpage, without any action from the user (including rerecord) when specified?

    In the Huxleyfile, an option like autorecord=true could be added for each test, which would mean on pages where no GUI changes majorly, testing is much faster.

    opened by nathanbirrell 6
  • Improve the `window._getHuxleyEvents is not a function` exception

    Improve the `window._getHuxleyEvents is not a function` exception

    I am trying to get Huxley to work on a simple login flow where I enter the username/password and the page redirects to a different url after login. While I can capture the screenshots, when I hit q+enter I get the below error. Can I use huxley to test scenarios like these?

    Note that Huxley works otherwise when I am testing a single page like the toggle example included.

    Press enter to take a screenshot, or type Q+enter if you're done
    q
    Traceback (most recent call last):
      File "/usr/local/bin/huxley", line 9, in <module>
        load_entry_point('Huxley==0.2', 'console_scripts', 'huxley')()
      File "/usr/local/lib/python2.7/dist-packages/huxley/cmdline.py", line 126, in main
        sys.exit(plac.call(_main))
      File "/usr/local/lib/python2.7/dist-packages/plac_core.py", line 309, in call
        cmd, result = parser_from(obj).consume(arglist)
      File "/usr/local/lib/python2.7/dist-packages/plac_core.py", line 195, in consume
        return cmd, self.func(*(args + varargs + extraopts), **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/huxley/cmdline.py", line 105, in _main
        record=True
      File "/usr/local/lib/python2.7/dist-packages/huxley/main.py", line 109, in main
        TestRun.record(local_d, d, (url, postdata), screensize, filename, diffcolor, sleepfactor, save_diff)
      File "/usr/local/lib/python2.7/dist-packages/huxley/run.py", line 127, in record
        events = d.execute_script('return window._getHuxleyEvents();')
      File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 397, in execute_script
        {'script': script, 'args':converted_args})['value']
      File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute
        self.error_handler.check_response(response)
      File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 152, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.WebDriverException: Message: u"window._getHuxleyEvents is not a function\nBuild info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38'\nSystem info: os.name: 'Linux', os.arch: 'i386', os.version: '3.5.0-36-generic', java.version: '1.7.0_25'\nDriver info: driver.version: unknown" ; Screenshot: available via screen ; Stacktrace: Method anonymous threw an error in http://localhost:8000/<redirected-url>
    
    opened by ratpik 6
  • After taken screenshots q+enter exit huxley report error and record.json file is empty

    After taken screenshots q+enter exit huxley report error and record.json file is empty

    Exception in thread Thread-1: Traceback (most recent call last): File "E:\Python27\lib\threading.py", line 810, in **bootstrap_inner self.run() File "E:\Python27\lib\threading.py", line 763, in run self.__target(_self.__args, _self.__kwargs) File "build\bdist.win-amd64\egg\huxley\threadpool.py", line 32, in thread func(_args, _kwargs) File "build\bdist.win-amd64\egg\huxley\cmdline.py", line 69, in run_test screensize=screensize File "build\bdist.win-amd64\egg\huxley\main.py", line 137, in main return 0 File "E:\Python27\lib\contextlib.py", line 154, in __exit self.thing.close() File "E:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriv er\remote\webdriver.py", line 445, in close self.execute(Command.CLOSE) File "E:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriv er\remote\webdriver.py", line 165, in execute self.error_handler.check_response(response) File "E:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriv er\remote\errorhandler.py", line 164, in check_response raise exception_class(message, screen, stacktrace) WebDriverException: Message: u"Error communicating with the remote browser. It m ay have died.\nBuild info: version: '2.39.0', revision: 'ff23eac', time: '2013-1 2-16 16:11:15'\nSystem info: host: 'hugoxie-PC0', ip: '10.33.64.52', os.name: 'W indows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_45'\nDriver info: driver.version: EventFiringWebDriver" ; Stacktrace:

    opened by hugoxie 5
  • TestError: Screenshot 0 was different.

    TestError: Screenshot 0 was different.

    One particular error keeps getting returned when I record and run the Huxley tests, on particular pages only. This error has been found before and the solution was unclear (#27).

    Here's an example of the error returned on such pages:

    
    NathanMBA:test nathan$ huxley  --record
    --------------------------------------
    Running Huxley file: HuxleyfileCurrent
    --------------------------------------
    [UTIL02-0_FAQs.html] Running test: UTIL02-0_FAQs.html
    Begin record
    Press enter to take a screenshot, or type Q+enter if you're done
    
    1 screenshots taken
    Press enter to take a screenshot, or type Q+enter if you're done
    q
    
    Up next, we'll re-run your actions to generate screenshots to ensure they are pixel-perfect when running automated. Press enter to start.
    
    Begin rerecord
      Sleeping for 1395.0 ms
      Clicking [726, 285]
      Sleeping for 2284.0 ms
      Taking screenshot 0
    
    Playing back to ensure the test is correct
    
    Begin playback
      Sleeping for 1395.0 ms
      Clicking [726, 285]
      Sleeping for 2284.0 ms
      Taking screenshot 0
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 808, in __bootstrap_inner
        self.run()
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 761, in run
        self.__target(*self.__args, **self.__kwargs)
      File "build/bdist.macosx-10.9-intel/egg/huxley/threadpool.py", line 32, in >thread
        func(*args, **kwargs)
      File "build/bdist.macosx-10.9-intel/egg/huxley/cmdline.py", line 69, in >run_test
        screensize=screensize
      File "build/bdist.macosx-10.9-intel/egg/huxley/main.py", line 110, in main
        TestRun.record(local_d, d, (url, postdata), screensize, filename, >diffcolor, sleepfactor, save_diff)
      File "build/bdist.macosx-10.9-intel/egg/huxley/run.py", line 152, in record
        cls.rerecord(test, path, url, remote_d, sleepfactor, diffcolor, save_diff)
      File "build/bdist.macosx-10.9-intel/egg/huxley/run.py", line 79, in rerecord
        cls.playback(test, path, url, d, sleepfactor, diffcolor, save_diff)
      File "build/bdist.macosx-10.9-intel/egg/huxley/run.py", line 85, in playback
        run._playback(sleepfactor)
      File "build/bdist.macosx-10.9-intel/egg/huxley/run.py", line 95, in _playback
        step.execute(self)
      File "build/bdist.macosx-10.9-intel/egg/huxley/steps.py", line 103, in >execute
    
       raise TestError('Screenshot %s was different.' % self.index)
    
    TestError: Screenshot 0 was different.
    
    

    The page has no animation or anything on it that would cause the screenshot to be different.

    opened by nathanbirrell 5
  • Entire page ScreenShots

    Entire page ScreenShots

    Im trying to implement Huxley as way to test css regression, using the project Styleguide as the canonical source where the tests happen.

    Although i get the idea of single function testing, most tests require a full page screenshot, instead of just a small portion.

    Any way I can do that?

    opened by lmartins 5
  • Modified retrieval of version info to fix install issue.

    Modified retrieval of version info to fix install issue.

    If you try to install huxley within a clean environment, like virtualenv, then setup tries to import huxley to get version information before the dependencies are install. This puts setup into a catch-22 as importing huxley also tries to input uninstalled dependencies.

    Sample test code to verify issue and fix ...

    $ mkdir install-huxley-test
    $ cd install-huxley-test
    
    ~/install-huxley-test $ git clone [email protected]:emanlove/huxley.git emanlove
    

    First revert my fix to show issue

    ~/install-huxley-test $ cd emanlove
    ~/install-huxley-test/emanlove $ git checkout HEAD^ setup.py
    ~/install-huxley-test/emanlove $ cd ..
    
    ~/install-huxley-test $ virtualenv -p /usr/bin/python2.6 --no-site-packages clean-python-env
    ~/install-huxley-test $ source ~/clean-python-env/bin/activate
    (clean-python-env) ~/install-huxley-test $ cd emanlove
    (clean-python-env) ~/install-huxley-test/emanlove $ python setup.py install
    
    (clean-python-env) ~/install-huxley-test/emanlove $ deactivate
    

    Reapply my fix and regenerate clean virtualenv

    ~/install-huxley-test/emanlove $ git checkout HEAD setup.py
    ~/install-huxley-test/emanlove $ cd ..
    
    ~/install-huxley-test $ virtualenv -p /usr/bin/python2.6 --no-site-packages clean-python-env
    ~/install-huxley-test $ source ~/clean-python-env/bin/activate
    (clean-python-env) ~/install-huxley-test $ cd emanlove
    (clean-python-env) ~/install-huxley-test/emanlove $ python setup.py install
    

    Note I am working on signing CLA via directly signing the Word document as I don't have a FB account.

    opened by emanlove 5
  • Launching two firefox browsers in the record mode

    Launching two firefox browsers in the record mode

    Hi, I've installed Huxley using zip file on windows 7 64-bit. I've two selenium-webdriver versions (2.0.32 and 2.0.33) installed on my system. When I launched Huxley in record mode, it is launching two firefox browsers and from the second browser it is taking the screen shots. When I quit from Huxley, script ends with an error saying that event function not able to record the events. In the resultant created file, "record.json" is empty.I'm using 'selenium-server-standalone-2.33.0.jar'.

    Please assist in resolving this problem.

    opened by bharatvamsi 5
  • Cannot install:

    Cannot install: "Could not find any downloads that satisfy the requirement PIL==1.1.7 (from huxley)"

    On installation, I receive this when the Huxley installation reaches PIL.

    Could not find any downloads that satisfy the requirement PIL==1.1.7 (from huxley)
    Some externally hosted files were ignored (use --allow-external PIL to allow).
    Cleaning up...
    No distributions at all found for PIL==1.1.7 (from huxley)
    Storing debug log for failure in /Users/nathan/Library/Logs/pip.log
    

    Have installed Pillow separately, still receiving issue.

    screenshot 2014-01-23 09 32 59

    opened by nathanbirrell 4
  • Bump pillow from 2.2.1 to 8.3.2

    Bump pillow from 2.2.1 to 8.3.2

    Bumps pillow from 2.2.1 to 8.3.2.

    Release notes

    Sourced from pillow's releases.

    8.3.2

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.2.html

    Security

    • CVE-2021-23437 Raise ValueError if color specifier is too long [hugovk, radarhere]

    • Fix 6-byte OOB read in FliDecode [wiredfool]

    Python 3.10 wheels

    • Add support for Python 3.10 #5569, #5570 [hugovk, radarhere]

    Fixed regressions

    • Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 [kmilos, radarhere]

    • Updates for ImagePalette channel order #5599 [radarhere]

    • Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library #5651 [nulano]

    8.3.1

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.1.html

    Changes

    8.3.0

    https://pillow.readthedocs.io/en/stable/releasenotes/8.3.0.html

    Changes

    ... (truncated)

    Changelog

    Sourced from pillow's changelog.

    8.3.2 (2021-09-02)

    • CVE-2021-23437 Raise ValueError if color specifier is too long [hugovk, radarhere]

    • Fix 6-byte OOB read in FliDecode [wiredfool]

    • Add support for Python 3.10 #5569, #5570 [hugovk, radarhere]

    • Ensure TIFF RowsPerStrip is multiple of 8 for JPEG compression #5588 [kmilos, radarhere]

    • Updates for ImagePalette channel order #5599 [radarhere]

    • Hide FriBiDi shim symbols to avoid conflict with real FriBiDi library #5651 [nulano]

    8.3.1 (2021-07-06)

    • Catch OSError when checking if fp is sys.stdout #5585 [radarhere]

    • Handle removing orientation from alternate types of EXIF data #5584 [radarhere]

    • Make Image.array take optional dtype argument #5572 [t-vi, radarhere]

    8.3.0 (2021-07-01)

    • Use snprintf instead of sprintf. CVE-2021-34552 #5567 [radarhere]

    • Limit TIFF strip size when saving with LibTIFF #5514 [kmilos]

    • Allow ICNS save on all operating systems #4526 [baletu, radarhere, newpanjing, hugovk]

    • De-zigzag JPEG's DQT when loading; deprecate convert_dict_qtables #4989 [gofr, radarhere]

    • Replaced xml.etree.ElementTree #5565 [radarhere]

    ... (truncated)

    Commits
    • 8013f13 8.3.2 version bump
    • 23c7ca8 Update CHANGES.rst
    • 8450366 Update release notes
    • a0afe89 Update test case
    • 9e08eb8 Raise ValueError if color specifier is too long
    • bd5cf7d FLI tests for Oss-fuzz crash.
    • 94a0cf1 Fix 6-byte OOB read in FliDecode
    • cece64f Add 8.3.2 (2021-09-02) [CI skip]
    • e422386 Add release notes for Pillow 8.3.2
    • 08dcbb8 Pillow 8.3.2 supports Python 3.10 [ci skip]
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    CLA Signed dependencies 
    opened by dependabot[bot] 0
  • URLError

    URLError

    Hi,

    I am getting below error when trying to run the demo itself.

    URLError: urlopen error [Errno 10061] No connection could be made because the target machine actively refused it

    Please help.

    opened by pradeepyadav15may 3
  • monitor page changes by page-monitor

    monitor page changes by page-monitor

    I created a repos named page-monitor last year, it can catch the diff between two version of a page, based on dom tree diff, and markup the diff one the screenshots, it can also recognize style changed, content changed, element added or element removed, and you can configure the capture options to filter some elemes.

    Element Add

    Element Removed

    Content Changed

    Style Changed

    I hope it could help with this project.

    opened by fouber 0
  • getting error during playback on Mac.

    getting error during playback on Mac.

    I am getting this error during the playback. I successfully recorded a case and taking 3 picture by huxley --record then quit and trying to check on firefox as following:

    ~/P/h/examples (master ⚡=) huxley --record
    -------------------------------
    Running Huxley file: Huxleyfile
    -------------------------------
    [toggle] Running test: toggle
    Begin record
    Press enter to take a screenshot, or type Q+enter if you're done
    
    1 screenshots taken
    Press enter to take a screenshot, or type Q+enter if you're done
    
    2 screenshots taken
    Press enter to take a screenshot, or type Q+enter if you're done
    
    3 screenshots taken
    Press enter to take a screenshot, or type Q+enter if you're done
    q
    
    Up next, we'll re-run your actions to generate screenshots to ensure they are pixel-perfect when running automated. Press enter to start.
    
    Begin rerecord
      Sleeping for 5281.0 ms
      Taking screenshot 0
      Sleeping for 9555.0 ms
      Clicking [236, 153]
      Sleeping for 5554.0 ms
      Taking screenshot 1
      Sleeping for 11236.0 ms
      Clicking [326, 363]
      Sleeping for 6201.0 ms
      Taking screenshot 2
    
    Playing back to ensure the test is correct
    
    Begin playback
      Sleeping for 5281.0 ms
      Taking screenshot 0
    Exception in thread Thread-1:
    Traceback (most recent call last):
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 808, in __bootstrap_inner
        self.run()
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 761, in run
        self.__target(*self.__args, **self.__kwargs)
      File "/Library/Python/2.7/site-packages/huxley/threadpool.py", line 32, in thread
        func(*args, **kwargs)
      File "/Library/Python/2.7/site-packages/huxley/cmdline.py", line 69, in run_test
        screensize=screensize
      File "/Library/Python/2.7/site-packages/huxley/main.py", line 110, in main
        TestRun.record(local_d, d, (url, postdata), screensize, filename, diffcolor, sleepfactor, save_diff)
      File "/Library/Python/2.7/site-packages/huxley/run.py", line 152, in record
        cls.rerecord(test, path, url, remote_d, sleepfactor, diffcolor, save_diff)
      File "/Library/Python/2.7/site-packages/huxley/run.py", line 79, in rerecord
        cls.playback(test, path, url, d, sleepfactor, diffcolor, save_diff)
      File "/Library/Python/2.7/site-packages/huxley/run.py", line 85, in playback
        run._playback(sleepfactor)
      File "/Library/Python/2.7/site-packages/huxley/run.py", line 95, in _playback
        step.execute(self)
      File "/Library/Python/2.7/site-packages/huxley/steps.py", line 103, in execute
        raise TestError('Screenshot %s was different.' % self.index)
    TestError: Screenshot 0 was different.
    
    opened by gunesmes 0
Owner
Facebook Archive
These projects have been archived and are generally unsupported, but are still available to view and use
Facebook Archive
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.6k Dec 30, 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 22, 2022
PENBUD is penetration testing buddy which helps you in penetration testing by making various important tools interactive.

penbud - Penetration Tester Buddy PENBUD is penetration testing buddy which helps you in penetration testing by making various important tools interac

Himanshu Shukla 15 Feb 1, 2022
pytest plugin for distributed testing and loop-on-failures testing modes.

xdist: pytest distributed testing plugin The pytest-xdist plugin extends pytest with some unique test execution modes: test run parallelization: if yo

pytest-dev 1.1k Dec 30, 2022
PacketPy is an open-source solution for stress testing network devices using different testing methods

PacketPy About PacketPy is an open-source solution for stress testing network devices using different testing methods. Currently, there are only two c

null 4 Sep 22, 2022
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 4, 2022
Percy visual testing for Python Selenium

percy-selenium-python Percy visual testing for Python Selenium. Installation npm install @percy/cli: $ npm install --save-dev @percy/cli pip install P

Percy 9 Mar 24, 2022
Tattoo - System for automating the Gentoo arch testing process

Naming origin Well, naming things is very hard. Thankfully we have an excellent

Arthur Zamarin 4 Nov 7, 2022
Web testing library for Robot Framework

SeleniumLibrary Contents Introduction Keyword Documentation Installation Browser drivers Usage Extending SeleniumLibrary Community Versions History In

Robot Framework 1.2k Jan 3, 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 4, 2023
WEB PENETRATION TESTING TOOL 💥

N-WEB ADVANCE WEB PENETRATION TESTING TOOL Features ?? Admin Panel Finder Admin Scanner Dork Generator Advance Dork Finder Extract Links No Redirect H

null 56 Dec 23, 2022
splinter - python test framework for web applications

splinter - python tool for testing web applications splinter is an open source tool for testing web applications using Python. It lets you automate br

Cobra Team 2.6k Dec 27, 2022
splinter - python test framework for web applications

splinter - python tool for testing web applications splinter is an open source tool for testing web applications using Python. It lets you automate br

Cobra Team 2.3k Feb 5, 2021
UUM Merit Form Filler is a web automation which helps automate entering a matric number to the UUM system in order for participants to obtain a merit

About UUM Merit Form Filler UUM Merit Form Filler is a web automation which helps automate entering a matric number to the UUM system in order for par

Ilham Rachmat 3 May 31, 2022
Hypothesis is a powerful, flexible, and easy to use library for property-based testing.

Hypothesis Hypothesis is a family of testing libraries which let you write tests parametrized by a source of examples. A Hypothesis implementation the

Hypothesis 6.4k Jan 5, 2023
Generic automation framework for acceptance testing and RPA

Robot Framework Introduction Installation Example Usage Documentation Support and contact Contributing License Introduction Robot Framework is a gener

Robot Framework 7.7k Jan 7, 2023
Scalable user load testing tool written in Python

Locust Locust is an easy to use, scriptable and scalable performance testing tool. You define the behaviour of your users in regular Python code, inst

Locust.io 20.4k Jan 4, 2023
Sixpack is a language-agnostic a/b-testing framework

Sixpack Sixpack is a framework to enable A/B testing across multiple programming languages. It does this by exposing a simple API for client libraries

null 1.7k Dec 24, 2022
Automatically mock your HTTP interactions to simplify and speed up testing

VCR.py ?? This is a Python version of Ruby's VCR library. Source code https://github.com/kevin1024/vcrpy Documentation https://vcrpy.readthedocs.io/ R

Kevin McCarthy 2.3k Jan 1, 2023