Запись действий с использованием Selenium - PullRequest
10 голосов
/ 27 марта 2012

У меня есть немного расплывчатый вопрос о Селене.Я обнаружил несколько разных способов выполнения действий с помощью FirefoxDriver.Что мне нужно сделать, это повторить действия, которые пользователь выполняет на веб-странице (щелкнув ссылку, отметив флажок и т. Д.).Существует ли какой-либо метод или комбинация методов, которые позволяют мне «записывать» действия пользователя?Вот что у меня есть для выполнения действий (вы заметите, что я пытался использовать классы WebDriverBackedSelenium и Actions для выполнения действий)

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

Ответы [ 3 ]

7 голосов
/ 23 августа 2013

Я сталкивался Хаксли . Позволяет записывать и воспроизводить действия пользователя. Я нашел этот вопрос в поисках того, как они это сделали, но пришлось прибегнуть к исходному коду.

Строки 98-154 из huxley / run.py определяют функцию записи. Он использует webdirvier для выполнения некоторых js на странице, которая добавляет слушателей событий. Также добавлена ​​функция для возврата событий.

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

Чтобы прочитать события, вызывается функция js

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

Затем события сохраняются таким образом, что кажется специфичным для приложения.

Извините, у меня нет кода Java. Надеюсь, это поможет.

5 голосов
/ 27 марта 2012

Вы можете использовать Selenium IDE Addon для Firefox и экспортировать сгенерированный тест для Webdriver.В нем конкретно не говорится о FirefoxDriver, но методы интерфейса выглядят аналогично тому, что вы опубликовали.Надеюсь, это поможет.

1 голос
/ 30 марта 2017

В настоящее время я работаю над проектом, который делает что-то вроде этого: https://github.com/hristo-vrigazov/selenium-record-replay Он работает, помещая прокси-сервер между браузером и приложением и вставляя JavaScript, который прослушивает действия, которые вы определили.См. Например 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);

Проект все еще находится на очень ранней стадии, но его можно использовать даже сейчас.В настоящее время поддерживается только Chrome, но я скоро добавлю и другие браузеры.

Отказ от ответственности: я являюсь создателем и сопровождающим проекта

...