Наблюдайте за всеми действиями, выполняемыми через экземпляр драйвера Selenium - PullRequest
0 голосов
/ 03 декабря 2018

Интересно, есть ли способ наблюдать за всеми действиями - в терминах "реальных" действий пользователя, таких как щелчки, - которые выполняются через экземпляр драйвера Selenium.Сначала я думал о создании оболочки для WebDriver, которая возвращает оболочки для WebElement s, где я могу наблюдать такие методы, как click() или sendKeys(CharSequence...).Что-то вроде:

class WrappingDriver implements WebDriver {

    private final WebDriver wrapped;
    private final List<Consumer<Action>> consumers;

    public WrappingDriver( final WebDriver wrapped, final List<Consumer<Action>> consumers ) {
        this.wrapped = wrapped;
        this.consumers = consumers;
    }

    @Override
    public WebElement findElement( final By by ) {
        return new WrappingElement( wrapped.findElement( by ), consumers );
    }

    @Override
    public List<WebElement> findElements( final By by ) {
        return wrapped.findElements( by ).stream() //
                .map( element -> new WrappingElement( element, consumers ) ) //
                .collect( Collectors.toList() );
    }

    // ...

}

И:

class WrappingElement implements WebElement {

    private final WebElement wrapped;
    private final List<Consumer<Action>> consumers;

    public WrappingElement( final WebElement wrapped, final List<Consumer<Action>> consumers ) {
        this.wrapped = wrapped;
        this.consumers = consumers;
    }

    @Override
    public void click() {
        consumers.forEach( consumer -> ... );
        wrapped.click();
    }

    @Override
    public void sendKeys( final CharSequence... keysToSend ) {
        consumers.forEach( consumer -> ... );
        wrapped.sendKeys( keysToSend );
    }

    // ...

}

Однако это не работает, например, для новых API взаимодействий.Любые предложения?

РЕДАКТИРОВАТЬ: EventFiringWebDriver, соответственно, WebDriverEventListener представляется хорошим выбором.Но, если я правильно понял, в настоящее время нет способа наблюдать, например, submit()?(По крайней мере этот PR , кажется, открыт с 2015 года.) Я попросил способ наблюдать за всеми действиями, поэтому, я думаю, Java ждет HTML-элемент изапись щелчка мышью через WebDriverEventListener не совсем точно отвечает на этот вопрос.

1 Ответ

0 голосов
/ 03 декабря 2018

EventFiringWebDriver - это то, что вам нужно.

Существует пример того, как его использовать: http://toolsqa.com/selenium-webdriver/event-listener/

Идея состоит в том, что вы создаете EventFiringWebDriver и запускаете его своим драйвером.Затем вы используете экземпляр EventFiringWebDriver везде вместо вашего драйвера.А для EventFiringWebDriver вы создаете события, которые фактически делают всю магию за вас.

Обновление:

Существует список событий, которые вы можете использовать: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/events/WebDriverEventListener.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...