# Test interaction

**URL:** https://discourse.vtk.org/t/test-interaction/4223
**Category:** Support
**Created:** [September 16, 2020, 3:57am UTC](https://discourse.vtk.org/t/test-interaction/4223 "2020-09-16T03:57:56Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![aeslaughter](https://discourse.vtk.org/user_avatar/discourse.vtk.org/aeslaughter/32/2332_2.png) [@aeslaughter](https://discourse.vtk.org/u/aeslaughter)
#### Post date: [September 16, 2020, 3:57am UTC](https://discourse.vtk.org/t/test-interaction/4223/1 "2020-09-16T03:57:56Z")

</div>

How can you simulate mouse and button presses correctly to test custom interaction? I would like to output an image, simulate mouse/buttons etc., then output another image so I can test that custom interaction commands are working.

```auto
#!/usr/bin/env python
import vtk

# Create a Cube
cube = vtk.vtkCubeSource()
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(cube.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)

# Renderer
renderer = vtk.vtkRenderer()
renderer.AddViewProp(actor)

# Window and Interactor
window = vtk.vtkRenderWindow()
window.AddRenderer(renderer)
window.SetSize(600, 600)

interactor = vtk.vtkRenderWindowInteractor()
interactor.SetRenderWindow(window)
interactor.Initialize()

# Create a timer
def manipulate(*args):
    print("manipulate")
    writer = vtk.vtkPNGWriter()
    window_to_image = vtk.vtkWindowToImageFilter()
    window_to_image.SetInput(window)
    writer.SetInputData(window_to_image.GetOutput())

    # Save the un-changed rendering
    window.Render()
    window_to_image.Update()
    writer.SetFileName("before.png")
    writer.Write()

    # I NEED HELP HERE, PLEASE
    # How to manipulate the scene? For example click such that the cube rotates;
    # on MacOS just clicking down on the cube causes it to rotate, how can that be mimiced here?
    interactor.SetEventPosition(50, 50)
    interactor.LongTapEvent()

    # Save the the manipulated rendering
    window.Render()
    window_to_image.Update()
    writer.SetFileName("after.png")
    writer.Write()

# Call the above function after the window shows up
interactor.CreateOneShotTimer(1000)
interactor.AddObserver(vtk.vtkCommand.TimerEvent, manipulate)

# Show the result
window.Render()
interactor.Start()

```

---

<div class="post-metadata">

### Author: ![dmreagan](https://discourse.vtk.org/user_avatar/discourse.vtk.org/dmreagan/32/7489_2.png) [@dmreagan](https://discourse.vtk.org/u/dmreagan)
#### Post date: [October 9, 2020, 4:51pm UTC](https://discourse.vtk.org/t/test-interaction/4223/2 "2020-10-09T16:51:01Z")

</div>

The [FURY](https://fury.gl/) project does this by recording/replaying an interaction with `vtkInteractorEventRecorder`. See the code [here](https://github.com/fury-gl/fury/blob/f10ce3bfa2af16dafd49875b3fa904abc8c3d442/fury/window.py#L527).
