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.
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. –
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. –
@ Error404 Edytowałem powyższą odpowiedź. Sprawdź i odeślij, jeśli masz dalsze pytania – Vicky