Ответ 1
RemoteWebdriver (родительский класс FirefoxDriver) обновляет карты возможностей только при запуске сеанса (в конструкторе). К сожалению, мы не можем изменить его в другом месте. Я думаю, что это очень хорошая идея.
Мне интересно, могу ли я изменить профиль пользовательского агента на лету, не создавая нового экземпляр ForeFoxDriver? У меня есть следующий код, который я могу передать в пользовательском агенте для iphone или ipad и т.д., Он работает нормально, но мне нужно создать новый экземпляр для каждого теста, который медленный, когда он открывает/закрывает браузер. Например. После моих тестов с пользовательским агентом iPhone я хотел бы переключить профиль на пользовательский агент Android или пользовательский агент iPad, может ли драйвер изменить его, не создавая новый экземпляр?
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("general.useragent.override","some user agent, like iphone or iPad");
WebDriver driver = new FirefoxDriver(profile);
// do some tests
// set profile to new user agent
// profile.setPreference("general.useragent.override","some android user agent");
// can i now set the driver to the new profile here and perform more tests on this same instance of the driver?
RemoteWebdriver (родительский класс FirefoxDriver) обновляет карты возможностей только при запуске сеанса (в конструкторе). К сожалению, мы не можем изменить его в другом месте. Я думаю, что это очень хорошая идея.
Существует, вероятно, только один путь - через расширения. Тем не менее, я никогда не пробовал это...
FirefoxProfile ffProfile = new FirefoxProfile();
ffProfile.addExtension(new File("path/to/extension") );
WebDriver driver = new FirefoxDriver(ffProfile);
Расширением, с которым он может работать, является User Agent Switcher: https://addons.mozilla.org/cs/firefox/addon/user-agent-switcher/?src=ss
Но, как было сказано ранее, я никогда этого не делал и понятия не имею, как управлять аддоном через Selenium
В нашей компании мы используем прокси-сервер Browsermob, прокси-сервер с открытым исходным кодом, написанный в Java. Он отлично интегрируется с Selenium, и вы можете управлять им из своего кода. Он служит нам для многих целей, одним из которых является манипуляция заголовками.
Способ его выполнения описан здесь: https://github.com/webmetrics/browsermob-proxy (раздел HTTP Request Manipulation)
Эта работа для меня:
server.addHeader("User-Agent", uaString)