我有一个Java程序,它使用Selenium激活并通过Firefox形成连接,目前我正在尝试通过SSH在单独的服务器上运行该程序。但是,虽然程序在我的机器上工作正常,但当我通过SSH运行它时会出现错误。这是我得到的具体信息:
org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
Error: no display specified
Error: no display specified
at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:118)
at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
at GoogleTestNineIndigoVersion.main(GoogleTestNineIndigoVersion.java:278)
Exception in thread "main" org.openqa.selenium.WebDriverException: Failed to connect to binary FirefoxBinary(/usr/bin/firefox) on port 7055; process output follows:
Error: no display specified
Error: no display specified
Build info: version: '2.42.0', revision: '5e82430', time: '2014-05-22 20:18:33'
System info: host: 'video', ip: '130.63.94.246', os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.32-573.3.1.el6.cse.x86_64', java.version: '1.8.0_91'
Driver info: driver.version: FirefoxDriver
at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:130)
at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:115)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
at GoogleTestNineIndigoVersion.main(GoogleTestNineIndigoVersion.java:278)
Caused by: org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
Error: no display specified
Error: no display specified
at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:118)
... 7 more
从我已经完成的研究中我发现这个问题出现了,因为作为一般规则,任何给定版本的Selenium只与当时最新版本的Firefox兼容。大多数遇到类似问题的人都被告知升级Selenium。但是,由于我有理由确定我有最新版本的Selenium(2.53.0),我认为逻辑解决方案是升级我试图运行该程序的服务器上的Firefox版本。不幸的是,我试图运行该程序的服务器是我大学的服务器(我正在创建这个程序作为我暑期工作的一部分,为我的一位教授工作,他们希望我在大学的服务器上运行该程序),我显然没有必要的权限来升级我大学的Firefox版本。
我能够提出的唯一其他解决方案是使用旧版本的Selenium,但事实证明这一点毫无结果。 Selenium 2.42.0和Selenium 2.51.0在通过SSH运行时遇到了同样的问题 - 后者特别让我怀疑版本兼容性是否真的是问题,考虑到从我看到的,Selenium 2.51.0应该是在大学的服务器上使用Firefox的版本。但是,我已经查看过人们使用Selenium而不是SSH的其他问题,而且我唯一看到的例外情况是我遇到的版本兼容性问题。
有谁知道我能做些什么来解决这个问题?我的笔记本电脑上的Firefox版本(与Selenium 2.53.0和2.51.0一起使用,但遇到与我大学服务器上版本相同的问题2.42.0)是版本46.0.1,而我大学服务器上的版本(这与我试过的任何版本的Selenium都不兼容)是firefox-38.6.1-1.el6.centos.x86_64(如果它们是相关的,则包含更多细节)。
答案 0 :(得分:0)
在我当前的项目中遇到类似的问题,可能的解决方案将在以下链接中找到https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/7272
public static int browserRetryCount =
Integer.parseInt(System.getProperty("webdriver.instance.retry.count","5"));
static int browserAttempt = 1;
public WebDriver getConnection(String browserType) {
try {
browserDriver = new FirefoxDriver(capabilities);
} catch (Exception e) {
Logger.logMessage("Error while initializing Driver object: "+e.getMessage());
String bindErrorMessage = "Unable to bind to locking port";
if ((e.getMessage().contains(bindErrorMessage)) && (browserAttempt<=browserRetryCount))
{
Logger.logMessage("Attemp2: browser instance creation!");
browserAttempt++;
int newPort = 7060+new java.util.Random().nextInt(10);
Logger.logMessage("newPort="+newPort);
System.setProperty("webdriver.firefox.port", newPort+"");
getConnection(browserType);
} else {
throw new UIFailure("Not able to create a driver object",e);
}
}
}
或
你也可以尝试这个
FirefoxProfile ffProfile = new FirefoxProfile();
FirefoxBinary ffBinary = new FirefoxBinary();
ffBinary.setTimeout(TimeUnit.SECONDS.toMillis(180));
driver = new FirefoxDriver(ffBinary, ffProfile);