2016-05-31 2 views
1

У меня есть написанная Java-программа, которая использует Selenium для активации и создания соединений через Firefox, и в настоящее время я пытаюсь запустить программу на отдельном сервере через SSH. Однако, хотя программа отлично работает на моей машине, когда я запускаю ее через SSH, я получаю сообщение об ошибке. Это конкретное сообщение, которое я получаю:Проблемы с Firefox с Selenium over 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 

Из исследования я сделал я понимаю, что этот вопрос возникает потому, что, как правило, любой вариант Селена совместит только с тем, что были последние версии 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

Как запускаются тесты ? Как настроить отображение на сервере CentOS вашего университета? 'Ошибка: никакой дисплей не указан * звучит как проблема с настройкой дисплея. – user2272115

+0

вам нужно xvfb, google «running selenium headless linux» есть много инструкций для любого вкуса linux –

+0

Я не запускаю тесты, но вместо этого использую Selenium для открытия Firefox и создания связей с различными веб-страницами (я могу подробнее остановиться если потребуется). Я не совсем уверен, как ответить на второй вопрос, который я боюсь - я просто передаю файл класса на сервер университета, а затем запускаю программу из командной строки, а не запускаю ее через Eclipse, как я бы хотел если бы я запускал программу на своем ноутбуке. – Siggy

ответ

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);