我想知道我是否可以动态更改用户代理配置文件,而无需创建新的 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?
答案 0 :(得分:2)
RemoteWebdriver(FirefoxDriver的父类)仅在会话启动时(在构造函数中)更新功能映射。不幸的是我们不能在别处修改它。我认为这是一个非常好的主意。
答案 1 :(得分:1)
可能只有一种方式 - 通过扩展。但是,我从未尝试过这个......
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控制插件
答案 2 :(得分:0)
在我们公司,我们使用Browsermob proxy,一个用java编写的开源代理。它与Selenium完美集成,您可以从代码中控制它。它为许多目的服务于我们,其中之一是标题操作。
此处描述了执行此操作的方式:https://github.com/webmetrics/browsermob-proxy(HTTP请求操作部分)
答案 3 :(得分:0)
这项工作对我来说:
server.addHeader("User-Agent", uaString)