Como usar o JavaScript com o Selenium WebDriver Java

Eu quero usar JavaScript com WebDriver (Selenium 2) usando Java.

Eu segui um guia e na página de Primeiros passos : há uma instrução na 1ª linha para executar como:

$ ./go webdriverjs 

Minha pergunta: De qual pasta / local o comando mencionado acima será executado / executado?

Com base em suas perguntas anteriores, suponho que você queira executar snippets de JavaScript do WebDriver do Java. Por favor me corrija se eu estiver errado.

O WebDriverJs é, na verdade, “apenas” uma outra binding de linguagem do WebDriver (você pode escrever seus testes em Java, C #, Ruby, Python, JS e, possivelmente, até mesmo em idiomas a partir de agora). Este, particularmente, é JavaScript, e permite que você escreva testes em JavaScript.

Se você deseja executar o código JavaScript no Java WebDriver , faça isso:

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

Eu também gosto de fazer isso:

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

Você pode encontrar mais documentação sobre isso aqui, na documentação , ou, preferencialmente, nos JavaDocs do JavascriptExecutor .

O executeScript() recebe chamadas de function e JS bruto. Você pode return um valor dele e pode passar muitos argumentos complicados para ele, alguns exemplos randoms:

  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 com o Selenium WebDriver

O selenium é um dos conjuntos de testes automatizados mais populares. O Selenium é projetado de forma a apoiar e incentivar testes de automação de aspectos funcionais de aplicativos baseados na web e uma ampla variedade de navegadores e 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 executar funções do usuário, escrevendo JS em um arquivo e lendo como String e executá-lo para usar 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 & document.getElementById () é uma propriedade / método disponível nos navegadores.

JsFile.txt

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

Você também pode tentar clicar em JavaScript:

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

Além disso, você pode usar jquery. Nos piores casos, para páginas teimosas, pode ser necessário fazer cliques por um aplicativo EXE personalizado. Mas tente as soluções óbvias primeiro.

Se você quiser ler o texto de qualquer elemento usando o executor javascript, você pode fazer algo como seguir o código:

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

Neste exemplo, tenho o seguinte fragment de HTML e estou lendo “156”.

 
All Assets 156

Eu tive uma situação parecida e resolvi assim:

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

Você precisa executar este comando no diretório de nível superior de uma verificação do repository SVN do Selenium.