Ошибка CasperJS и "Небезопасная ошибка JavaScript для доступа к фрейму с URL-адресом"
У меня есть простая страница с javascript, которая проверяет электронную почту, написанную на входе:
email.html:
<!DOCTYPE html>
<html>
<head>
<title>Email validation</title>
<script src="email.js"></script>
</head>
<body>
<span style="padding: 5px;">
<input type="text" id="email-input" placeholder="Email..."></input>
</span>
</body>
</html>
email.js:
var checkEmail = function() {
var regexp = /BIG_REGEX/;
var email = document.getElementById('email-input').value;
if (email === '')
removeFrame();
else if (regexp.test(email))
drawFrame('green');
else
drawFrame('red');
};
var removeFrame = function() {
var input = document.getElementById('email-input');
input.parentNode.style.backgroundColor = input.parentNode.parentNode.style.backgroundColor;
};
var drawFrame = function(color) {
var input = document.getElementById('email-input');
input.parentNode.style.backgroundColor = color;
};
window.onload = function() {
document.getElementById('email-input').onkeyup = checkEmail;
};
Я хочу проверить функции проверки с помощью CasperJS. Вот мой тестовый пример:
тест /validator.test.js:
var fillEmail = function(browser, email) {
browser.sendKeys('#email-input', email, {reset: true});
};
var getValidation = function(browser) {
var color = browser.evaluate(function () {
return document.getElementById('email-input').parentNode.style.backgroundColor;
});
return color;
};
var validate = function(browser, email) {
fillEmail(browser, email);
return getValidation(browser);
};
casper.test.begin('Validation testing', function suite(test) {
casper.start('http://localhost:8000/email.html', function() {
test.assertEquals(validate(this, '[email protected]'), 'green', '[email protected]');
test.assertEquals(validate(this, 'vnbgfjbndkjnv'), 'red', 'vnbgfjbndkjnv');
}).run(function() {
test.done();
});
});
Но когда я запускаю тесты с помощью casperjs test test/validator.test.js
, после получения информации о тестах всегда есть ошибка:
Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///C:/Users/home/AppData/Roaming/npm/node_modules/casperjs/bin/bootstrap.js. Domains, protocols and ports must match.
Что не так?
Версия PhantomJS: 1.9.8
Ответы
Ответ 1
Последнее приложение PhantomJS (1.9.8) ввело это сообщение об ошибке. Это не вызывает никакой реальной проблемы, кроме путаных строк журнала при выходе из PhantomJS.
Он фиксируется в неизданной ветке 1.9:
https://github.com/ariya/phantomjs/pull/12720
Ответ 2
Эта проблема исправлена в версии phantomjs версии 1.9
"phantomjs": "^1.9.9"
для casperJs
casperjs --ssl-protocol=tlsv1 test run.js
Ответ 3
Я получал эту же ошибку, поэтому я попробовал обновление до phantomjs 1.9.9
(от 1.9.8
). Однако при попытке установить 1.9.9
я установил ошибку установки, поэтому я изменил значение до phantomjs 1.9.7
и исправил эту ошибку для меня. Итак, похоже, что это проблема, введенная в phantomjs 1.9.8
.
Ответ 4
Эй, есть несколько обходных путей, чтобы попытаться обойти это, выйдя из phantom по-другому, например
casperjs --ssl-protocol=tlsv1 test run.js
КОТОРЫЕ ДОЗИ НЕ ПОМОГАЮТ и
setTimeout(function(){
phantom.exit();
}, 0);
вместо
this.exit();
Ничего не сработало!!!
Я попробовал несколько разных версий PhantomJS.
Моя продукция приходит как JSON, и после многих часов неудачных попыток JSON.parse(stdout) мне пришлось отказаться. Я решил "F", что я просто буду обрабатывать ошибку "F'ing".
так просто до выхода i
this.echo(',{"error":"');
и после отправки
this.echo('"}]');
Когда я получаю свои результаты назад, я просто заменяю все разрывы строк и игнорирую ошибку
stdout = stdout.replace(/(?:\r\n|\r|\n)/g, '');
Замечание: эта проблема была исправлена с помощью phantom 1.9.9, но вместо этого сосредоточена на построении phantom 2.0, которая несовместима с CasperJS