2012-03-26 30 views
9

Mam pół-niewyraźne pytanie, które należy zadać o Selenie. Odkryłem kilka różnych sposobów wykonywania akcji za pomocą FirefoxDriver. Muszę powtórzyć czynności wykonywane przez użytkownika na stronie internetowej (kliknięcie łącza, zaznaczenie pola wyboru itp.). Czy istnieje metoda lub kombinacja metod, która pozwala mi "rejestrować" działania użytkownika? Oto co mam tak daleko do wykonywania czynności (zauważysz Próbowałem przy użyciu klas WebDriverBackedSelenium i działań w celu wykonywania czynności)Akcje rekordów przy użyciu 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]"); 
    } 
} 

Odpowiedz

5

Można użyć Selenium IDE dodatek do Firefoksa i wyeksportować wygenerowany test na Webdriver. Nie oznacza to w szczególności FirefoxDriver, ale metody interfejsu wyglądają podobnie do tego, co napisałeś. Mam nadzieję, że to pomoże.

+0

Czy wiesz jak selen IDE jest w stanie nagrać działanie użytkownika? Jest to funkcjonalność, którą zamierzam wdrożyć, ale nie znam żadnych metod, które mogłyby mi w tym pomóc. – user1294114

+0

Nie wiem, jak działa IDE Selenium. Ale myślę, że przechwytują zdarzenia zmian w DOM strony, którą przeglądasz. Nie wiem, ile są one zintegrowane z GUI przeglądarki, ale to też może się zdarzyć. Większość tego można znaleźć również po stronie serwera, ale sprawdzanie, czy pole wyboru zostało zaznaczone, bez wysyłania strony na serwer, może się zdarzyć tylko na kliencie (lub będziesz musiał wywoływać wywołania ajaxowe) –

4

Natknąłem się na Huxley. Umożliwia nagrywanie i odtwarzanie działań użytkownika. Znalazłem to pytanie w poszukiwaniu tego, jak to zrobili, ale musiałem uciekać się do kodu źródłowego.

Wiersze 98-154 z huxley/run.py definiują funkcję nagrywania. Używa on webdirvier do wykonania niektórych js na stronie, która dodaje niektóre detektory zdarzeń. Dodaje także funkcję zwracania zdarzeń.

(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; }; 
})(); 

Aby odczytać wydarzenia funkcja js nazywa

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

Następnie zdarzenia są przechowywane w taki sposób, że wydaje specyficzne aplikacje.

Niestety, nie mam kodu Java. Mam nadzieję, że to pomoże.

0

Obecnie pracuję nad projektem, który robi coś takiego: https://github.com/hristo-vrigazov/selenium-record-replay Działa poprzez umieszczenie proxy między przeglądarką a aplikacją i wstrzyknięcie javascriptu, który nasłuchuje dla zdefiniowanych przez ciebie akcji. Patrz na przykład 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); 

Projekt jest jeszcze w bardzo wczesnej fazie, ale może być stosowany nawet teraz. Obecnie obsługiwana jest tylko Chrome, ale wkrótce dodam też inne przeglądarki.

Zastrzeżenie: Jestem twórcą i opiekunem projektu

Powiązane problemy