我正在尝试使用webdriver中提供的功能并设置浏览器版本。我的chrome版本是32,但试图在chrome 30中运行我的测试。
System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"/drivers/win/chromedriver.exe");
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setCapability("version", "30");
WebDriver wd = new ChromeDriver(caps);
System.out.println(((RemoteWebDriver) wd).getCapabilities().getVersion());
当我打印浏览器版本时,其打印浏览器版本为32,但我将浏览器版本设置为30。 我怎样才能以正确的方式使用这种功能。
答案 0 :(得分:2)
如果驱动程序不支持您请求的功能,则即使驱动程序没有抛出错误,也无法创建带有DesiredCapabilities
的WebDriver实例。这就是Selenium的设计方式。
有关DesiredCapabilities
的详情,请参阅this question。我引用JimEvans的回答:
API指定将所需的功能传递给 构造函数。但是,可能是驾驶员没有的情况 支持所需功能中请求的功能。在这种情况下, 驱动程序不会抛出任何错误,这是故意的。一个 功能对象由会话返回,表示 会话实际支持的功能。
这就是在这种情况下实际发生的事情。 PhantomJS驱动程序 不支持处理警报,返回的功能对象 表示同样多。在大多数语言绑定中,这都返回了 能力对象是只读的;在语言绑定中 返回的对象可能是读写的,修改这些功能却没有 对会话的实际影响。在待定的W3C WebDriver中 规范,有一个requiredCapabilities设置 如果服务器无法提供该功能,则抛出异常,但是 据我所知,尚未由任何驱动程序实现。