2012-03-26 14 views
9

Tengo una pregunta semi-vaga sobre Selenio. Descubrí algunas formas diferentes de realizar acciones usando FirefoxDriver. Lo que tengo que hacer es repetir las acciones que realiza un usuario en una página web (hacer clic en un enlace, marcar una casilla de verificación, etc.). ¿Hay algún método o combinación de métodos que me permita "registrar" las acciones del usuario? Aquí es lo que tengo hasta ahora para realizar acciones (se dará cuenta de que he intentado utilizar las clases WebDriverBackedSelenium y acciones a realizar acciones)Acciones de registro usando Selenium

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.openqa.selenium.interactions.Action; 

public class MyReplayer { 
    public static void main(String[] args) throws Exception { 
     // The Firefox driver supports javascript 
     FirefoxDriver driver = new FirefoxDriver(); 

     driver.get("http://www.cs.umd.edu"); 

     List<WebElement> elements = driver.findElements(By.tagName("a")); 
     //WebDriverBackedSelenium driverBacked = new WebDriverBackedSelenium(driver,  "http://www.cs.umd.edu"); 
     Actions builder = new Actions(driver);  
     Action clickLink = builder.click(elements.get(100)).build(); 
     clickLink.perform(); 
     //driverBacked.click("document.getElementsByTagName('a')[100]"); 
    } 
} 

Respuesta

5

Puede utilizar el Selenium IDE complemento para Firefox y exportar la prueba generada por Webdriver. No dice específicamente FirefoxDriver, pero los métodos de la interfaz son similares a los que publicaste. Espero que esto ayude.

+0

¿Sabe cómo el IDE El selenio es capaz de registrar las acciones del usuario? Esa es la funcionalidad que busco implementar por mi cuenta, pero no conozco ningún método que me ayude a hacerlo. – user1294114

+0

No sé cómo lo hace Selenium IDE. Pero creo que atrapan eventos de cambio en el DOM de la página que estás viendo. No sé cuánto están integrados a la GUI del navegador, pero eso también podría estar pasando. La mayoría de eso se puede encontrar también en el servidor, pero averiguar si se marcó una casilla de verificación sin enviar la página al servidor solo puede ocurrir en el cliente (o tendrá que hacer llamadas ajax para todo) –

4

Me encontré con Huxley. Permite la grabación y reproducción de acciones del usuario. Encontré esta pregunta en busca de cómo lo hicieron, pero tuve que recurrir al código fuente.

Las líneas 98-154 de huxley/run.py definen la función de grabación. Utiliza webdirvier para ejecutar algunos js en la página que agrega algunos oyentes de eventos. También agrega una función para devolver los eventos.

(function() { 
var events = []; 
window.addEventListener('click', function (e) { events.push([Date.now(), 'click', [e.clientX, e.clientY]]); }, true); 
window.addEventListener('keyup', function (e) { events.push([Date.now(), 'keyup', String.fromCharCode(e.keyCode)]); }, true); 
window._getHuxleyEvents = function() { return events; }; 
})(); 

para leer los eventos de la función se llama js

events = d.execute_script('return window._getHuxleyEvents();') 

A continuación, los eventos se almacenan en una manera que parece aplicación específica.

Lo siento, no tengo el código de Java. Espero que esto ayude.

0

Actualmente estoy trabajando en un proyecto que hace algo como esto: https://github.com/hristo-vrigazov/selenium-record-replay Funciona poniendo un proxy entre el navegador y la aplicación, e inyectando javascript que escucha las acciones que ha definido. Véase, por ejemplo https://github.com/hristo-vrigazov/selenium-record-replay/blob/master/terminator-cli/src/main/java/browser/Main.java#L74

 RecordBrowserBase recordBrowserBase = new ChromeRecordBrowser(pathToChromedriver, pathToJSInjectionFile); 
     try { 
      recordBrowserBase.record(baseUrl); 
      System.out.println("Press Enter when finished recording"); 
      System.in.read(); 
      recordBrowserBase.dumpActions(outputFile); 
     } catch (IOException | InterruptedException | URISyntaxException e) { 
      e.printStackTrace(); 
     } 

     recordBrowserBase.cleanUp(); 

     System.exit(0); 

El proyecto está todavía en una etapa muy temprana, pero se puede utilizar incluso ahora. Actualmente solo se admite Chrome, pero pronto agregaré otros navegadores también.

responsabilidad: yo soy el creador y mantenedor del proyecto

Cuestiones relacionadas