# Interactive Testing

In some circumstances tests can not be completely automated.

htf offers interactive testing which allows you to interact with your tests via your web browser.

This feature can be used to script and revision manual tests for example.

You can find more information in the Interactive Testing documentation.

## Solve Arithmetic Problems

This demo lets you solve arithmetic problems.

The demo is located in `interaction/test_solve_arithmetic_problems.py`

.

```
#
# Copyright (c) 2023, HILSTER - https://hilster.io
# All rights reserved.
#
import htf
import htf.assertions as assertions
from operator import add, sub, mul
from random import randint, choice
def test_solve_arithmetic_problems(
interaction: htf.fixtures.interaction,
) -> None:
"""
This test shows how to interactively solve simple arithmetic problems.
Args:
interaction (htf.fixtures.interaction): the interaction fixture
"""
try:
for number_solved in range(1, 6): # max 5 equations can be solved
a, b = randint(1, 10), randint(1, 10) # pick two random numbers
operator, func = choice([("+", add), ("-", sub), ("*", mul)]) # pick a random operator
answer = interaction.input_dialog(
title="Solve this equation", text="{} {} {} = ?".format(a, operator, b), validator=htf.int_validator
) # only accept valid integers as inputs
assertions.assert_equal(answer, func(a, b)) # check if the answer is correct
if number_solved < 5:
again = interaction.yes_no_dialog(title="Again", text="Would you like to solve another one?")
if again == "no": # stop if the user has had enough
break
except AssertionError:
number_solved -= 1
raise
finally:
interaction.message_dialog(title="Congratulations", text="You solved {} equations!".format(number_solved))
if __name__ == "__main__":
htf.main(interactive=True)
```

To use interactive mode, add `-i`

to the htf call.

```
cd interaction
htf -i -o test_solve_arithmetic_problems.py
```

Note

If the default TCP/IP port `8080`

is not usable on your system you can change it by appending
`--interactive-port <port>`

to the command, e.g.:

```
htf -i -o --interactive-port 12345 test_solve_arithmetic_problems.py
```

The dialogs will appear in the test report afterwards.

## Captcha Solver

This demo lets you solve captchas.

It is located in `interaction/test_captcha_solver.py`

.

```
#
# Copyright (c) 2023, HILSTER - https://hilster.io
# All rights reserved.
#
import htf
import htf.assertions as assertions
from captcha.image import ImageCaptcha # type: ignore
from random import randint
def test_solve_captchas(
interaction: htf.fixtures.interaction,
) -> None:
"""
This test shows how to interactively solve captchas.
Args:
interaction (htf.fixtures.interaction): the interaction fixture
"""
try:
for number_solved in range(1, 6): # max 5 captchas can be solved
image = ImageCaptcha()
captcha_value = str(randint(1000, 10000))
image.write(captcha_value, "captcha.png")
captcha = """
.. |captcha| image:: captcha.png
"""
answer = interaction.input_dialog(
title="Captcha", text="Please solve the following captcha:\n\n|captcha|" + captcha
)
assertions.assert_equal(answer, captcha_value)
if number_solved < 5:
again = interaction.yes_no_dialog(title="Again", text="Would you like to solve another one?")
if again == "no": # stop if the user has had enough
break
except AssertionError:
number_solved -= 1
raise
finally:
interaction.message_dialog(title="Congratulations", text="You solved {} captchas!".format(number_solved))
if __name__ == "__main__":
htf.main(interactive=True)
```

To use interactive mode add `-i`

to the htf call.

```
cd interaction
htf -i -o test_captcha_solver.py
```

The dialogs will appear in the test report afterwards.