Подтвердить что ты не робот

Ошибка 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

4b9b3361

Ответ 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