diff --git a/contextual_links_example/contextual_links_example.info.yml b/contextual_links_example/contextual_links_example.info.yml
new file mode 100644
index 0000000..1871d59
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.info.yml
@@ -0,0 +1,10 @@
+name: 'Contextual Link Example'
+type: 'module'
+description: 'Example of implementing contextual links.'
+package: 'Example modules'
+core: 8.x
+dependencies:
+  - examples:examples
+  - drupal:contextual
+  - drupal:block
+  - drupal:node
diff --git a/contextual_links_example/contextual_links_example.links.contextual.yml b/contextual_links_example/contextual_links_example.links.contextual.yml
new file mode 100644
index 0000000..a65ed48
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.links.contextual.yml
@@ -0,0 +1,10 @@
+contextual_links_example.configure:
+  route_name: 'contextual_links_example.contextual_links_object_edit'
+  title: 'Edit object'
+  group: 'contextual_links_example'
+
+contextual_links_example.example_action:
+  route_name: 'contextual_links_example.contextual_node_action_form'
+  title: 'Example Action'
+  group: 'node'
+  weight: 20
diff --git a/contextual_links_example/contextual_links_example.links.menu.yml b/contextual_links_example/contextual_links_example.links.menu.yml
new file mode 100644
index 0000000..b4bbdd6
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.links.menu.yml
@@ -0,0 +1,3 @@
+contextual_links_example.description:
+  title: 'Contextual Links Example'
+  route_name: 'contextual_links_example.contextual_links_object_list'
diff --git a/contextual_links_example/contextual_links_example.links.task.yml b/contextual_links_example/contextual_links_example.links.task.yml
new file mode 100644
index 0000000..2cbe084
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.links.task.yml
@@ -0,0 +1,15 @@
+contextual_links_example.contextual_node_action_form:
+  route_name: 'contextual_links_example.contextual_node_action_form'
+  base_route: 'entity.node.canonical'
+  title: 'Example action'
+  weight: 30
+
+contextual_links_example.contextual_links_object_view:
+  route_name: 'contextual_links_example.contextual_links_object_view'
+  base_route: 'contextual_links_example.contextual_links_object_view'
+  title: 'View'
+
+contextual_links_example.contextual_links_object_edit:
+  route_name: 'contextual_links_example.contextual_links_object_edit'
+  base_route: 'contextual_links_example.contextual_links_object_view'
+  title: 'Edit object'
diff --git a/contextual_links_example/contextual_links_example.module b/contextual_links_example/contextual_links_example.module
new file mode 100644
index 0000000..6e8eb6f
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.module
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * @file
+ * Shows how to use Drupal's contextual links functionality.
+ *
+ * @see https://www.drupal.org/docs/8/api/menu-api/providing-module-defined-contextual-links
+ */
+/**
+ * @defgroup contextual_links_example Example: Contextual Links
+ * @ingroup examples
+ * @{
+ * Example of implementing contextual links.
+ *
+ * Contextual links allow site administrators to quickly perform actions
+ * related to elements on a page, without having to hunt through the
+ * administrative interface. As such, you should usually attach them to objects
+ * that appear on the main part of a Drupal site and limit them to a few common
+ * tasks that are frequently performed (for example, "edit" or "configure").
+ * Do not rely on contextual links being present for your module to work
+ * correctly, since they are a convenience feature only. Within Drupal core,
+ * the Contextual Links module must be enabled (and the user viewing the page
+ * must have the "access contextual links" permission) in order for the
+ * contextual links corresponding to actions that the user can perform to
+ * actually be injected into the page's HTML.
+ *
+ * Contextual links have also been moved out of the hook_menu() system in
+ * Drupal 8 and are very similar to local tasks. Use contextual links to
+ * provide contextual operations to users around common Drupal objects
+ * 1appearing on the frontend.
+ *
+ * @see https://www.drupal.org/docs/8/api/menu-api/providing-module-defined-contextual-links
+ *  @endlink
+ *
+ */
+/**
+ * Implements hook_theme().
+ * Register a module or theme's theme implementations.The implementations
+ * declared by this hook specify how a particular render array is to be
+ * rendered as HTML.
+ * @see https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Render!theme.api.php/function/hook_theme/8.2.x
+ */
+function contextual_links_example_theme() {
+  return [
+    'contextual_links_example_entity' => [
+      'template' => 'contextual-links-example-entity',
+      'render element' => 'element',
+    ],
+  ];
+}
+
+/**
+ * Process variables for contextual-links-example-entity.html.twig.
+ */
+function template_preprocess_contextual_links_example_entity(&$variables) {
+  // Here we take the object that is being themed and define some useful
+  // variables that we will print in the template file.
+  $variables['title'] = $variables['element']['#object']->titleContent();
+  $variables['content'] = $variables['element']['#object']->bodyContent();
+}
+/**
+ * @} End of "defgroup contextual_links_example Example: Contextual Links".
+ */
diff --git a/contextual_links_example/contextual_links_example.routing.yml b/contextual_links_example/contextual_links_example.routing.yml
new file mode 100644
index 0000000..2e690d6
--- /dev/null
+++ b/contextual_links_example/contextual_links_example.routing.yml
@@ -0,0 +1,33 @@
+contextual_links_example.contextual_node_action_form:
+  path: '/node/{node}/example-action'
+  defaults:
+    _title: 'Example action'
+    _form: '\Drupal\contextual_links_example\Form\ContextualLinksExampleNodeActionForm'
+  requirements:
+    node: \d+
+    _access: 'TRUE'
+
+contextual_links_example.contextual_links_object_list:
+  path: 'examples/contextual-links'
+  defaults:
+    _title: 'Contextual links example list objects'
+    _controller: '\Drupal\contextual_links_example\Controller\CLEController::clePage'
+  requirements:
+    _access: 'TRUE'
+
+contextual_links_example.contextual_links_object_view:
+  path: 'examples/contextual-links/{entity_id}'
+  defaults:
+    _title: 'Contextual links example object'
+    _controller: '\Drupal\contextual_links_example\Controller\CLEController::cleContent'
+  requirements:
+    entity_id: \d+
+    _access: 'TRUE'
+
+contextual_links_example.contextual_links_object_edit:
+  path: '/examples/contextual-links/{entity_id}/edit'
+  defaults:
+    _title: 'Contextual links example object'
+    _form: '\Drupal\contextual_links_example\Form\CLEEntityEditForm'
+  requirements:
+    _access: 'TRUE'
diff --git a/contextual_links_example/src/Controller/CLEController.php b/contextual_links_example/src/Controller/CLEController.php
new file mode 100644
index 0000000..22eb20e
--- /dev/null
+++ b/contextual_links_example/src/Controller/CLEController.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\contextual_links_example\Controller;
+
+use Drupal\contextual_links_example\Entity\CLEEntity;
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\examples\Utility\DescriptionTemplateTrait;
+/**
+ * Controller routines for contextual example routes.
+ */
+class CLEController extends ControllerBase {
+
+use DescriptionTemplateTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getModuleName() {
+    return 'contextual_links_example';
+  }
+  /**
+   * Returns a list of CLEEntity objects.
+   */
+  public function clePage() {
+    // For simplicity we hardcode an array of CLEEntity ids.
+    $entity_ids = [1, 2, 3, 4, 5];
+    $build = $this->description();
+
+    // Create the renderable array for every CLEEntity.
+    foreach ($entity_ids as $id) {
+      // To add a contextual link we need to provide the key #contextual_links.
+      /**
+       *@see \Drupal\contextual\Element\ContextualLinks.(.).
+      */
+      $build[$id] = [
+        '#theme' => 'contextual_links_example_entity',
+        '#object' => new CLEEntity(['id' => $id], 'contextual_links_example_entity'),
+        '#contextual_links' => [
+          'contextual_links_example' => [
+            'route_parameters' => ['entity_id' => $id],
+          ],
+        ],
+      ];
+    }
+
+    return $build;
+  }
+
+  /**
+   * Returns CLEEntity.
+   *
+   * @param int $entity_id
+   *   Entity ID.
+   *
+   * @return array
+   *   An array as expected by drupal_render().
+   */
+  public function cleContent($entity_id) {
+    $build = [
+      '#theme' => 'contextual_links_example_entity',
+      '#object' => new CLEEntity(['id' => $entity_id], 'contextual_links_example_entity'),
+    ];
+    return $build;
+  }
+
+}
diff --git a/contextual_links_example/src/Entity/CLEEntity.php b/contextual_links_example/src/Entity/CLEEntity.php
new file mode 100644
index 0000000..090b8a0
--- /dev/null
+++ b/contextual_links_example/src/Entity/CLEEntity.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Drupal\contextual_links_example\Entity;
+
+use Drupal\Core\Entity\Entity;
+
+/**
+ * A simple entity for usage of contextual links assigned to an object.
+ *
+ * @see https://www.drupal.org/node/2123523
+ *
+ * @EntityType(
+ *   id = "contextual_links_example_entity",
+ *   handlers = {
+ *     "storage" = "Drupal\contextual_links_example\Storage\CLEStorage"
+ *   },
+ *   entity_keys = {
+ *     "id" = "id"
+ *   }
+ * )
+ */
+class CLEEntity extends Entity {
+
+  /**
+   * Creates a renderable array containing the body of the entity.
+   *
+   * @return array
+   *   Renderable array of the entity's body.
+   */
+  public function bodyContent() {
+    return [
+      '#markup' => t('This is the content of example object @id.', ['@id' => $this->id()]),
+    ];
+  }
+
+  /**
+   * Creates a renderable array containing the title of the entity.
+   *
+   * @return array
+   *   Renderable array of the entity's title.
+   */
+  public function titleContent() {
+    return [
+      '#markup' => t('Title for example object @id', ['@id' => $this->id()]),
+    ];
+  }
+
+}
diff --git a/contextual_links_example/src/Form/CLEEntityEditForm.php b/contextual_links_example/src/Form/CLEEntityEditForm.php
new file mode 100644
index 0000000..cf4fca2
--- /dev/null
+++ b/contextual_links_example/src/Form/CLEEntityEditForm.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Drupal\contextual_links_example\Form;
+
+use Drupal\contextual_links_example\Entity\CLEEntity;
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Class CLEEntityEditForm.
+ *
+ * Builds the CLEEntity edit form.
+ *
+ * @package Drupal\contextual_links_example\Form
+ */
+class CLEEntityEditForm extends FormBase {
+
+  /**
+   * Overrides Drupal\Core\Entity\EntityFormController::form().
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   An associative array containing the current state of the form.
+   * @param int $entity_id
+   *   Entity ID.
+   *
+   * @return array
+   *   An associative array containing the robot add/edit form.
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, $entity_id = NULL) {
+    $values = [
+      'id' => $entity_id ? $entity_id : 1,
+    ];
+
+    $entity = new CLEEntity($values, 'contextual_links_example_entity');
+
+    // Build the form.
+    $form['paragraph'] = [
+      '#type' => 'html_tag',
+      '#tag' => 'p',
+      '#value' => $this->t('This is the page that would allow you to edit object @id', ['@id' => $entity->id()]),
+    ];
+
+    $form['save'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Update'),
+    ];
+
+    // Return the form.
+    return $form;
+  }
+
+  /**
+   * Returns a unique string identifying the form.
+   *
+   * @return string
+   *   The unique string identifying the form.
+   */
+  public function getFormId() {
+    return 'contextual_links_example_entity_edit';
+  }
+
+  /**
+   * Form submission handler.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    // Do the actions upon submitting the form.
+    drupal_set_message($this->t('The entity was modified.'));
+  }
+
+}
diff --git a/contextual_links_example/src/Form/ContextualLinksExampleNodeActionForm.php b/contextual_links_example/src/Form/ContextualLinksExampleNodeActionForm.php
new file mode 100644
index 0000000..f6b1bfe
--- /dev/null
+++ b/contextual_links_example/src/Form/ContextualLinksExampleNodeActionForm.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace Drupal\contextual_links_example\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\node\NodeInterface;
+
+/**
+ * Class ContextualLinksExampleNodeActionForm.
+ *
+ * Creates a form action for the given node in context. Contains the needed
+ * functions for the form and some helper functions.
+ *
+ */
+class ContextualLinksExampleNodeActionForm extends FormBase {
+
+  /**
+   * The form ID. Unique string identifying the form.
+   *
+   * @var string
+   *
+   * @see getFormID()
+   */
+  protected $formId = "contextual_links_example_node_action";
+
+  /**
+   * The node to which the form is attached.
+   *
+   * We add it as a property of the form, to keep a reference to it once the
+   * form is built.
+   *
+   * @var \Drupal\node\NodeInterface
+   */
+  protected $node;
+
+  /**
+   * Returns a unique string identifying the form.
+   *
+   * @return string
+   *   The unique string identifying the form.
+   */
+  public function getFormId() {
+    return $this->formId;
+  }
+
+  /**
+   * Form constructor.
+   *
+   * Creates an action form to transform the node's title in all lower, all
+   * uppercase or first character of each word to upper.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   * @param \Drupal\node\NodeInterface $node
+   *   The node from the URL context.
+   *
+   * @return array
+   *   The form structure.
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) {
+    // Keep the reference to the node.
+    $this->setNode($node);
+
+    $form['text'] = [
+      '#type' => 'html_tag',
+      '#tag' => 'p',
+      '#value' => $this->t(
+        'This is the page that would allow you to perform an example action on node @nid, named "@title".',
+        ['@nid' => $this->getNid(), '@title' => $this->getNodeTitle()]
+      ),
+    ];
+
+    $form['save'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Save changes'),
+    ];
+
+    return $form;
+  }
+
+  /**
+   * Form submission handler.
+   *
+   * Transform the node's title based on user's choice.
+   *
+   * @param array $form
+   *   An associative array containing the structure of the form.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    drupal_set_message($this->t('Updated node %title.', ['%title' => $this->getNodeTitle()]));
+  }
+
+  /**
+   * Set the current node.
+   *
+   * @param \Drupal\node\NodeInterface $node
+   *   The node object to be set.
+   */
+  protected function setNode(NodeInterface $node) {
+    $this->node = $node;
+  }
+
+  /**
+   * Get the id of the current node.
+   *
+   * @return int|null|string
+   *   The id of the node.
+   */
+  protected function getNid() {
+    return $this->node->id();
+  }
+
+  /**
+   * Returns the title of the current node.
+   *
+   * @return string
+   *   Title of the node.
+   */
+  protected function getNodeTitle() {
+    return $this->node->getTitle();
+  }
+
+}
diff --git a/contextual_links_example/src/Plugin/Block/CLEBlock.php b/contextual_links_example/src/Plugin/Block/CLEBlock.php
new file mode 100644
index 0000000..f7d0d12
--- /dev/null
+++ b/contextual_links_example/src/Plugin/Block/CLEBlock.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Drupal\contextual_links_example\Plugin\Block;
+
+use Drupal\contextual_links_example\Entity\CLEEntity;
+use Drupal\Core\Block\BlockBase;
+
+/**
+ * Provides a 'CLEBlock' block.
+ *
+ * Contains the body of a CLEEntity instance and sets a contextual link to the
+ * entity edit form.
+ *
+ * @Block(
+ *  id = "cleblock",
+ *  label = @Translation("Example: contextual links block"),
+ *  admin_label = @Translation("Example: contextual links block")
+ * )
+ */
+class CLEBlock extends BlockBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    /** @var \Drupal\contextual_links_example\Entity\CLEEntity $entity */
+    $entity = new CLEEntity(['id' => 42], 'contextual_links_example_entity');
+
+    // Create the content of the block and contextual links.
+    return [
+      'content' => $entity->bodyContent(),
+      '#contextual_links' => [
+        'contextual_links_example' => [
+          'route_parameters' => ['entity_id' => $entity->id()],
+        ],
+      ],
+    ];
+  }
+
+}
diff --git a/contextual_links_example/src/Storage/CLEStorage.php b/contextual_links_example/src/Storage/CLEStorage.php
new file mode 100644
index 0000000..403ed1f
--- /dev/null
+++ b/contextual_links_example/src/Storage/CLEStorage.php
@@ -0,0 +1,117 @@
+<?php
+
+namespace Drupal\contextual_links_example\Storage;
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityStorageInterface;
+
+/**
+ * Class CLEStorage.
+ *
+ * Defines a simple storage used by module's entity type.
+ *
+ * @see \Drupal\node\NodeStorage
+ *
+ * @package Drupal\contextual_links_example\Storage
+ */
+class CLEStorage implements EntityStorageInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function resetCache(array $ids = NULL) {
+    // TODO: Implement resetCache() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function loadMultiple(array $ids = NULL) {
+    // TODO: Implement loadMultiple() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function load($id) {
+    // TODO: Implement load() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function loadUnchanged($id) {
+    // TODO: Implement loadUnchanged() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function loadRevision($revision_id) {
+    // TODO: Implement loadRevision() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function deleteRevision($revision_id) {
+    // TODO: Implement deleteRevision() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function loadByProperties(array $values = []) {
+    // TODO: Implement loadByProperties() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function create(array $values = []) {
+    // TODO: Implement create() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function delete(array $entities) {
+    // TODO: Implement delete() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(EntityInterface $entity) {
+    // TODO: Implement save() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuery($conjunction = 'AND') {
+    // TODO: Implement getQuery() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAggregateQuery($conjunction = 'AND') {
+    // TODO: Implement getAggregateQuery() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityTypeId() {
+    // TODO: Implement getEntityTypeId() method.
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getEntityType() {
+    // TODO: Implement getEntityType() method.
+  }
+
+}
diff --git a/contextual_links_example/templates/contextual-links-example-entity.html.twig b/contextual_links_example/templates/contextual-links-example-entity.html.twig
new file mode 100644
index 0000000..5e23413
--- /dev/null
+++ b/contextual_links_example/templates/contextual-links-example-entity.html.twig
@@ -0,0 +1,6 @@
+<div{{ attributes.addClass(classes)}}>
+    {{ title_prefix }}
+    <h2>{{ title }}</h2>
+    {{ title_suffix }}
+    {{ content }}
+</div>
diff --git a/contextual_links_example/templates/description.html.twig b/contextual_links_example/templates/description.html.twig
new file mode 100644
index 0000000..78e0bcc
--- /dev/null
+++ b/contextual_links_example/templates/description.html.twig
@@ -0,0 +1,21 @@
+{#
+
+Description text for the Contextual links.
+
+#}
+
+
+{% trans %}
+
+<p>Many modules add tabs to nodes underneath the node/<nid> path. If the path
+   you are adding corresponds to a commonly performed action on the node, you
+  can choose to expose it as a contextual link. Since the Node module
+   already has code to display all contextual links underneath the node/<nid>
+   path (such as 'Edit' and 'Delete') when a node is being rendered outside
+   of its own page (for example, when a teaser of the node is being displayed
+   on the front page of the site), you only need to inform Drupals menu
+   system that your path is a contextual link also, and it will automatically
+   appear with the others. In the example below, we add a contextual link
+   named 'Example action' to the list.</p>
+
+{% endtrans %}
diff --git a/contextual_links_example/tests/src/FunctionalJavascript/ContextualLinksExampleTest.php b/contextual_links_example/tests/src/FunctionalJavascript/ContextualLinksExampleTest.php
new file mode 100644
index 0000000..e8da8f3
--- /dev/null
+++ b/contextual_links_example/tests/src/FunctionalJavascript/ContextualLinksExampleTest.php
@@ -0,0 +1,88 @@
+<?php
+
+namespace Drupal\Tests\contextual_links_example\FunctionalJavascript;
+
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+
+/**
+ * Tests the behavior of the contextual links provided by the module.
+ *
+ * @ingroup contextual_links_example
+ *
+ * @group contextual_links_example
+ * @group examples
+ */
+class ContextualLinksExampleTest extends JavascriptTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'system',
+    'contextual_links_example',
+    'views',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    // Create and login an admin user.
+    $this->drupalLogin($this->createUser([
+      'administer blocks',
+      'administer nodes',
+      'access contextual links',
+    ]));
+
+    // Create a content type.
+    $this->drupalCreateContentType(['type' => 'page']);
+
+    // Create a node and promote it to the front page.
+    $this->drupalCreateNode(['promote' => 1]);
+
+    // Configure 'node' as front page.
+    $this->config('system.site')->set('page.front', '/node')->save();
+
+    // Place our custom block in sidebar first.
+    $this->placeBlock('cleblock',
+      [
+        'visibility' => [
+          'request_path' => [
+            'id' => 'request_path',
+            'pages' => '<front>',
+            'negate' => FALSE,
+            'context_mapping' => [],
+          ],
+        ],
+      ]);
+  }
+
+  /**
+   * Tests contextual_links_example functionality.
+   */
+  public function testContextualLinksExampleBasic() {
+    $assert = $this->assertSession();
+
+    $this->drupalGet('node');
+    // Check the presence of contextual link "Edit object" on our block.
+    $contextualLinks = $assert->waitForElement('css', '.contextual-links-exampleconfigure');
+    $this->assertNotEmpty($contextualLinks);
+
+    // Check the presence of contextual link "Example Action" on our node.
+    $actionContextualLink = $assert->waitForElement('css', '.contextual-links-exampleexample-action');
+    $this->assertNotEmpty($actionContextualLink);
+
+    $this->drupalGet('examples/contextual-links');
+    $assert->statusCodeEquals(200);
+
+    // Visit our example overview page and check for presence of
+    // "Edit Object" contextual links.
+    $contextualLinks = $assert->waitForElement('css', '.contextual-links-exampleconfigure');
+    $this->assertNotEmpty($contextualLinks);
+  }
+
+}
