Проходные испытания на PhantomJS
Я не могу получить PhantomJS через тест успешно. Я попытался интегрировать его в свой проект, но после этого я попытался просто запустить основные образцы Angular Docs, и я получаю ту же проблему. Мои шаги до сих пор:
-
npm install -g phantomjs
-
phantomjs --webdriver=9515
//... GhostDriver - Main - работает на порту 9515
-
protractor protractorConf.js
Это тот же файл из примера с только именем браузера, а порт seleniumAddress изменен:
// An example configuration file.
exports.config = {
// The address of a running selenium server.
seleniumAddress: 'http://localhost:9515',
// Capabilities to be passed to the webdriver instance.
capabilities: {
'browserName': 'phantomjs'
},
// Spec patterns are relative to the current working directly when
// protractor is called.
specs: ['onProtractorRunner.js'],
// Options to be passed to Jasmine-node.
jasmineNodeOpts: {
showColors: true,
}
};
Появляется следующее сообщение об ошибке:
UnknownError: Error Message => 'Detected a page unload event; asynchronous script execution does not work across page loads.'
Я нашел эту проблему в github, которая, казалось, была связана. Я думал, что я достаточно понял их brower-setup.md, чтобы включить его в одну из моих beforeEach
функций. Затем я нашел здесь ptor
просто вворачивает драйвер. Ничего себе, я знаю, что я здесь noob здесь, в области транспортира/селена, но отношение сигнал-шум интенсивно сдерживается. Мне бы очень хотелось получить преимущества от использования PhantomJS, но перспектива потерять еще несколько часов на этом вредит моей голове. Я нахожусь в Windows 7 Enterprise 64-bit, в случае, если это имеет значение. Спасибо!
Ответы
Ответ 1
Искренне это исправление решало ту же проблему для меня:
https://github.com/pschwartau/protractor/commit/1eeff8b1b2e3e8f3b7c8152264411f26d4665a07
Как первоначально описано здесь: https://github.com/angular/protractor/issues/85#issuecomment-26846255 от renanmartins
Внутри транспортира /lib/protractor.js Заменить
this.driver.get('about:blank');
this.driver.executeScript(
'window.name = "' + DEFER_LABEL + '" + window.name;' +
'window.location.href = "' + destination + '"');
с
var driver = this.driver;
this.getCapabilities().then(function (capabilities) {
if (capabilities.caps_.browserName === 'phantomjs') {
driver.executeScript('window.name = "' + DEFER_LABEL + '" + window.name;');
driver.get(destination);
} else {
driver.get('about:blank');
driver.executeScript(
'window.name = "' + DEFER_LABEL + '" + window.name;' +
'window.location.href = "' + destination + '"');
}
// Make sure the page is an Angular page.
driver.executeAsyncScript(clientSideScripts.testForAngular, 10).
then(function(hasAngular) {
if (!hasAngular) {
throw new Error('Angular could not be found on the page ' +
destination);
}
});
});