Отключить интернет во время прохождения теста

В одном из степов теста, нужно отключить интернет, проделать действие, убедиться, что появилась ошибка и подключить интернет обратно (либо симулировать отключение/включение интернета). В Dev Tools Google Chrome можно выбрать параметр Offline, возможно, кто-нибудь сталкивался с автоматизацией таких действий?


Ответы (1 шт):

Автор решения: Alexey R.

Можно использовать BrowserMobProxy библиотеку. В момент теста установить ДНС-резолвер, который бы возвращал null, а потом восстановить резолвер по умолчанию. Вот пример теста:

@Test
public void testINetConnectionIssue() throws InterruptedException {
    driver.get("https://webelement.click/ru/welcome");
    AdvancedHostResolver defaultResolver = proxy.getHostNameResolver();
    proxy.setHostNameResolver(new BasicHostResolver() {
        @Override
        public Collection<InetAddress> resolve(String host) {
            return null;
        }
    });
    try {
        driver.navigate().refresh();
    }catch (Throwable e){
        Thread.sleep(15000);
    }
    proxy.setHostNameResolver(defaultResolver);
    driver.navigate().refresh();
}

P.S. - такой подход может не сработать, если Ваша страница посылает асинхронные запросы, а разрыв должен произойти где-то в середине теста. Коннекция, открытая при корректно работающем механизме разрешения доменных имен, будет переиспользоваться и далее не будет чувствительна к "испорченному" резолверу.

В таком случае, необходимо будет установить минимальный таймаут для разрыва неактивных соединений (1 секунда): proxy.setIdleConnectionTimeout(1, TimeUnit.SECONDS);. Тут есть и другие способы симуляции проблем сетевого соединения.

→ Ссылка