A Django template tag to enable testhook attributes on HTML elements.
The django-testhook provides a template tag to generate
data-testhook-id
for HTML templates.
This can be useful for automated testing (for eg: Webdriver.IO) to maintain a fixed entry point, rather than having a automated test that breaks by just renaming a CSS class or an element which can require you to re-evaluate an XPath-selector.
Django 1.8.x or greater, Python 2.7 or greater.
Install django-testhook with pip:
$ pip install django-testhook
Add the following to your settings file:
INSTALLED_APPS += (
'testhook',
)
By default the rendering of testhook data attributes is enabled. If you
are in the scenario you want to disable it for a certain environment
just configure it to False
.
TESTHOOK_ENABLED = False
Within your HTML template you must load the testhook tag in order to use it. The testhook tag only requires a single argument in order to return a result.
{% load testhook %}
<div class="my-elem" {% testhook "test-elem" %}>
I want to test this
</div>
This will output to the following:
<div class="my-elem" data-testhook-id="test-elem">
I want to test this
</div>
For dynamic elements there is also the option to pass arguments. For eg: given I have a product in a shopping basket with a primary key and a slug I could use it like this:
<div class="item" {% testhook "basket" product.id product.slug %}>
{{ product.title }}
</div>
It will output to:
<div class="item" data-testhook-id="basket-1-product-slug">
A product title
</div>