"Headless" тестирование с PhantomJS и SlimerJS
PhantomJS
PhantomJS — это сборка движка WebKit без графического интерфейса, позволяющая в режиме консоли загружать веб-страницу, выполнять JavaScript, полноценно работать с DOM, Canvas, CSS, JSON и SVG. WebKit лежит в основе таких популярных браузеров как Chrome и Safari. Вы имеете возможность интеграции с различными фреймворками для тестирования JavaScript и веб-страниц начиная от Jasmine до WebDriver. Для работы с PhantomJS браузером был реализван драйвер на чистом JavaScript, который получил название GhostDriver. Вот пример теста, в котором он импользуется:
package ghostdriver;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import static junit.framework.TestCase.assertEquals;
public class PhantomJSCommandTest extends BaseTest {
@Test
public void executePhantomJS() {
WebDriver d = getDriver();
if (!(d instanceof PhantomJSDriver)) {
// Skip this test if not using PhantomJS.
// The command under test is only available when using PhantomJS
return;
}
PhantomJSDriver phantom = (PhantomJSDriver)d;
// Do we get results back?
Object result = phantom.executePhantomJS("return 1 + 1");
assertEquals(new Long(2), (Long)result);
// Can we read arguments?
result = phantom.executePhantomJS("return arguments[0] + arguments[0]", new Long(1));
assertEquals(new Long(2), (Long)result);
// Can we override some browser JavaScript functions in the page context?
result = phantom.executePhantomJS("var page = this;" +
"page.onInitialized = function () { " +
"page.evaluate(function () { " +
"Math.random = function() { return 42 / 100 } " +
"})" +
"}");
phantom.get("http://ariya.github.com/js/random/");
WebElement numbers = phantom.findElement(By.id("numbers"));
boolean foundAtLeastOne = false;
for(String number : numbers.getText().split(" ")) {
foundAtLeastOne = true;
assertEquals("42", number);
}
assert(foundAtLeastOne);
}
}
Официальный сайт: http://phantomjs.org/
Репозиторий с Ghost Driver: https://github.com/detro/ghostdriver
SlimerJS
SlimerJS - это скриптовый браузер для разработчика имеющий в своем арсенале движок эквивалентный последнему Firefox(Gecko), который лежит в основе ещё нескольких браузеров. Его также можно использовать вместе с GhostDriver, благодаря своей схожести с PhantomJS.
Официальный сайт: http://slimerjs.org/
Репозиторий на GitHub: https://github.com/laurentj/slimerjs