with javascriptexecutor how executescript java javascript selenium-webdriver

javascriptexecutor - Cómo usar JavaScript con Selenium WebDriver Java



javascriptexecutor selenium python (5)

Quiero usar JavaScript con WebDriver (Selenium 2) usando Java.

He seguido un poco de una guía y en la página de Introducción : hay una instrucción en la 1ª línea para ejecutar como:

$ ./go webdriverjs

Mi pregunta: ¿Desde qué carpeta / ubicación se ejecutará / ejecutará el comando mencionado anteriormente?


En función de sus preguntas anteriores, supongo que desea ejecutar los fragmentos de JavaScript del WebDriver de Java. Por favor corrígeme si estoy equivocado.

WebDriverJs es en realidad "solo" otro enlace de lenguaje de WebDriver (puede escribir sus pruebas en Java, C #, Ruby, Python, JS y posiblemente incluso más idiomas a partir de ahora). Este, en particular, es JavaScript, y le permite, por lo tanto, escribir pruebas en JavaScript.

Si desea ejecutar código JavaScript en Java WebDriver , haga esto en su lugar:

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

Me gusta hacer esto, también:

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

Puede encontrar más documentación sobre esto aquí, en la documentación , o, preferiblemente, en los JavaDocs de JavascriptExecutor .

El executeScript() toma llamadas de función y JS sin executeScript() . Puede return un valor y puede pasarle muchos argumentos complicados, algunos ejemplos al azar:

  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'';" + "}" );


Necesita ejecutar este comando en el directorio de nivel superior de un check-in del repositorio Selenium SVN.


Si desea leer texto de cualquier elemento utilizando el ejecutor de JavaScript, puede hacer algo como seguir el código:

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

En este ejemplo, tengo el siguiente fragmento HTML y estoy leyendo "156".

<div class="infaCompositeViewTitle"> <span>All Assets</span> <span>156</span> </div>


También puede intentar hacer clic en JavaScript:

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

También puedes usar jquery. En el peor de los casos, para páginas obstinadas puede ser necesario hacer clics mediante la aplicación EXE personalizada. Pero pruebe primero las soluciones obvias.


JavaScript con Selenium WebDriver

Selenium es una de las suites de pruebas automáticas más populares. Selenium está diseñado para apoyar y fomentar las pruebas de automatización de los aspectos funcionales de las aplicaciones basadas en web y una amplia gama de navegadores y plataformas.

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("yashwanth@123");*/ 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 }

Para ejecutar User-Functions, escribir JS en un archivo y leer como String y ejecutarlo para usarlo fácilmente.

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 y document.getElementById () es una propiedad / método disponible en los navegadores.

JsFile.txt

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