Solución:
Según sus preguntas anteriores, supongo que desea ejecutar fragmentos de JavaScript de Java WebDriver
. Por favor corrígeme si estoy equivocado.
los WebDriverJs
es en realidad “solo” otro WebDriver
enlace de lenguaje (puede escribir sus pruebas en Java, C #, Ruby, Python, JS y posiblemente incluso más lenguajes a partir de ahora). Este, en particular, es JavaScript y, por lo tanto, le permite escribir pruebas en JavaScript.
Si desea ejecutar código JavaScript en Java WebDriver
, haz 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!");
}
También me gusta hacer esto:
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
.
los executeScript()
también acepta llamadas a funciones y JS sin formato. Usted puede return
un valor de él y puede pasarle muchos argumentos complicados, algunos ejemplos aleatorios:
-
// returns the right WebElement // it's the same as driver.findElement(By.id("someId")) js.executeScript("return document.getElementById('someId');");
-
// draws a border around WebElement WebElement element = driver.findElement(By.anything("tada")); js.executeScript("arguments[0].style.border="3px solid red"", element);
-
// 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
El selenio es una de las suites de pruebas automatizadas más populares. Selenium está diseñado para respaldar 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("[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
}
Para ejecutar funciones de usuario, escriba JS en un archivo y lea como String y ejecútelo 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("rn");
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 & document.getElementById () es una propiedad / método disponible en los navegadores.
JsFile.txt
var title = getTitle();
return title;
function getTitle() {
return document.title;
}
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 las páginas rebeldes, puede ser necesario hacer clics mediante una aplicación EXE personalizada. Pero primero pruebe las soluciones obvias.