OK Ich bin neu in PhantomJS und der ganzen Headless-Browsing-Sache. Ich benutze Selenium und PhantomJS, um meine Website zu testen. Die Site basiert auf C# mit .NET MVC. PhantomJS kann anscheinend keine JS-Skripts kompilieren, die Klassendefinitionen enthalten.PhantomJS kompiliert JavaScript-Skripte mit Klassendefinitionen nicht
Die Index.cshtml enthält Verweise auf nur zwei Skripte:
@section scripts {
<script src="~/Scripts/foo.js"></script>
<script src="~/Scripts/bar.js"></script>
}
Der Inhalt foo.js sind:
function add(a, b) {
console.log("this works...")
return a + b;
}
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
der Inhalt bar.js sind:
console.log("1 + 2 = ", add(1, 2));
Ich spiele Selen mit F # 's REPL. Der Code auf der Seite zu navigieren:
let driver = new OpenQA.Selenium.PhantomJS.PhantomJSDriver(@"C:\pathToPhantomJS\");
let url = "http://myLocalHost:12345/home/index"
driver.Navigate().GoToUrl(url)
let logs = driver.Manage().Logs.GetLog(OpenQA.Selenium.LogType.Browser)
logs |> Seq.iter (fun l -> printf "%s\n" l.Message)
Wenn ich versuche, die index.cshtml Seite mit PhantomJS zu treffen, bekomme ich folgende Fehlermeldung:
[ERROR - 2016-07-04T21:19:44.274Z] Session [f2c46410-422c-11e6-881e-555d71de793e] - page.onError - msg: ReferenceError: Can't find variable: add
phantomjs://platform/console++.js:263 in error [ERROR - 2016-07-04T21:19:44.275Z] Session [f2c46410-422c-11e6-881e-555d71de793e] - page.onError - stack:
global code (http://localhost:56135/Scripts/bar.js:1)phantomjs://platform/console++.js:263 in error
Der Fehler erscheint, sobald ich ausführen die erste Zeile (Navigieren). Aber sobald ich die Klassendefinition entfernen (von Polygon) aus foo.js, ist alles prima an:
this works...
1 + 2 = 3
Es gibt kein Problem mit diesem in Chrom/Firefox. Ich habe überall gesucht und das einzige, was ich finden kann, das diesem Problem nahe kommt, ist die ganze "inkusive Ausführung"/"Sandbox" -Ding mit page.evaluate() (siehe here). Aber ich benutze offensichtlich keine page.evaluate() hier, und auch weil die Skripte in der Reihenfolge im Mark-up referenziert werden, SOLLTE der Browser in der Lage sein, die Definitionen aufzunehmen. Tatsächlich tut es genau das, es scheint nur zu brechen, wenn es eine Klassendefinition enthält.
Wenn es hilft, ich verwende Windows 10 und Version 2.1.1 von PhantomJS. Ich bekomme das gleiche Problem, wenn ich PhantomJS über die Eingabeaufforderung des Windows ausführe, also glaube ich nicht, dass dies ein Selenium-Problem ist.
Kann mir bitte jemand helfen?
Danke!