2015-05-14 7 views
5

Chcę zaimportować moją funkcję JavaScript do mojego projektu Java w Eclipse i używać go z Selenium, ale nie mogę znaleźć formularza, aby to zrobić.Jak mogę zaimportować zewnętrzny .js do mojego testu Java z Selenium w Eclipse?

staram czyniąc Js złożyć tak, aby Selen mogła rozpoznać ten kod:

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

Cóż, jak widać mam 3 div i co chcę robić to, aby uzyskać dostęp do trzeciego div w które mam 2 divs więcej (to jest wskazówka pętli). W każdym dziale pętli chcę kliknąć.

Próbowałem korzystać z tej funkcji w moim projekcie Java, ale nie mogę uzyskać żadnych rezultatów, więc starałem się wykonać tej funkcji jako ciąg i następnie wykonanie skryptu takiego:

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

//Executing script 

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

działa ale nie jest to zbyt użyteczne, ponieważ chcę utworzyć zewnętrzny .js, który zawiera wszystkie funkcje JavaScript i wywoływać je stamtąd, a nie ciąg.

Każda pomoc zostanie doceniona. Widziałem tutaj kilka pytań, ale każdy z nich pracował dla mnie. Dziękuję bardzo!

Odpowiedz

4

To działa, ale nie jest to bardzo przydatne, ponieważ chcę, aby zewnętrznego .js, które zawiera wszystkie funkcje JavaScript i nazywają je z tam, a nie w String.

Można to osiągnąć tylko poprzez załadowanie pliku twoi js zewnętrznych do DOM

var addscript=window.document.createElement('script');addscript.type='text/javascript';addscript.src='http://localhost/somescript.js';document.getElementsByTagName('body')[0].appendChild(addscript); 

Uwaga: Większość przeglądarek nie pozwalają na załadowanie lokalne zasoby tak umieścić pliku zewnętrznego js w lokalnym serwerze internetowym a następnie do niego dostęp jak http://localhost/somescript.js

Po załadowaniu pliku js do DOM teraz można wywołać funkcje javaScript w pliku js zewnętrznych

Przykład

Powiedzmy mamy zewnętrznego pliku js nazwane somescript.js zawierający poniższą funkcją

//simple function which sets the value "test" to the search box 

window.somefunc = function() {document.getElementsByName("s")[0].value='test';} 

kod Webdriver:

 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();"); 

Uwaga: Behind Sceny Selenium opakowuje twój kod JavaScript w anonymous function. Tak więc twoja funkcja somefunc jest lokalna dla tej anonimowej funkcji. A ze względu na reguły scoping JavaScript, somefunc nie istnieje poza tą anonimową funkcją. więc stworzyliśmy funkcję globalną, przypisując ją do okna.

EDIT:

I naprawdę nie rozumiem, dlaczego używasz oświadczenie okna. I I szukałem czegoś takiego jak ((JavascriptExecutor) sterownik ).executeScript ("tutaj .js"); Ale ja nie wiem, czy to jest możliwe

ten sposób executeScript metoda wykonuje dostarczonego kodu JavaScript fragment

Skrypt pod warunkiem, będą realizowane jako ciele anonimowej funkcji.

Przykład jeśli użyliśmy poniższy kod

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

Co masz na myśli, gdzie mówisz, że chcesz umieścić js zewnętrznych do DOM?

przez Dom mam na myśli model obiektowy dokumentu strony skonstruowanego jako drzewa obiektów (w skrócie stronie internetowej) .My użyciu javascript, aby załadować js zewnętrznych na stronie internetowej, a następnie wywołać funkcji w pliku js i wykonaj je (jak w powyższym przykładzie).

W kodzie, który umieścisz w swojej edycji. Obie funkcje są takie same?

Właśnie dał przykład przez to co mam na myśli każdy skrypt został przewidziane w wykonać skrypt zostanie wykonany w korpusie anonimowy function.In naszym przypadku nie zostały wykorzystane executescript stworzyć funkcję somefunc raczej używany to z zewnętrznego pliku jS w Domu my tylko nazwał go stosując metodę executescript więc można zrobić z lub bez obiektu window

//simple function which sets the value "test" to the search box 

somefunc = function() {document.getElementsByName("s")[0].value='test';}//this will also work 

nadzieję, że to pomaga you.Kindly wrócić, jeśli masz jakiekolwiek pytania.

+0

Może to pytania są trochę głupie, ale jestem zupełnie nowy w JavaScript i selenu. Co masz na myśli mówiąc, że chcesz umieścić zewnętrzny .js w DOM? I tak naprawdę nie rozumiem, dlaczego używasz oświadczenia okna. I szukałem czegoś takiego jak sterownik '((JavascriptExecutor) .executeScript (" tutaj .js ");' Ale nie wiem, czy to jest możliwe. –

+0

Dlatego właśnie stworzyłem mój plik .js jako 'Selenium.prototype.doProve ...'. Ponieważ widziałem w Internecie, że musiało być przygotowane do Selenum, można go przeczytać tam, gdzie 'doProve' to nazwa funkcji. –

+0

@ Error404 Edytowałem powyższą odpowiedź. Sprawdź i odeślij, jeśli masz dalsze pytania – Vicky

-1

Możesz przechowywać javascript w pliku takim jak właściwości lub plik xml.

Przykładowy plik:

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

Przykładowy kod:

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); 
Powiązane problemy