Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - OpenBuildings/phpunit-spiderling: Capybara inspired integration testing - selenium, phantomjs, etc. · GitHub
Skip to content

Repository files navigation

PHPUnit Spiderling

Build StatusScrutinizer Quality ScoreCode CoverageLatest Stable Version

Heavily inspired by capybara capybara. Using the spiderling package to the fullest. It gives you the ability to quickly write integration test with powerful DSL and choose between different drivers with different combinations of features and performance - e.g. phanomjs or raw php with curl.

Example Test:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver phantomjs */publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->assertHasCss('#navlink-1', array('text' => 'Subpage 1'), 'Should have a navigation link')
->click_button('Edit')
->assertHasCss('h1', array('text' => 'Edit Record'), 'Should be on the edit page of a record')
->fill_in('Name', 'New name')
->click_button('Save')
->assertHasCss('.notification', array('text' => 'Successfull edit'), 'Should have successfully performed the edit');
}
}

Spiderling

Spiderling has a fluid DSL that its best you get familiar with. The testcase has all the methods of Openbuildings\Spiderling\Page so you can use them directly along with some additional assertions.

The Testcase

To use phpunit spiderling you need to write your test as extends \Openbuildings\PHPUnitSpiderlingTestCase - it will give you all of the feature as methods of the class.

Assertions

The custom assertions are:

  • assertHasCss($selector, array $filters = array(), $message = NULL)
  • assertHasNoCss($selector, array $filters = array(), $message = NULL)
  • assertHasField($selector, array $filters = array(), $message = NULL)
  • assertHasNoField($selector, array $filters = array(), $message = NULL)
  • assertHasXPath($selector, array $filters = array(), $message = NULL)
  • assertHasNoXPath($selector, array $filters = array(), $message = NULL)
  • assertHasLink($selector, array $filters = array(), $message = NULL)
  • assertHasNoLink($selector, array $filters = array(), $message = NULL)
  • assertHasButton($selector, array $filters = array(), $message = NULL)
  • assertHasNoButton($selector, array $filters = array(), $message = NULL)

All of them assert that an element is on the page (or is not) by using a specific locator type and filters. Also they are actually an extension of Openbuildings\Spiderling\Page so they are available to all the nested nodes (and are asserting only in the context of the node)

For example:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->visit('http://example.com/index.html')
->find('form#big')
// This assertion checks only the form
->assertHasField('Name')
->end();
}
}

Environment

You can modify the environment only for a specific test by using the ->environment() method. It returns a Environment Backup object, and whatever you set it to will be restored at the end of the test.

Here's an example usage:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
publicfunctiontest_sample()
{
$this
->environment()
->backup_and_set(array(
'SomeClass::$variable' => 'new value',
'REMOTE_HOST' => 'example.com',
));
$this
->visit('http://example.com/index.html')
->assertHasField('Name');
}
}

Switching drivers

PHPUnit Spiderling uses the PHP Annotations to set up which driver to use fore each test. Heres how you do that:

useOpenbuildings\PHPUnitSpiderling\TestCase;
class SpiderlingTest extends TestCase {
/** * @driver simple */publicfunctiontest_sample()
{
// ...
}
/** * @driver phantomjs */publicfunctiontest_sample_2()
{
// ...
}
}

You can have different drivers for each test, the available ones are: simple, kohana and phantomjs - where the default driver is simple. Each driver is loaded with the default configuration, but you can change it by modifying the appropriate method that loads the driver

  • driver_simple() - will return Driver_Simple object
  • driver_kohana() - will return Driver_Kohana object
  • driver_phantomjs() - will return Driver_Phantomjs object

Save on failure

There is a special testcase listener class included that saves the state of the test when there is a failure, and saves it as an html page for ease referance later. This is the Saveonfailure class. In order to use it, you'll need to modify your phpunit.xml like this:

<!-- It is important to have composer autoloading. you can have a different bootstrap file, but this is the standard and easiest way to handle it. -->
<phpunitbootstrap="vendor/autoload.php">
<listeners>
<listenerclass="Openbuildings\PHPUnitSpiderling\Saveonfailure"file="vendor/openbuildings/phpunit-spiderling/src/Openbuildings/PHPUnitSpiderling/Saveonfailure.php">
<arguments>
<!-- This is the folder where all the html snapshots will be placed -->
<string>application/logs/functest</string>
<!-- This is the base url which will be prefixed in fron of all relative assets, so that the page is loaded properly. Optional -->
<string>http://test.clippings.dev</string>
</arguments>
</listener>
</listeners>
</phpunit>

License

Copyright (c) 2012-2013, OpenBuildings Ltd. Developed by Ivan Kerin as part of clippings.com

Under BSD-3-Clause license, read LICENSE file.

About

Capybara inspired integration testing - selenium, phantomjs, etc.

Resources

Stars

14 stars

Watchers

13 watching

Forks

Releases

Packages

Used by

Contributors

Languages