Używam Selenium WebDriver, aby spróbować wstawić zewnętrzny plik javascript do DOM, zamiast wpisywać całą rzecz w executeScript.Jak załadować plik javascript do DOM przy użyciu selenu?
Wygląda na to, że poprawnie umieszcza węzeł w DOM, ale potem po prostu lekceważy źródło, tj. Funkcja na wspomnianym źródłowym pliku js nie działa.
Oto mój kod:
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class Example {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://google.com");
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByTagName('head')[0].innerHTML += '<script src=\"<PATH_TO_FILE>\" type=\"text/javascript\"></script>';");
}
}
Kod pliku javascript Mam łączącej się to
alert("hi Nate");
umieściłem plik js na moim localhost, nazwałem go przy użyciu pliku : ///, i wypróbowałem to na serwerze zewnętrznym. Nie ma kości.
Również w części Java próbowałem dodać "scr" + "ipt" używając tej sztuczki, ale nadal nie działało. Kiedy sprawdzam DOM za pomocą elementu inspekcji Firefox, widzę, że ładuje on węzeł skryptu poprawnie, więc jestem całkiem zdezorientowany.
Próbowałem też to rozwiązanie, które najwyraźniej zostało dokonane dla innej wersji selenu (nie webdriver), a więc nie działa w najmniejszym stopniu: Load an external js file containing useful test functions in selenium
Tak jest! Skończyło się na tym, że przez jakiś czas robiłem sobie z tym problem i uważam, że problem nie dotyczył Selenium czy czegoś w tym stylu, ale z moim użyciem innerHTML do dołączenia DOM, zamiast appendChild, jak na http://stackoverflow.com/questions/1197575/can-scripts-be-inserted-with-innerhtml Mam nadzieję, że to pytanie pomoże komuś w przyszłości, ponieważ nigdy nie znalazłem działającego przykładu użycia selenu do dodania zewnętrznego pliku javascript. –
Ładny kod , koleś, ale w jakiej ścieżce to powinno być? – estemendoza
@estemendoza Domyślam się, że jest względny, ale może być względny jak np. '/ Js/somescript.js' lub na twoim komputerze' ': // home/me/js/somescript.js' – HMR