Интересно, есть ли способ наблюдать за всеми действиями - в терминах "реальных" действий пользователя, таких как щелчки, - которые выполняются через экземпляр драйвера 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 не совсем точно отвечает на этот вопрос.