2014-10-31 16 views
24

Mam prostą stronę z javascript, która zatwierdza email napisane na wejściu:CasperJS i 'próba Niebezpieczne JavaScript, żeby uzyskać dostęp do ramki z URL' Błąd

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; 
}; 

Chcę przetestować funkcję sprawdzania poprawności za pomocą CasperJS. Tu jest mój przypadek testowy:

testów/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(); 
    }); 

}); 

Ale kiedy uruchomić testy z wykorzystaniem casperjs test test/validator.test.js, zawsze jest błąd po informacje na temat testów:

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.

Co jest nie tak? Wersja

PhantomJS: 1.9.8

+0

Czy zawęziłeś linię, która to powoduje? Jeśli nie, dodaj plik console.log i spróbuj zawęzić go do jednej linii. –

+0

@ArtjomB. Ta linia jest drukowana po zakończeniu wykonywania testu (po wykonaniu testów "PASS 2" w 2.693s, 2 przeszło ... ") – michaeluskov

+0

@ArtjomB. 1.9.8 – michaeluskov

Odpowiedz

18

Najnowsze PhantomJS (1.9.8) wprowadzono ten komunikat o błędzie. Nie powoduje żadnego prawdziwego problemu, poza myleniem linii logu przy wychodzeniu z PhantomJS.

To jest ustalona w niepublikowane 1,9 Branża: https://github.com/ariya/phantomjs/pull/12720

+8

Ta odpowiedź (http://stackoverflow.com/a/26688062/789683) ma obejście problemu – flipchart

+0

To działa dobrze dla mnie w PhantomJS 2.2.1 –

1

Ten problem został rozwiązany w wersji phantomjs 1,9

"phantomjs": "^1.9.9"

dla casperJs

casperjs --ssl-protocol=tlsv1 test run.js 
0

Hej istnieje kilka obejścia próbować obejść to poprzez wyjście z fantomu w inny sposób, taki jak

casperjs --ssl-protocol=tlsv1 test run.js 

KTÓRE NIE dawka pomóc i

setTimeout(function(){ 
    phantom.exit(); 
}, 0); 

zamiast

this.exit(); 

nic nie działało !!!

Próbowałem różnych wersji PhantomJS. Moje wyniki przychodzą jako JSON i po wielu godzinach nieudanych prób JSON.parse (stdout) musiałem się poddać. Pomyślałem "F", że zamierzam poradzić sobie z błędem "F".

tak proste przed i wyjść I

this.echo(',{"error":"'); 

i po wyślę

this.echo('"}]'); 

kiedy dostanę moje wyniki z powrotem i po prostu wymienić wszystkie podziały wiersza i zignorować błąd

stdout = stdout.replace(/(?:\r\n|\r|\n)/g, ''); 

Uwaga boczna: problem ten został naprawiony za pomocą phantom 1.9.9, ale zamiast tego skupiono się na budowaniu fantomu 2.0 w hich nie jest kompatybilny z CasperJS

1

Otrzymałem ten sam błąd, więc próbowałem aktualizacji do phantomjs 1.9.9 (od 1.9.8). Jednak podczas próby zainstalowania 1.9.9 wystąpił błąd instalacji, więc zostałem ponownie zaktualizowany do wersji phantomjs 1.9.7 i to naprawiło ten błąd. Wygląda więc na to, że jest to problem wprowadzony w phantomjs 1.9.8.

+0

Dziękuję! Jeśli ktoś potrzebuje poprzednich plików exe: https://bitbucket.org/ariya/phantomjs/downloads – Aliz