2015-05-14 6 views
5

Ich möchte meine Funktion von JavaScript zu meinem Java-Projekt in Eclipse importieren und es mit Selenium verwenden, aber ich kann das Formular nicht finden, um dies zu tun.Wie kann ich eine externe .js zu meinem Java-Test mit Selenium in Eclipse importieren?

Ich versuche zu machen Js wie diese Selen-Datei könnte diesen Code erkennen:

Selenium.prototype.doProve = function() { 
    $("#proveDiv > div > div").each(function(i, obj) 
    { 
    $(i).click(function(){}); 
    }); 
}; 

Nun, wie Sie Ich habe 3 divs sehen kann und was ich will, es ist zu tun, um den dritten div zuzugreifen in was ich habe 2 divs mehr (das ist der Schlüssel der Schleife). In jedem div der Schleife möchte ich einen Klick machen.

Ich habe versucht, diese Funktion in meinem Java-Projekt zu verwenden, aber ich kann kein Ergebnis bekommen, damit ich diese Funktion als String auszuführen versucht, und dann das Skript wie folgt ausführen:

String script = "$(\"#proveDiv > div > div" + 
        "\").each(function(i, obj){ " + 
        "$(i).click(function(){});})"; 

//Executing script 

if (driver instanceof JavascriptExecutor) { 
     ((JavascriptExecutor) driver).executeScript(script); 
} 

Es funktioniert, aber es ist nicht sehr nützlich, weil ich eine externe .js machen möchte, die alle JavaScript-Funktionen enthält und sie von dort aufruft, nicht in einem String.

Jede Hilfe wäre willkommen. Ich habe hier einige Fragen gesehen, aber jeder von ihnen hat für mich funktioniert. Vielen Dank!

Antwort

4

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.

+0

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. –

+0

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. –

+0

@ Error404 Ich habe meine obige Antwort bearbeitet.Kindly überprüfen und zurück, wenn Sie weitere Fragen haben – Vicky

-1

Sie könnten das Javascript in einer Datei wie einer Eigenschaft oder XML-Datei speichern.

Beispieldatei:

clickOnLoginButton=function bclick(){....};bclick(); 

Beispielcode:

FileInputStream file; 
Properties properties = new Properties(); 

// load the file handle for properties file 
file = new FileInputStream(filename); 

// load all the properties from this file 
properties.load(file); 

// we have loaded the properties, so close the file handle 
file.close(); 

String mainExecutor = properties.getProperty(parameter); 
WebDriver dr = initalizeWebDriver(); 
JavascriptExecutor js = (JavascriptExecutor) dr; 

js.executeScript(mainExecutor); 
Verwandte Themen