Es funktioniert, aber es ist nicht sehr nützlich, weil ich ein externen Js machen will, die die JavaScript alle Funktionen enthalten und sie von dort zu nennen, nicht in einem String.
können Sie dies erreichen nur Ihre externe js
var addscript=window.document.createElement('script');addscript.type='text/javascript';addscript.src='http://localhost/somescript.js';document.getElementsByTagName('body')[0].appendChild(addscript);
durch Laden in die DOM-Datei Hinweis: Die meisten Browser Sie nicht erlauben, lokale Ressourcen zu laden, so setzen Sie Ihre externe js Datei in lokalen Webserver und greift dann wie http://localhost/somescript.js
Nachdem die js-Datei in DOM geladen jetzt können Sie die JavaScript-Funktionen in dem externen js nennen Datei
Beispiel
Lets sagen, dass wir eine externe js Datei mit dem Namen somescript.js haben, die die unten Funktion
//simple function which sets the value "test" to the search box
window.somefunc = function() {document.getElementsByName("s")[0].value='test';}
WebDriver Code enthält:
driver.get("http://www.jquery.com");
//Load the External js file into DOM
((JavascriptExecutor) driver)
.executeScript("var addscript=window.document.createElement('script');addscript.type='text/javascript';addscript.src='http://localhost/somescript.js';document.getElementsByTagName('body')[0].appendChild(addscript);");
//wait for the js to be loaded to the DOM
((JavascriptExecutor) driver)
.executeScript("return typeof(somefunc)").toString().equals("function");
//Now you call the JavaScript functions in the JS file
((JavascriptExecutor) driver)
.executeScript("somefunc();");
Hinweis: Hinter Die Szenen Selenum wickelt Ihren JavaScript-Code in eine anonymous function. Daher ist Ihre Funktion somefunc lokal für diese anonyme Funktion. Und aufgrund der Scoping-Regeln von JavaScript existiert Somefunc nicht außerhalb dieser anonymen Funktion. also haben wir es zu einer globalen Funktion gemacht, indem wir es Fenster zugewiesen haben.
EDIT:
Und ich verstehe nicht wirklich, warum Sie die Fenster-Anweisung verwenden. Und ich suchte etwas wie ((JavascriptExecutor) Treiber).executeScript ("hier die .js"); Aber ich weiß nicht, ob es möglich
ist
Dies ist, wie executeScript Methode, um das zur Verfügung gestellt Javascript
führt
Die Skript Fragment zur Verfügung gestellt wird, wie der Körper einer anonymen Funktion ausgeführt werden.
Beispiel, wenn wir den Code unten
((JavascriptExecutor) driver)
.executeScript("somefunc = function() {document.getElementsByName("s")[0].value='test';}");
((JavascriptExecutor) driver)
.executeScript("somefunc();");
(function() {
somefunc = function() {document.getElementsByName("s")[0].value='test';}
})();
(function() {
somefunc();
});
Was früher meinen Sie, wo Sie sagen, dass Sie die externe Js in das DOM setzen wollen?
von DOM bedeutet i-Dokument-Objekt-Modell der Seite als ein Baum von Objekten aufgebaut (kurz Ihre Webseite) .Wir Javascript verwenden, um die externen js auf die Webseite zu laden und dann die Funktionen in der js-Datei aufrufen und führe sie aus (wie im obigen Beispiel).
In den Code, den Sie in Ihre Bearbeitung eingeben. Beide Funktionen sind gleich?
Ich habe nur ein Beispiel von, was ich meinte jedes Skript in nicht verwendet haben ExecuteScript die someFunc Funktion erstellen Skript ausführen vorgesehen war, dass wir in den Körper eines anonymen function.In unserem Fall ausgeführt werden vielmehr dazu verwendet es von der externen js Datei in dom nannten wir sie nur die ExecuteScript Methode verwendet, so dass Sie es mit oder ohne Fenster Objekt tun kann
//simple function which sets the value "test" to the search box
somefunc = function() {document.getElementsByName("s")[0].value='test';}//this will also work
Hope this you.Kindly zurück hilft, wenn Sie Fragen haben.
Vielleicht sind diese Fragen ein bisschen albern, aber ich bin völlig neu in JavaScript und Selen. Was meinst du damit, wo du sagst, dass du die externen .js in das DOM legen willst? Und ich verstehe nicht wirklich, warum Sie die Window-Anweisung verwenden. Und ich suchte etwas wie '((JavascriptExecutor) Treiber) .executeScript (" hier die .js ");' Aber ich weiß nicht, ob es möglich ist. –
Deshalb habe ich meine .js-Datei als 'Selenium.prototype.doProve ...' erstellt. Da ich im Internet gesehen habe, dass es auf das Selenium vorbereitet sein musste, konnte es dort lesen, wo "doProve" ist der Name der Funktion. –
@ Error404 Ich habe meine obige Antwort bearbeitet.Kindly überprüfen und zurück, wenn Sie weitere Fragen haben – Vicky