Отключить интернет во время прохождения теста
В одном из степов теста, нужно отключить интернет, проделать действие, убедиться, что появилась ошибка и подключить интернет обратно (либо симулировать отключение/включение интернета). В Dev Tools Google Chrome можно выбрать параметр Offline, возможно, кто-нибудь сталкивался с автоматизацией таких действий?
Ответы (1 шт):
Можно использовать 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);. Тут есть и другие способы симуляции проблем сетевого соединения.