Нужно во время веб теста задизейблить інтернет конекшеш, пропестировать UI і заенейблить назад.
Буду рад любой помощи.
Лучше использовать прокси, например
Linux:
sudo ifdown eth0
sudo ifup eth0
Windows:
netsh interface set interface name=“Имя сетевого адаптера” disable
netsh interface set interface name=“Имя сетевого адаптера” enable
есть пример кода как с помощью browser-mob proxy отрубить трафик ?
Скорее всего тебе надо запускать сами тесты через прокси. И тогда ты сможешь в определенных тестах манипулировать соединением. Из мануала GitHub - lightbody/browsermob-proxy: A free utility to help web developers watch and manipulate network traffic from their AJAX applications.
// start the proxy
BrowserMobProxy proxy = new BrowserMobProxyServer();
proxy.start(0);
// get the Selenium proxy object
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
// configure it as a desired capability
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.PROXY, seleniumProxy);
// start the browser up
WebDriver driver = new FirefoxDriver(capabilities);
// open yahoo.com
driver.get("http://yahoo.com");
Скорее всего останавливать и запускать соединение можно так: proxy.stop();
и proxy.start();
Если запускать тесты не используя прокси, тогда можно для винды выполнить комманду (Java):
-
отключение интернета:
Runtime.getRuntime().exec("netsh wlan disconnect");
-
включение интернета:
Runtime.getRuntime().exec("netsh wlan connect name="network_name" ");
Для линукс, как писали выше…
Но это конечно наверное не оч способы для данного решения, все же лучше прокси, так как тесты потом могут выполнятс на разных ПК, кто-то захочет выполнить данный тест на линуксе, кто-то на винде или ты дебажить будешь и писать у себя на винде, а на сервере будет линукс, или у кого-то будет MAC
Вот тут есть хорошее решение запуска тестов через прокси - Browsermob proxy + Java + WebDriver помогите запустить простейший тест, только static
надо везде убрать, тестил через main
:
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import org.openqa.selenium.By;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Example {
public static void main(String[] args) throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
WebDriver driver = new ChromeDriver(capabilities);
startServer(capabilities);
driver.get("http://google.com");
WebElement search = driver.findElement(By.xpath("//*[@id=\"lst-ib\"]"));
WebElement button = driver.findElement(By.xpath("//*[@id=\"sblsbb\"]/button"));
search.clear();
search.sendKeys("55555");
button.click();
driver.quit();
}
private static BrowserMobProxy proxyServer;
private static boolean isServerStarted;
public static void startServer(DesiredCapabilities capabilities) {
proxyServer = new BrowserMobProxyServer(0);
try {
proxyServer.start();
isServerStarted = true;
} catch (Exception e) {
throw new RuntimeException("Cant start proxy-server on port: " + proxyServer.getPort(), e);
}
Proxy proxy = null;
try {
proxy = createHttpProxy(proxyServer.getPort());
} catch (UnknownHostException e) {
e.printStackTrace();
}
createNewHar();
// configure it as a desired capability
capabilities.setCapability(CapabilityType.PROXY, proxy);
}
private static Proxy createHttpProxy(int port) throws UnknownHostException {
Proxy proxy = new Proxy();
proxy.setProxyType(Proxy.ProxyType.MANUAL);
String proxyStr = String.format("%s:%d", InetAddress.getLocalHost().getCanonicalHostName(), port);
proxy.setHttpProxy(proxyStr);
proxy.setSslProxy(proxyStr);
return proxy;
}
public static void createNewHar(){
proxyServer.newHar();
}
public static void stopServer() {
if (isServerStarted) {
try {
proxyServer.stop();
} catch (Exception e) {
throw new RuntimeException("Cant stop proxy server", e);
}
}
}
}
Вот только у меня немного не получилось методом stopServer()
, остановить интернет, так как локально он будет, и браузер начнет дальше искать. Почему-то оно не в самом браузере устанавливает настройки данного прокси. Хотя может у мен МАК просто, и на маке прокси ставится глобально в системных настройках…
Используем MITM-прокси, очень удобно. Позволяет не только обрубить интернет, но также ограничить исходящую и (или) входящую скорость, проанализировать запросы и ответы, использовать локальный кэш и многое другое. Однако, это работает на уровне HTTP(S). Если нужно управлять на более низкоуровневых протоколах, то скорее всего нужно думать в сторону SOCKS-прокси (детально к сожалению не разбираюсь)
Только он на питоне. Так что страдайте джаверы. Вобще на джаве тяжело делать что-то, что выходит за рамки виртуальной песочницы, так что лучше делать ОС вызов готовых решений как писали раньше типа netsh или ifup/down (если конечно browserproxy не сработало, оно то будет правильным решением)
https://mitmproxy.org/ - этот да на питоне Но мы работаем с javascript проектом GlaceJS Index, который в свою очередь базируется на весьма популярных проектах GitHub - http-party/node-http-proxy: A full-featured http proxy for node.js и GitHub - joeferner/node-http-mitm-proxy: HTTP Man In The Middle (MITM) Proxy