Come utilizzare JavaScript con Selenium WebDriver Java

Voglio usare JavaScript con WebDriver (Selenium 2) usando Java.

Ho seguito alcune guide e nella pagina Guida introduttiva : c’è un’istruzione in prima linea da eseguire come:

$ ./go webdriverjs 

La mia domanda: Da quale cartella / posizione verrà eseguito / eseguito il comando sopra menzionato?

In base alle tue domande precedenti, suppongo che tu voglia eseguire snippet di JavaScript dal WebDriver di Java. Per favore correggimi se sbaglio.

Il WebDriverJs è in realtà “solo” un altro WebDriver linguaggio WebDriver (è ansible scrivere i propri test in Java, C #, Ruby, Python, JS e forse anche più lingue a partire da ora). Questo, in particolare, è JavaScript e consente quindi di scrivere test in JavaScript.

Se vuoi eseguire il codice JavaScript in Java WebDriver , fallo invece:

 WebDriver driver = new AnyDriverYouWant(); if (driver instanceof JavascriptExecutor) { ((JavascriptExecutor)driver).executeScript("yourScript();"); } else { throw new IllegalStateException("This driver does not support JavaScript!"); } 

Mi piace farlo anche:

 WebDriver driver = new AnyDriverYouWant(); JavascriptExecutor js; if (driver instanceof JavascriptExecutor) { js = (JavascriptExecutor)driver; } // else throw... // later on... js.executeScript("return document.getElementById('someId');"); 

Puoi trovare più documentazione su questo qui, nella documentazione o, preferibilmente, nel JavaDocs di JavascriptExecutor .

executeScript() accetta anche chiamate di funzione e JS raw. Puoi return un valore da esso e puoi passare molti argomenti complicati ad esso, alcuni esempi casuali:

  1.  // returns the right WebElement // it's the same as driver.findElement(By.id("someId")) js.executeScript("return document.getElementById('someId');"); 
  2.  // draws a border around WebElement WebElement element = driver.findElement(By.anything("tada")); js.executeScript("arguments[0].style.border='3px solid red'", element); 
  3.  // changes all input elements on the page to radio buttons js.executeScript( "var inputs = document.getElementsByTagName('input');" + "for(var i = 0; i < inputs.length; i++) { " + " inputs[i].type = 'radio';" + "}" ); 

JavaScript con Selenium WebDriver

Il selenium è una delle suite di test automatizzate più popolari. Selenium è progettato per supportare e incoraggiare il test di automazione degli aspetti funzionali delle applicazioni basate sul web e una vasta gamma di browser e piattaforms.

  public static WebDriver driver; public static void main(String[] args) { driver = new FirefoxDriver(); // This opens a window String url = "----"; /*driver.findElement(By.id("username")).sendKeys("yashwanth.m"); driver.findElement(By.name("j_password")).sendKeys("[email protected]");*/ JavascriptExecutor jse = (JavascriptExecutor) driver; if (jse instanceof WebDriver) { //Launching the browser application jse.executeScript("window.location = \'"+url+"\'"); jse.executeScript("document.getElementById('username').value = \"yash\";"); // Tag having name then driver.findElement(By.xpath(".//input[@name='j_password']")).sendKeys("admin"); //Opend Site and click on some links. then you can apply go(-1)--> back forword(-1)--> front. //Refresheing the web-site. driver.navigate().refresh(); jse.executeScript("window.history.go(0)"); jse.executeScript("window.history.go(-2)"); jse.executeScript("window.history.forward(-2)"); String title = (String)jse.executeScript("return document.title"); System.out.println(" Title Of site : "+title); String domain = (String)jse.executeScript("return document.domain"); System.out.println("Web Site Domain-Name : "+domain); // To get all NodeList[1052] document.querySelectorAll('*'); or document.all jse.executeAsyncScript("document.getElementsByTagName('*')"); String error=(String) jse.executeScript("return window.jsErrors"); System.out.println("Windowerrors : "+error); System.out.println("To Find the input tag position from top"); ArrayList al = (ArrayList) jse.executeScript( "var source = [];"+ "var inputs = document.getElementsByTagName('input');"+ "for(var i = 0; i < inputs.length; i++) { " + " source[i] = inputs[i].offsetParent.offsetTop" + //" inputs[i].type = 'radio';" "}"+ "return source" );//inputs[i].offsetParent.offsetTop inputs[i].type System.out.println("next"); System.out.println("array : "+al); // (CTRL + a) to access keyboard keys. org.openqa.selenium.Keys Keys k = null; String selectAll = Keys.chord(Keys.CONTROL, "a"); WebElement body = driver.findElement(By.tagName("body")); body.sendKeys(selectAll); // Search for text in Site. Gets all ViewSource content and checks their. if (driver.getPageSource().contains("login")) { System.out.println("Text present in Web Site"); } Long clent_height = (Long) jse.executeScript("return document.body.clientHeight"); System.out.println("Client Body Height : "+clent_height); // using selenium we con only execute script but not JS-functions. } driver.quit(); // to close browser } 

Per eseguire funzioni utente, scrivere JS in un file e leggere come String ed eseguirlo per usarlo facilmente.

 Scanner sc = new Scanner(new FileInputStream(new File("JsFile.txt"))); String js_TxtFile = ""; while (sc.hasNext()) { String[] s = sc.next().split("\r\n"); for (int i = 0; i < s.length; i++) { js_TxtFile += s[i]; js_TxtFile += " "; } } String title = (String) jse.executeScript(js_TxtFile); System.out.println("Title : "+title); 

document.title e document.getElementById () è una proprietà / metodo disponibile nei browser.

JsFile.txt

 var title = getTitle(); return title; function getTitle() { return document.title; } 

Puoi anche provare a fare clic su JavaScript:

 WebElement button = driver.findElement(By.id("someid")); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].click();", button); 

Inoltre puoi usare jquery. Nel peggiore dei casi, per pagine testarde potrebbe essere necessario fare clic con un’applicazione EXE personalizzata. Ma prova prima le soluzioni ovvie.

Se vuoi leggere il testo di qualsiasi elemento usando javascript executor, puoi fare qualcosa come il seguente codice:

 WebElement ele = driver.findElement(By.xpath("//div[@class='infaCompositeViewTitle']")); String assets = (String) js.executeScript("return arguments[0].getElementsByTagName('span')[1].textContent;", ele); 

In questo esempio, ho seguito il frammento HTML e sto leggendo “156”.

 
All Assets 156

Ho avuto una situazione simile e l’ho risolto in questo modo:

 WebElement webElement = driver.findElement(By.xpath("")); webElement.sendKeys(Keys.TAB); webElement.sendKeys(Keys.ENTER); 

È necessario eseguire questo comando nella directory di livello superiore di un controllo del repository SVN di Selenium.