Показаны сообщения с ярлыком JSF RichFaces. Показать все сообщения
Показаны сообщения с ярлыком JSF RichFaces. Показать все сообщения

вторник, 3 июля 2012 г.

Перехват ajax с помощью BrowserMob Proxy

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