В данной статье я покажу как перехватывать асинхронный скрипт, используя BrowserMob Proxy. Статья применима ко всем типам фреймворков, но в конкретно будет показан только перехват из JSF RichFaces.
Для начала сконфигурируем pom.xml
<dependencies>
<dependency>
<groupId>biz.neustar</groupId>
<artifactId>browsermob-proxy</artifactId>
<version>2.0-beta-6</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.24.1</version>
</dependency>
</dependencies>
Теперь можно приступить к написанию кода:
//Стартуем browsermob proxy
ProxyServer server = new ProxyServer(4444);
server.start();
//перехватываем ajax запрос и пишем в консоль "AJAX is starting"
server.addRequestInterceptor(new HttpRequestInterceptor() {
public void process(HttpRequest arg0, HttpContext arg1)
throws HttpException, IOException {
for (Header header : arg0.getAllHeaders()) {
if (header.getName().contains("Faces-Request")) {
if (header.getValue().contains("partial/ajax")) {
System.out.println("AJAX is starting");
}
}
}
}
});
Теперь нам необходимо как-то встроить это в наши Selenium тесты (иначе зачем я вообще это пишу)
//получаем прокси
Proxy proxy = server.seleniumProxy();
//настраиваем
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
// и стартуем браузер
WebDriver driver = new FirefoxDriver(capabilities);
Теперь каждый раз когда у нас с jsf страницы будет выполнятся ajax мы будем об этом знать.
Для начала сконфигурируем pom.xml
<dependencies>
<dependency>
<groupId>biz.neustar</groupId>
<artifactId>browsermob-proxy</artifactId>
<version>2.0-beta-6</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.24.1</version>
</dependency>
</dependencies>
Теперь можно приступить к написанию кода:
//Стартуем browsermob proxy
ProxyServer server = new ProxyServer(4444);
server.start();
//перехватываем ajax запрос и пишем в консоль "AJAX is starting"
server.addRequestInterceptor(new HttpRequestInterceptor() {
public void process(HttpRequest arg0, HttpContext arg1)
throws HttpException, IOException {
for (Header header : arg0.getAllHeaders()) {
if (header.getName().contains("Faces-Request")) {
if (header.getValue().contains("partial/ajax")) {
System.out.println("AJAX is starting");
}
}
}
}
});
Теперь нам необходимо как-то встроить это в наши Selenium тесты (иначе зачем я вообще это пишу)
//получаем прокси
Proxy proxy = server.seleniumProxy();
//настраиваем
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, proxy);
// и стартуем браузер
WebDriver driver = new FirefoxDriver(capabilities);
Теперь каждый раз когда у нас с jsf страницы будет выполнятся ajax мы будем об этом знать.
Смотрю на pom.xml и думаю какое он отношение имеет к BrowserMob. Нехорошо так. Надо весь стек технологий указывать.
ОтветитьУдалитьpom.xml нужен для сборщика Maven и разрешения зависимостей. Собственно благодаря нему мы и не подгружаем сами никаких библиотек )
УдалитьМне казалось априори должно быть понятно зачем мы это делаем. А уж человеку который использует selenium и пишет на java и подавно должно быть понятно.
Не, я таки вспомнил в итоге зачем оно (гуглится еще быстрее, но то был спортивный интерес).
УдалитьПросто лично я на Java + Selenium уже года три (или четыре?) не пишу и от конфигов в xml отвык порядком :(
Но в целом было бы круто просто в теги сюда Maven и JSF RichFaces добавить. Да и browsermob на три тега не разносить).
Просто натурально же отличное место чтобы весь стек под статью выносить - и в статье не мусорит и искать потом удобно (благо тут вроде только технические вещи пишутся).
Об этом я что то не подумал ) сейчас исправим )
Удалить