【发布时间】:2020-05-21 00:57:22
【问题描述】:
当我尝试使用DesiredCapabilities 和FirfoxOptions 启动新的Selenium/Firefox 实例时,我得到以下代码:
Exception in thread "main" java.lang.NoSuchMethodError: org.openqa.selenium.firefox.FirefoxOptions.merge(Lorg/openqa/selenium/Capabilities;)Lorg/openqa/selenium/firefox/FirefoxOptions;
我正在使用以下代码:
public WebDriver getDriver() throws MalformedObjectNameException, InstanceNotFoundException, ReflectionException, InterruptedException
{
System.setProperty("webdriver.gecko.driver", GlobalVar.geckdriverExecutableFilePath);
//DesiredCapabilities capabilities = new DesiredCapabilities();
DesiredCapabilities dc = DesiredCapabilities.firefox();
if (proxyPOJO != null) {
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
proxy.setFtpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
proxy.setSslProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
dc.setCapability(CapabilityType.PROXY, proxy);
}
FirefoxOptions opt = new FirefoxOptions();
opt.merge(dc);
opt.addPreference("dom.popup_maximum", 200);
opt.addPreference("dom.webnotifications.enabled", false);
opt.merge(capabilities);
WebDriver driver = WebDriverX.getNewFireFoxWebDriver(opt); // Basically calls: driver = new FirefoxDriver(firefoxOptions);
return driver;
}
我的POM 文件包含以下条目:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.11.0</version>
</dependency>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>26.0-jre</version>
</dependency>
以前,我在 POM 中有 org.seleniumhq.selenium 的 3.5.2 版本,它不支持 merge 功能。但是,当我尝试使用以下代码启动版本为 3.5.2 的 Selenium 时:
System.setProperty("webdriver.gecko.driver", GlobalVar.geckdriverExecutableFilePath);
DesiredCapabilities capabilities = new DesiredCapabilities();
if (proxyPOJO != null) {
Proxy proxy = new Proxy();
proxy.setHttpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
proxy.setFtpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
proxy.setSslProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort());
capabilities.setCapability(CapabilityType.PROXY, proxy);
}
FirefoxOptions firefoxOptions = new FirefoxOptions(capabilities);
WebDriver driver = WebDriverX.getNewFireFoxWebDriver(firefoxOptions);
我遇到了以下异常:
NoSuchMethodError: org.openqa.selenium.firefox.FirefoxOptions.<init>(Lorg/openqa/selenium/Capabilities;)V
我安装了最新版本的geckodriver.exe。
版本 3.11.0 或版本 3.5.2 都不起作用(我也尝试过 3.8.2)。
我做错了什么?
谢谢!
更新:
在 3.11.0 版本中,我得到以下堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: org.openqa.selenium.firefox.FirefoxOptions.merge(Lorg/openqa/selenium/Capabilities;)Lorg/openqa/selenium/firefox/FirefoxOptions;
at webdriverX.WebDriverProfile.getTMPFirefoxProfile(WebDriverProfile.java:259)
at s.SPage.scrapeS(SPage.java:36)
at n.NMain.main(NMain.java:27)
对于 3.5.2 版本,以下是堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: org.openqa.selenium.firefox.FirefoxOptions.<init>(Lorg/openqa/selenium/Capabilities;)V
at webdriverX.WebDriverProfile.getTMPFirefoxProfile(WebDriverProfile.java:232)
at s.SPage.scrapeS(SPage.java:36)
at n.NMain.main(NMain.java:27)
方法getTMPFirefoxProfile()基本上做了以下事情:
if (firefoxOptions != null) {
driver = new FirefoxDriver(firefoxOptions);
} else {
driver = new FirefoxDriver();
}
谢谢!!
【问题讨论】:
-
NoSuchMethodError表示不兼容的jar文件。添加完整的堆栈跟踪 -
使用完整的错误堆栈跟踪更新问题
-
所需功能主要用于远程 Web 驱动程序。你在硒网格上运行吗?
-
@Jens @DebanjanB @Murthi 我用
stack trace和其他详细信息更新了问题。请看一下。谢谢大家的帮助.. -
@Murthi 不,我不是,但我需要添加代理所需的功能:
Proxy proxy = new Proxy(); proxy.setHttpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort()); proxy.setFtpProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort()); proxy.setSslProxy(proxyPOJO.getProxyIP() + ":" + proxyPOJO.getProxyPort()); capabilities.setCapability(CapabilityType.PROXY, proxy);我需要FirefoxOptions设置值,例如opt.addPreference("dom.popup_maximum", 200); opt.addPreference("dom.webnotifications.enabled", false);
标签: java selenium geckodriver desiredcapabilities mutablecapabilities