diff --git a/composer.json b/composer.json
index 9db4826..50551f2 100644
--- a/composer.json
+++ b/composer.json
@@ -5,6 +5,7 @@
   "license": "GPL-2.0+",
   "require": {
     "symfony/class-loader": "2.2.0",
+    "symfony/css-selector": "2.2.0",
     "symfony/dependency-injection": "2.2.0",
     "symfony/event-dispatcher": "2.2.0",
     "symfony/http-foundation": "2.2.0",
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index a5c34b3..9244a47 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -17,6 +17,7 @@
 use DOMXPath;
 use SimpleXMLElement;
 use Drupal\Core\Datetime\DrupalDateTime;
+use Symfony\Component\CssSelector\CssSelector;
 
 /**
  * Test case for typical Drupal tests.
@@ -1839,6 +1840,24 @@ protected function xpath($xpath, array $arguments = array()) {
   }
 
   /**
+   * Performs a CSS selection based search on the current page contents.
+   *
+   * Utilizes Symfony's CSS parse to perform a CSS based search of the contents
+   * of the internal browser. The search is relative to the root element (HTML
+   * tag normally) of the page.
+   *
+   * @param string $selector
+   *   CSS selector to use in the search.
+   *
+   * @return \SimpleXMLElement
+   *   The return value of the xpath search performed after converting the css
+   *   selector to an XPath selector.
+   */
+  protected function cssSelect($selector) {
+    return $this->xpath(CssSelector::toXPath($selector));
+  }
+
+  /**
    * Get all option elements, including nested options, in a select.
    *
    * @param $element
diff --git a/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php b/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
index d3c77da..6ddee46 100644
--- a/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
+++ b/core/modules/tour/lib/Drupal/tour/Tests/TourTest.php
@@ -42,23 +42,13 @@ protected function setUp() {
   public function testTourFunctionality() {
     // Navigate to tour-test-1 and verify the tour_test_1 tip is found with appropriate classes.
     $this->drupalGet('tour-test-1');
-    $elements = $this->xpath('//li[@data-id=:data_id and @class=:classes and ./h2[contains(., :text)]]', array(
-      ':classes' => 'tip-module-tour-test tip-type-text tip-tour-test-1 even last',
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li.tip-module-tour-test.tip-type-text.tip-tour-test-1.even.last[data-id=tour-test-1] h2:contains('The first tip')");
     $this->assertEqual(count($elements), 1, 'Found English variant of tip 1.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-2',
-      ':text' => 'The quick brown fox',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 2.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'La pioggia cade in spagna',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('La pioggia cade in spagna')");
     $this->assertNotEqual(count($elements), 1, 'Did not find Italian variant of tip 1.');
 
     // Ensure that plugin's work.
@@ -66,16 +56,10 @@ public function testTourFunctionality() {
 
     // Navigate to tour-test-2/subpath and verify the tour_test_2 tip is found.
     $this->drupalGet('tour-test-2/subpath');
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-2',
-      ':text' => 'The quick brown fox',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertEqual(count($elements), 1, 'Found English variant of tip 2.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('The first tip')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 1.');
 
     // Enable Italian language and navigate to it/tour-test1 and verify italian
@@ -83,16 +67,10 @@ public function testTourFunctionality() {
     language_save(new Language(array('langcode' => 'it')));
     $this->drupalGet('it/tour-test-1');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'La pioggia cade in spagna',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-1] h2:contains('La pioggia cade in spagna')");
     $this->assertEqual(count($elements), 1, 'Found Italian variant of tip 1.');
 
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-test-1',
-      ':text' => 'The first tip',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-test-2] h2:contains('The quick brown fox')");
     $this->assertNotEqual(count($elements), 1, 'Did not find English variant of tip 1.');
 
     language_save(new Language(array('langcode' => 'en')));
@@ -130,18 +108,12 @@ public function testTourFunctionality() {
 
     // Navigate to tour-test-1 and verify the new tip is found.
     $this->drupalGet('tour-test-1');
-    $elements = $this->xpath('//li[@data-id=:data_id and ./h2[contains(., :text)]]', array(
-      ':data_id' => 'tour-code-test-1',
-      ':text' => 'The rain in spain',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-code-test-1] h2:contains('The rain in spain')");
     $this->assertEqual(count($elements), 1, 'Found the required tip markup for tip 4');
 
     // Verify that the weight sorting works by ensuring the lower weight item
     // (tip 4) has the 'End tour' button.
-    $elements = $this->xpath('//li[@data-id=:data_id and @data-text=:text]', array(
-      ':data_id' => 'tour-code-test-1',
-      ':text' => 'End tour',
-    ));
+    $elements = $this->cssSelect("li[data-id=tour-code-test-1][data-text='End tour']");
     $this->assertEqual(count($elements), 1, 'Found code tip was weighted last and had "End tour".');
 
     // Test hook_tour_alter().
