Самый простой способ запуска автотестов через прокси заключается в ручном изменении настроек Вашей операционной системы.
Для того же, чтобы изменить настройки программным путем, можно использовать класс Capabilities
. Использование Capabilities
временно изменяет системные настройки прокси. После завершения работы драйвера они будут возвращены к исходным значениям.
Пример настройки FirefoxDriver:
import org.openqa.selenium.Proxy; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.remote.DesiredCapabilities; Proxy proxy = new Proxy(); proxy.setHttpProxy("localhost:8888"); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.PROXY, proxy); WebDriver driver = new FirefoxDriver(capabilities);
Аналогично выполняется настройка для InternetExplorerDriver
и RemoteWebDriver
.
Mozilla Firefox также содержит настройки прокси в профиле. Поэтому для запуска Firefox через proxy можно использовать второй способ — профиль с предустановленными необходимыми значениями:
FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.proxy.type", 1); profile.setPreference("network.proxy.http", "localhost"); profile.setPreference("network.proxy.http_port", 8888); WebDriver driver = new FirefoxDriver(profile);
Ключи и значения настроек сети для Mozilla Firefox: Mozilla networking preferences
Начиная с версии 2.16 Capabilities
для ChromeDriver больше не используется, вместо него необходимо использовать ChromeOptions
. Настройка прокси для ChromeDriver выглядит следующим образом:
import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; ChromeOptions option = new ChromeOptions(); option.addArguments("--proxy-server=http://" + PROXY); WebDriver driver = new ChromeDriver(option);
Запуск тестов через прокси используется не только при работе с прокси-серверами но и, например, для блокировки лишнего контента при тестировании и тем самым увеличения скорости загрузки страниц.
а что если нужно задействовать прокси с авторизацией для ChromeDriver? У меня выскакивает окно basic authorization, как с ним бороться?
Самый простой способ — запускать тесты с кастомным профилем, в котором заранее настроен прокси сервер, в этом случае возможно использование каких-либо расширений для хрома
Можно использовать AutoIt, чтобы ввести логин и пароль в диалоговое окно.
Иногда используют BrowserMob, но в него приходится вносить определенные изменения (не самый лучший способ).
Добрый день. Очень полезная статья, спасибо огромное!
Интересует один момент — прокси сервер выбирается случайно, чтобы каждый раз не подставлять его? Хотелось бы понимать как это работает.
Добрый день, нет, прокси сервер не может выбираться случайно. Вы всегда должны явно указывать хост и порт.
Печаль( Тогда в этом нет смысла, если придется каждый раз задавать его вручную. У меня при проверке регистрации каждую вторую регистр вылазит капча, которую я и хочу обойти с помощью прокси. но если придется задавать его вручную, то это не вариант.
Посмотрите в сторону BrowserMob Proxy, возможно это поможет решить Вашу задачу
а у меня сначала вызывается функция, которая хапает список с проксиками с сайта, а потом уже для каждого пробега — запускается новый драйвер с новым прокси и тестируется ***, драйвер закрывается, запускается новый с новым прокси и тд…
вот только не могу придумать,Как тестировать жизнеспособность проксика?!
import os
import subprocess
from multiprocessing import Pool, cpu_count
def proxy_Ping(host):
response = os.system(«ping -c 1 -n 2 » + host)
if response == 0: return True
return False
Подскажите как подменять настройки прокси через php?
Коллеги, я в замешательстве. Не ходит у меня Firefox через прокси.. Не могу понять, что не так. Взгляните свежим взглядом плиз.
php
$myBrowser = ‘firefox’;
$capabilities = DesiredCapabilities::$myBrowser();
$profile = new Firefox\FirefoxProfile();
$profile->setPreference(«network.proxy.type», 1);
$profile->setPreference(«network.proxy.http», ‘http://’.$proxy->host);
$profile->setPreference(«network.proxy.http_port», $proxy->port);
//$capabilities->setCapability(«proxy», «http://тут адрес моего прокси:порт»); — так тоже не вышло
$capabilities->setCapability(‘firefox_profile’, $profile);
казалось бы — все правильно, но на тестовой странице показывает айпи сервера, а не прокси…
На ходу options можно менять? Хотя бы новому окну.
Я только начал изучать автоматизацию и многое не понимаю.
У меня есть задача протестировать сайт с американского IP. Пытаюсь использовать эти два способа (для FF и Chrome) но они у меня не работают, сайт открывает, но локация — Украина.
Подскажите, что я не так делаю?
public class test1{
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
System.setProperty(«webdriver.chrome.driver»,»C:\\Users\\user\\Chromedriver\\chromedriver.exe»);
driver = new ChromeDriver();
baseUrl = «https://2ip.ua»;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
ChromeOptions option = new ChromeOptions();
option.addArguments(«—proxy-server=http://173.26.241.133:53282»);
WebDriver driver = new ChromeDriver(option);
@Test
public void test1() throws Exception {
driver.get(«https://2ip.ua»);
}
}