Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordiosmosis <benakamoorthi@fastmail.fm>2014-03-02 14:41:20 +0400
committerdiosmosis <benakamoorthi@fastmail.fm>2014-03-02 14:41:20 +0400
commit5c66663d11aec26579b7c66928695f03ddb11dff (patch)
treeea1e607732529035181e5c2a543e062a8a7c7c8e
parent8a525ad008a5235744de7f6c922516a36d45c314 (diff)
Refs #4189, adding Overlay screenshot tests:
- Make 'idsite' parameter in certain Overlay URLs 'idSite'. - Make sure Overlay sidebar has width so screenshot test framework can find position. - Add overlay test site so Overlay can be loaded in phantomjs. - Remove createSuperUser call from TrackerTest (done in Fixture setUp). - Make sure piwik.js link is created for screenshot tests & make sure the test environment JSON file is loaded after the database is setup. - Modify logic that waits for images to load in screenshot testing framework's page renderer to wait for CSS image URLs.
-rw-r--r--.gitignore5
-rw-r--r--plugins/Overlay/Controller.php2
-rw-r--r--plugins/Overlay/stylesheets/overlay.css4
-rw-r--r--plugins/Overlay/templates/index.twig74
-rw-r--r--plugins/Overlay/templates/index_noframe.twig2
-rw-r--r--tests/PHPUnit/Fixtures/UITestFixture.php98
-rw-r--r--tests/PHPUnit/Integration/Core/TrackerTest.php1
m---------tests/PHPUnit/UI0
-rw-r--r--tests/lib/screenshot-testing/support/app.js4
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js44
-rw-r--r--tests/lib/screenshot-testing/support/setupDatabase.php2
-rw-r--r--tests/lib/screenshot-testing/support/test-environment.js4
-rw-r--r--tests/resources/overlay-test-site/index.html88
-rw-r--r--tests/resources/overlay-test-site/page-1.html88
-rw-r--r--tests/resources/overlay-test-site/page-2.html88
-rw-r--r--tests/resources/overlay-test-site/page-3.html88
-rw-r--r--tests/resources/overlay-test-site/page-4.html88
-rw-r--r--tests/resources/overlay-test-site/page-5.html88
-rw-r--r--tests/resources/overlay-test-site/page-6.html88
19 files changed, 807 insertions, 49 deletions
diff --git a/.gitignore b/.gitignore
index eea508a625..2640773f71 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,8 @@ misc/.htaccess
misc/cron/.htaccess
plugins/.htaccess
*.pyc
+tests/resources/overlay-test-site-real/
+tests/PHPUnit/proxy/libs
+tests/PHPUnit/proxy/piwik.js
+tests/PHPUnit/proxy/plugins
+tests/PHPUnit/proxy/tests
diff --git a/plugins/Overlay/Controller.php b/plugins/Overlay/Controller.php
index 487a0a77ee..89eb36063f 100644
--- a/plugins/Overlay/Controller.php
+++ b/plugins/Overlay/Controller.php
@@ -126,7 +126,7 @@ class Controller extends \Piwik\Plugin\Controller
*/
public function startOverlaySession()
{
- $idSite = Common::getRequestVar('idsite', 0, 'int');
+ $idSite = Common::getRequestVar('idSite', 0, 'int');
Piwik::checkUserHasViewAccess($idSite);
$sitesManager = APISitesManager::getInstance();
diff --git a/plugins/Overlay/stylesheets/overlay.css b/plugins/Overlay/stylesheets/overlay.css
index df0e1f7283..f80a6a7f7e 100644
--- a/plugins/Overlay/stylesheets/overlay.css
+++ b/plugins/Overlay/stylesheets/overlay.css
@@ -153,3 +153,7 @@ body .ui-tooltip.Overlay_Tooltip {
#topBars {
display: none;
}
+
+.overlay-sidebar-container {
+ width: 220px;
+} \ No newline at end of file
diff --git a/plugins/Overlay/templates/index.twig b/plugins/Overlay/templates/index.twig
index ce377ef0a4..2b6b8976f3 100644
--- a/plugins/Overlay/templates/index.twig
+++ b/plugins/Overlay/templates/index.twig
@@ -7,49 +7,51 @@
{% endblock %}
{% block content %}
- <a id="Overlay_Title" href="http://piwik.org/docs/page-overlay/" target="_blank">
- {{ 'Overlay_Overlay'|translate }}
- <img src="plugins/Zeitgeist/images/help.png" alt="Documentation"/>
- </a>
+ <div class="overlay-sidebar-container">
+ <a id="Overlay_Title" href="http://piwik.org/docs/page-overlay/" target="_blank">
+ {{ 'Overlay_Overlay'|translate }}
+ <img src="plugins/Zeitgeist/images/help.png" alt="Documentation"/>
+ </a>
- <div id="Overlay_DateRangeSelection">
- <select id="Overlay_DateRangeSelect" name="Overlay_DateRangeSelect">
- <option value="day;today">{{ 'General_Today'|translate }}</option>
- <option value="day;yesterday">{{ 'General_Yesterday'|translate }}</option>
- <option value="week;today">{{ 'General_CurrentWeek'|translate }}</option>
- <option value="month;today">{{ 'General_CurrentMonth'|translate }}</option>
- <option value="year;today">{{ 'General_CurrentYear'|translate }}</option>
- </select>
- </div>
+ <div id="Overlay_DateRangeSelection">
+ <select id="Overlay_DateRangeSelect" name="Overlay_DateRangeSelect">
+ <option value="day;today">{{ 'General_Today'|translate }}</option>
+ <option value="day;yesterday">{{ 'General_Yesterday'|translate }}</option>
+ <option value="week;today">{{ 'General_CurrentWeek'|translate }}</option>
+ <option value="month;today">{{ 'General_CurrentMonth'|translate }}</option>
+ <option value="year;today">{{ 'General_CurrentYear'|translate }}</option>
+ </select>
+ </div>
- <div id="Overlay_Error_NotLoading">
- <p>
- <span>{{ 'Overlay_ErrorNotLoading'|translate }}</span>
- </p>
+ <div id="Overlay_Error_NotLoading">
+ <p>
+ <span>{{ 'Overlay_ErrorNotLoading'|translate }}</span>
+ </p>
- <p>
- {% if ssl %}
- {{ 'Overlay_ErrorNotLoadingDetailsSSL'|translate }}
- {% else %}
- {{ 'Overlay_ErrorNotLoadingDetails'|translate }}
- {% endif %}
- </p>
+ <p>
+ {% if ssl %}
+ {{ 'Overlay_ErrorNotLoadingDetailsSSL'|translate }}
+ {% else %}
+ {{ 'Overlay_ErrorNotLoadingDetails'|translate }}
+ {% endif %}
+ </p>
- <p>
- <a href="http://piwik.org/docs/page-overlay/#toc-page-overlay-troubleshooting" target="_blank">
- {{ 'Overlay_ErrorNotLoadingLink'|translate }}
- </a>
- </p>
- </div>
+ <p>
+ <a href="http://piwik.org/docs/page-overlay/#toc-page-overlay-troubleshooting" target="_blank">
+ {{ 'Overlay_ErrorNotLoadingLink'|translate }}
+ </a>
+ </p>
+ </div>
- <div id="Overlay_Location">&nbsp;</div>
+ <div id="Overlay_Location">&nbsp;</div>
- <div id="Overlay_Loading">{{ 'General_Loading'|translate }}</div>
+ <div id="Overlay_Loading">{{ 'General_Loading'|translate }}</div>
- <div id="Overlay_Sidebar"></div>
+ <div id="Overlay_Sidebar"></div>
- <a id="Overlay_RowEvolution">{{ 'General_RowEvolutionRowActionTooltipTitle'|translate }}</a>
- <a id="Overlay_Transitions">{{ 'General_TransitionsRowActionTooltipTitle'|translate }}</a>
+ <a id="Overlay_RowEvolution">{{ 'General_RowEvolutionRowActionTooltipTitle'|translate }}</a>
+ <a id="Overlay_Transitions">{{ 'General_TransitionsRowActionTooltipTitle'|translate }}</a>
+ </div>
<!-- TODO: rethink the way the sidebar works -->
<!-- <a id="Overlay_FullScreen" href="#">
@@ -62,7 +64,7 @@
</div>
<script type="text/javascript">
- var iframeSrc = 'index.php?module=Overlay&action=startOverlaySession&idsite={{ idSite }}&period={{ period }}&date={{ date }}';
+ var iframeSrc = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ date }}';
Piwik_Overlay.init(iframeSrc, '{{ idSite }}', '{{ period }}', '{{ date }}');
Piwik_Overlay_Translations = {
diff --git a/plugins/Overlay/templates/index_noframe.twig b/plugins/Overlay/templates/index_noframe.twig
index 626cd4cd2d..f3948357a3 100644
--- a/plugins/Overlay/templates/index_noframe.twig
+++ b/plugins/Overlay/templates/index_noframe.twig
@@ -6,7 +6,7 @@
<div id="Overlay_NoFrame">
<script type="text/javascript">
- var newLocation = 'index.php?module=Overlay&action=startOverlaySession&idsite={{ idSite }}&period={{ period }}&date={{ date }}';
+ var newLocation = 'index.php?module=Overlay&action=startOverlaySession&idSite={{ idSite }}&period={{ period }}&date={{ date }}';
var locationParts = window.location.href.split('#');
if (locationParts.length > 1) {
diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php
index 22f48283b0..4b6d22fcd3 100644
--- a/tests/PHPUnit/Fixtures/UITestFixture.php
+++ b/tests/PHPUnit/Fixtures/UITestFixture.php
@@ -10,12 +10,14 @@ namespace Piwik\Tests\Fixtures;
use Piwik\DbHelper;
use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
+use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
use Piwik\AssetManager;
use Piwik\Date;
use Piwik\Common;
use Piwik\Db;
use Piwik\FrontController;
use Piwik\Option;
+use Piwik\Url;
/**
* Fixture for UI tests.
@@ -26,6 +28,7 @@ class UITestFixture extends OmniFixture
{
parent::setUp();
+ $this->addOverlayVisits();
$this->addNewSitesForSiteSelector();
$this->createEmptyDashboard();
@@ -34,7 +37,7 @@ class UITestFixture extends OmniFixture
Option::set("Tests.forcedNowTimestamp", $this->now->getTimestamp());
- // launch archiving so tests don't run out of time
+ // launch archiving so tests don't run out of time
$date = Date::factory($this->dateTime)->toString();
VisitsSummaryAPI::getInstance()->get($this->idSite, 'year', $date);
VisitsSummaryAPI::getInstance()->get($this->idSite, 'year', $date, urlencode($this->segment));
@@ -51,6 +54,9 @@ class UITestFixture extends OmniFixture
. " WHERE idsite = 2 AND location_latitude IS NOT NULL LIMIT 1"));
$this->testEnvironment->forcedIdVisitor = $visitorIdDeterministic;
+ $this->testEnvironment->overlayUrl = $this->getLocalTestSiteUrl();
+ $this->createOverlayTestSite();
+
$forcedNowTimestamp = Option::get("Tests.forcedNowTimestamp");
if ($forcedNowTimestamp == false) {
throw Exception("Incorrect fixture setup, Tests.forcedNowTimestamp option does not exist! Run the setup again.");
@@ -60,14 +66,100 @@ class UITestFixture extends OmniFixture
$this->testEnvironment->save();
}
- public function addNewSitesForSiteSelector()
+ private function addOverlayVisits()
+ {
+ $alias = Url::getCurrentScheme() . '://' . Url::getCurrentHost();
+ SitesManagerAPI::getInstance()->addSiteAliasUrls($idSite = 3, array($alias));
+
+ $baseUrl = $this->getLocalTestSiteUrl();
+
+ $visitProfiles = array(
+ array('', 'page-1.html', 'page-2.html', 'page-3.html', ''),
+ array('', 'page-3.html', 'page-4.html'),
+ array('', 'page-4.html'),
+ array('', 'page-1.html', 'page-3.html', 'page-4.html'),
+ array('', 'page-4.html', 'page-1.html'),
+ array('', 'page-1.html', ''),
+ array('page-4.html', ''),
+ array('', 'page-2.html', 'page-3.html'),
+ array('', 'page-1.html', 'page-2.html'),
+ array('', 'page-6.html', 'page-5.html', 'page-4.html', 'page-3.html', 'page-2.html', 'page-1.html', ''),
+ array('', 'page-5.html', 'page-3.html', 'page-1.html'),
+ array('', 'page-1.html', 'page-2.html', 'page-3.html'),
+ array('', 'page-4.html', 'page-3.html'),
+ array('', 'page-1.html', ''),
+ array('page-6.html', 'page-3.html', ''),
+ );
+
+ $date = Date::factory('yesterday');
+ $t = self::getTracker($idSite = 3, $dateTime = $date->getDatetime(), $defaultInit = true);
+ $t->enableBulkTracking();
+
+ foreach ($visitProfiles as $visitCount => $visit) {
+ $t->setNewVisitorId();
+ $t->setIp("123.234.23.$visitCount");
+
+ foreach ($visit as $idx => $action) {
+ $t->setForceVisitDateTime($date->addHour($visitCount)->addHour(0.01 * $idx)->getDatetime());
+
+ $url = $baseUrl . $action;
+ $t->setUrl($url);
+
+ if ($idx != 0) {
+ $referrerUrl = $baseUrl . $visit[$idx - 1];
+ $t->setUrlReferrer($referrerUrl);
+ }
+
+ self::assertTrue($t->doTrackPageView("page title of $action"));
+ }
+ }
+
+ self::checkBulkTrackingResponse($t->doBulkTrack());
+ }
+
+ private function createOverlayTestSite()
+ {
+ $realDir = PIWIK_INCLUDE_PATH . "/tests/resources/overlay-test-site-real";
+ if (is_dir($realDir)) {
+ return;
+ }
+
+ $files = array('index.html', 'page-1.html', 'page-2.html', 'page-3.html', 'page-4.html', 'page-5.html', 'page-6.html');
+
+ // copy templates to overlay-test-site-real
+ mkdir($realDir);
+ foreach ($files as $file) {
+ copy(PIWIK_INCLUDE_PATH . "/tests/resources/overlay-test-site/$file",
+ PIWIK_INCLUDE_PATH . "/tests/resources/overlay-test-site-real/$file");
+ }
+
+ // replace URL in copied files
+ $url = self::getRootUrl() . 'tests/PHPUnit/proxy/';
+ $scheme = parse_url($url, PHP_URL_SCHEME);
+ $url = substr($url, strlen($scheme) + 3);
+
+ foreach ($files as $file) {
+ $path = PIWIK_INCLUDE_PATH . "/tests/resources/overlay-test-site-real/$file";
+
+ $contents = file_get_contents($path);
+ $contents = str_replace("%trackerBaseUrl%", $url, $contents);
+ file_put_contents($path, $contents);
+ }
+ }
+
+ private function getLocalTestSiteUrl()
+ {
+ return self::getRootUrl() . "tests/resources/overlay-test-site-real/";
+ }
+
+ private function addNewSitesForSiteSelector()
{
for ($i = 0; $i != 8; ++$i) {
self::createWebsite("2011-01-01 00:00:00", $ecommerce = 1, $siteName = "Site #$i", $siteUrl = "http://site$i.com");
}
}
- public function createEmptyDashboard()
+ private function createEmptyDashboard()
{
$oldGet = $_GET;
diff --git a/tests/PHPUnit/Integration/Core/TrackerTest.php b/tests/PHPUnit/Integration/Core/TrackerTest.php
index a8585bbd19..abbfca35f8 100644
--- a/tests/PHPUnit/Integration/Core/TrackerTest.php
+++ b/tests/PHPUnit/Integration/Core/TrackerTest.php
@@ -16,7 +16,6 @@ class Core_TrackerTest extends DatabaseTestCase
parent::setUp();
\Piwik\Piwik::setUserHasSuperUserAccess(true);
Fixture::createWebsite('2014-02-04');
- Fixture::createSuperUser();
}
/**
diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI
-Subproject b3749d8fa0ad972ce4c0fe2b3767d425f45bdb4
+Subproject 0931b6a77d992825c2b15256cdcd6d289c6fab1
diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js
index 73eade6892..da76557805 100644
--- a/tests/lib/screenshot-testing/support/app.js
+++ b/tests/lib/screenshot-testing/support/app.js
@@ -166,11 +166,13 @@ Application.prototype.setupDatabase = function () {
Application.prototype.doRunTests = function () {
var self = this;
+ testEnvironment.reload();
+
// run tests
this.runner = mocha.run(function () {
// remove symlinks
if (!options['keep-symlinks']) {
- var symlinks = ['libs', 'plugins', 'tests'];
+ var symlinks = ['libs', 'plugins', 'tests', 'piwik.js'];
symlinks.forEach(function (item) {
var file = path.join(uiTestsDir, '..', 'proxy', item);
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index 3c99751faf..7292205abc 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -9,6 +9,7 @@
var VERBOSE = false;
+// TODO: should refactor, move all event queueing logic to PageAutomation class and add .frame method to change context
var PageRenderer = function (baseUrl) {
this.webpage = null;
@@ -16,6 +17,7 @@ var PageRenderer = function (baseUrl) {
this.pageLogs = [];
this.aborted = false;
this.baseUrl = baseUrl;
+ this.currentFrame = null;
this.defaultWaitTime = 1000;
this._isLoading = false;
@@ -44,6 +46,10 @@ PageRenderer.prototype.wait = function (waitTime) {
this.queuedEvents.push([this._wait, waitTime]);
};
+PageRenderer.prototype.sendMouseEvent = function (type, pos, waitTime) {
+ this.queuedEvents.push([this._sendMouseEvent, waitTime, type, pos]);
+};
+
PageRenderer.prototype.click = function () {
var selector = arguments[0],
waitTime = null,
@@ -94,6 +100,11 @@ PageRenderer.prototype._wait = function (callback) {
callback();
};
+PageRenderer.prototype._sendMouseEvent = function (type, pos, callback) {
+ this.webpage.sendEvent(type, pos.x, pos.y);
+ callback();
+};
+
PageRenderer.prototype._click = function (selector, modifiers, callback) {
var position = this._getPosition(selector);
@@ -257,13 +268,36 @@ PageRenderer.prototype._getImageLoadingCount = function () {
return this.webpage.evaluate(function () {
var count = 0;
- // check <img> elements
- var imgs = document.getElementsByTagName('img');
- for (var i = 0; i != imgs.length; ++i) {
- var element = imgs.item(i);
- if (element.complete === false) {
+ var cssImageProperties = ['backgroundImage', 'listStyleImage', 'borderImage', 'borderCornerImage', 'cursor'],
+ matchUrl = /url\(\s*(['"]?)(.*?)\1\s*\)/g;
+
+ // check <img> elements and background URLs
+ var elements = document.getElementsByTagName('*');
+ for (var i = 0; i != elements.length; ++i) {
+ var element = elements.item(i);
+ if (element.tagName == 'img' // handle <img> elements
+ && element.complete === false
+ ) {
count = count + 1;
}
+
+ for (var j = 0; j != cssImageProperties.length; ++j) { // handle CSS image URLs
+ var prop = $(element).css(cssImageProperties[j]);
+
+ if (!prop) {
+ continue;
+ }
+
+ while (match = matchUrl.exec(prop)) {
+ var src = match[2],
+ img = new Image();
+ img.src = src;
+
+ if (img.complete === false) {
+ count = count + 1;
+ }
+ }
+ }
}
return count;
diff --git a/tests/lib/screenshot-testing/support/setupDatabase.php b/tests/lib/screenshot-testing/support/setupDatabase.php
index bbd7c979f2..db926e5163 100644
--- a/tests/lib/screenshot-testing/support/setupDatabase.php
+++ b/tests/lib/screenshot-testing/support/setupDatabase.php
@@ -28,7 +28,7 @@ $fixture->printToScreen = true;
$fixture->performSetUp("");
// make sure symbolic links exist (phantomjs doesn't support symlink-ing yet)
-foreach (array('libs', 'plugins', 'tests') as $linkName) {
+foreach (array('libs', 'plugins', 'tests', 'piwik.js') as $linkName) {
$linkPath = PIWIK_INCLUDE_PATH . '/tests/PHPUnit/proxy/' . $linkName;
if (!file_exists($linkPath)) {
symlink(PIWIK_INCLUDE_PATH . '/' . $linkName, $linkPath);
diff --git a/tests/lib/screenshot-testing/support/test-environment.js b/tests/lib/screenshot-testing/support/test-environment.js
index 637bfed510..288dc0a886 100644
--- a/tests/lib/screenshot-testing/support/test-environment.js
+++ b/tests/lib/screenshot-testing/support/test-environment.js
@@ -11,6 +11,10 @@ var fs = require('fs'),
testingEnvironmentOverridePath = path.join(PIWIK_INCLUDE_PATH, '/tmp/testingPathOverride.json');
var TestingEnvironment = function () {
+ this.reload();
+};
+
+TestingEnvironment.prototype.reload = function () {
if (fs.exists(testingEnvironmentOverridePath)) {
var data = JSON.parse(fs.read(testingEnvironmentOverridePath));
for (var key in data) {
diff --git a/tests/resources/overlay-test-site/index.html b/tests/resources/overlay-test-site/index.html
new file mode 100644
index 0000000000..4980998855
--- /dev/null
+++ b/tests/resources/overlay-test-site/index.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Navbar example</h1>
+ <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>
+ <p>
+ <a class="btn btn-lg btn-primary" href="page-3.html" role="button">Big Button.</a>
+ </p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-1.html b/tests/resources/overlay-test-site/page-1.html
new file mode 100644
index 0000000000..322d053d67
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-1.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 1</h1>
+
+ <p>Anim keffiyeh Odd Future, est hella PBR&B normcore dolor cupidatat pug American Apparel. Wes Anderson freegan aesthetic High Life, iPhone biodiesel artisan enim velit Etsy yr paleo tempor. Brunch dolore Portland excepteur, banh mi vegan tote bag quinoa irure polaroid. Ea eu pop-up laboris assumenda incididunt chillwave, <a href="page-4.html">nihil Truffaut</a> McSweeney's nostrud swag literally. Bushwick tempor Intelligentsia, drinking vinegar next level jean shorts Neutra brunch organic fingerstache sint. Kale chips try-hard organic pariatur, whatever meh Vice incididunt street art fingerstache forage dreamcatcher artisan. Cupidatat laborum accusamus Etsy, pug consequat meh.</p>
+
+ <p>Laborum Pitchfork bicycle rights, butcher 90's 3 wolf moon church-key shabby chic. Accusamus Godard cray ullamco lomo, deserunt selvage art party. Non Blue Bottle banh mi, bitters keffiyeh irure velit biodiesel tattooed. Fingerstache salvia leggings kitsch aesthetic umami. Sustainable dreamcatcher whatever trust fund, flannel <a href="page-2.html">aliquip artisan XOXO</a> deserunt fingerstache commodo tattooed. Enim brunch pop-up YOLO. Non Marfa Williamsburg sint blog, DIY photo booth mustache forage.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-2.html b/tests/resources/overlay-test-site/page-2.html
new file mode 100644
index 0000000000..1e10200b06
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-2.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 2</h1>
+
+ <p>Velit before they sold out post-ironic officia, sint yr consequat Cosby sweater YOLO you probably haven't heard of them Bushwick. Esse cillum polaroid literally, retro food truck kale chips nulla in. <a href="page-3.html">Disrupt single-origin</a> coffee duis Schlitz twee cornhole. Elit selfies cliche yr exercitation, iPhone duis ennui. Ennui biodiesel brunch distillery flexitarian, ugh aliquip mixtape ea shabby chic. Stumptown cornhole Cosby sweater cred. Fanny pack laboris bitters, bicycle rights meh swag Marfa roof party.</p>
+
+ <p>Nisi quis sartorial, Tonx Intelligentsia direct trade actually next level consectetur <a href="page-2.html">raw denim</a> pickled whatever eiusmod id occupy. In +1 Bushwick, aesthetic qui vinyl sustainable selfies chillwave chia sunt. Pickled gluten-free sustainable slow-carb High Life adipisicing banh mi, tofu kitsch polaroid quinoa sed ad four loko leggings. Ennui polaroid stumptown tote bag, selvage dolore fugiat whatever odio chillwave. Hella sed blog vegan. Irony tofu sustainable mlkshk wayfarers, skateboard pariatur. Deserunt laborum consectetur gastropub High Life, Neutra narwhal veniam cillum lo-fi magna ut nostrud craft beer nihil.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-3.html b/tests/resources/overlay-test-site/page-3.html
new file mode 100644
index 0000000000..9993d4f766
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-3.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 3</h1>
+
+ <p>Velit before they sold out post-ironic officia, sint yr consequat Cosby sweater YOLO you probably haven't heard of them Bushwick. Esse cillum polaroid literally, retro food truck kale chips nulla in. Disrupt single-origin coffee duis Schlitz twee cornhole. Elit selfies cliche yr exercitation, iPhone duis ennui. Ennui biodiesel brunch distillery flexitarian, ugh aliquip mixtape ea shabby chic. Stumptown cornhole Cosby sweater cred. Fanny pack laboris bitters, bicycle rights meh swag Marfa roof party.</p>
+
+ <p>Nisi quis sartorial, Tonx Intelligentsia direct trade actually next level consectetur raw denim pickled whatever eiusmod id occupy. In +1 Bushwick, aesthetic qui vinyl <a href="page-1.html">sustainable selfies</a> chillwave chia sunt. Pickled gluten-free sustainable slow-carb High Life adipisicing banh mi, tofu kitsch polaroid quinoa sed ad four loko leggings. <a href="page-2.html">Ennui polaroid stumptown</a> tote bag, selvage dolore fugiat whatever odio chillwave. Hella sed blog vegan. Irony tofu sustainable mlkshk wayfarers, skateboard pariatur. Deserunt laborum consectetur gastropub High Life, Neutra narwhal veniam cillum lo-fi magna ut nostrud craft beer nihil.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-4.html b/tests/resources/overlay-test-site/page-4.html
new file mode 100644
index 0000000000..5ad7ff13cc
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-4.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 4</h1>
+
+ <p>Velit before they sold out post-ironic officia, <a href="page-1.html">sint yr consequat</a> Cosby sweater YOLO you probably haven't heard of them Bushwick. Esse cillum polaroid literally, retro food truck kale chips nulla in. Disrupt single-origin coffee duis Schlitz twee cornhole. Elit selfies cliche yr exercitation, iPhone duis ennui. Ennui biodiesel brunch distillery flexitarian, ugh aliquip mixtape ea shabby chic. Stumptown cornhole Cosby sweater cred. Fanny pack laboris bitters, bicycle rights meh swag Marfa roof party.</p>
+
+ <p>Nisi quis sartorial, Tonx Intelligentsia direct trade actually next level consectetur raw denim pickled whatever eiusmod id occupy. In +1 Bushwick, aesthetic qui vinyl sustainable selfies chillwave chia sunt. Pickled gluten-free sustainable slow-carb High Life adipisicing banh mi, tofu kitsch polaroid quinoa sed ad four loko leggings. Ennui <a href="page-6.html">polaroid stumptown</a> tote bag, selvage dolore fugiat whatever odio chillwave. Hella sed blog vegan. Irony tofu sustainable mlkshk wayfarers, skateboard pariatur. Deserunt laborum consectetur gastropub High Life, Neutra narwhal veniam cillum lo-fi magna ut nostrud craft beer nihil.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-5.html b/tests/resources/overlay-test-site/page-5.html
new file mode 100644
index 0000000000..9183af04f8
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-5.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 5</h1>
+
+ <p>Velit before they sold out post-ironic officia, sint yr consequat Cosby sweater YOLO you probably haven't heard of them Bushwick. Esse cillum polaroid literally, retro food truck kale chips nulla in. Disrupt single-origin coffee duis Schlitz twee cornhole. Elit selfies cliche yr exercitation, iPhone duis ennui. Ennui biodiesel brunch distillery flexitarian, ugh aliquip mixtape ea shabby chic. Stumptown cornhole Cosby sweater cred. Fanny pack laboris bitters, <a href="page-4.html">bicycle rights meh</a> swag Marfa roof party.</p>
+
+ <p>Nisi quis sartorial, Tonx Intelligentsia direct trade actually next level consectetur raw denim pickled whatever eiusmod id occupy. In +1 Bushwick, aesthetic qui vinyl sustainable selfies chillwave chia sunt. Pickled gluten-free sustainable slow-carb High Life adipisicing banh mi, tofu kitsch polaroid quinoa sed ad four loko leggings. Ennui polaroid stumptown tote bag, <a href="page-3.html">selvage dolore</a> fugiat whatever odio chillwave. Hella sed blog vegan. Irony tofu sustainable mlkshk wayfarers, skateboard pariatur. Deserunt laborum consectetur gastropub High Life, Neutra narwhal veniam cillum lo-fi magna ut nostrud craft beer nihil.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/resources/overlay-test-site/page-6.html b/tests/resources/overlay-test-site/page-6.html
new file mode 100644
index 0000000000..f971e272d5
--- /dev/null
+++ b/tests/resources/overlay-test-site/page-6.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap 101 Template</title>
+
+ <!-- Bootstrap -->
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ </head>
+ <body>
+ <div class="container">
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default" role="navigation">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="">Project name</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="page-1.html">Page 1</a></li>
+ <li><a href="page-2.html">Page 2</a></li>
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li><a href="page-3.html">Page 3</a></li>
+ <li><a href="page-4.html">Page 4</a></li>
+ <li class="divider"></li>
+ <li class="dropdown-header">Nav header</li>
+ <li><a href="page-5.html">Page 5</a></li>
+ </ul>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li class="active"><a href="./">Default</a></li>
+ <li><a href="page-6.html">Page 6</a></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div><!--/.container-fluid -->
+ </div>
+
+ <!-- Main component for a primary marketing message or call to action -->
+ <div class="jumbotron">
+ <h1>Page 6</h1>
+
+ <p>Velit before they sold out post-ironic officia, sint yr consequat Cosby sweater YOLO you probably haven't heard of them Bushwick. Esse cillum polaroid literally, retro food truck kale chips nulla in. Disrupt single-origin coffee duis Schlitz twee cornhole. Elit selfies cliche yr exercitation, iPhone duis ennui. Ennui biodiesel brunch distillery flexitarian, ugh aliquip mixtape ea shabby chic. Stumptown cornhole Cosby sweater cred. Fanny pack laboris bitters, bicycle rights meh swag Marfa roof party.</p>
+
+ <p>Nisi quis sartorial, Tonx Intelligentsia direct trade actually next level consectetur raw denim pickled whatever eiusmod id occupy. In +1 Bushwick, aesthetic qui <a href="page-2.html">vinyl</a> sustainable selfies chillwave chia sunt. Pickled gluten-free sustainable slow-carb High Life adipisicing banh mi, tofu kitsch polaroid quinoa sed ad four loko leggings. Ennui polaroid stumptown tote bag, selvage dolore fugiat whatever odio chillwave. Hella sed blog vegan. Irony tofu sustainable mlkshk wayfarers, skateboard pariatur. Deserunt laborum consectetur gastropub High Life, Neutra narwhal veniam cillum lo-fi magna ut nostrud craft beer nihil.</p>
+ </div>
+
+ </div> <!-- /container -->
+
+ <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
+ <!-- Include all compiled plugins (below), or include individual files as needed -->
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
+
+ <script type="text/javascript">
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
+ </script>
+ <script>
+ var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%");
+ try {
+ var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 3);
+ piwikTracker.setCookieDomain('*.piwik.org');
+
+ piwikTracker.trackPageView();
+ piwikTracker.enableLinkTracking();
+ } catch( err ) {}
+ </script>
+ </body>
+</html> \ No newline at end of file