2017-06-01 47 views
2

我的硒代码无法运行。不断抛出我下面的错误:即使使用了Gecko驱动程序,Java抛出org.openqa.selenium.remote.UnreachableBrowserException

Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. 
Build info: version: 'unknown', revision: 'unknown', time: 'unknown' 
System info: host: 'SLAP129', ip: '192.168.4.218', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_74' 
Driver info: driver.version: FirefoxDriver 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:658) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:108) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104) 
    at PractiseSession1.OpenBrowser(PractiseSession1.java:35) 
    at PractiseSession1.main(PractiseSession1.java:16) 
Caused by: java.lang.NullPointerException 
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:192) 
    at org.openqa.selenium.firefox.XpiDriverService.start(XpiDriverService.java:94) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637) 
    ... 8 more 

版Firefox:53.0.3(32位) 硒版本:硒的Java-3.4.0 我使用Eclipse红月和我的机器是Windows 7中(64位)。 我已阅读所有帮助查询,但找不到解决方案。这是我的Java代码:

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
public class PractiseSession1 
{ 
public static void main(String[] args) 

{ 
    // TODO Auto-generated method stub 
    WebDriver driver = null; 
    String URL="http://www.google.com"; 
    //System.out.println("Application title is ============="); 
    PractiseSession1 ade= new PractiseSession1(); 
    ade.OpenBrowser(driver); 
    ade.GetPage(URL, driver); 
    ade.quitbrowser(driver); 
} 

private void quitbrowser(WebDriver driver) 
{ 
    driver.quit(); 
} 
private void GetPage(String URL, WebDriver driver) 
{ 
    driver.get(URL); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
} 
private void OpenBrowser(WebDriver driver) 
{ 
    System.setProperty("webdriver.firefox.marionette", "<Geckodriver 
    path>geckodriver.exe"); 
    DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 
    capabilities.setCapability("marionette", true); 
    driver= new FirefoxDriver(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
} 
} 

回答

1

这里是回答你的问题:

你必须考虑很多因素,在你的代码如下:

  1. 您已经创建了一个对象通过PractiseSession1 ade= new PractiseSession1();并使用对象ade调用不同的方法OpenBrowser(),GetPage()quitbrowser()。这些方法执行的功能可以通过main()中的一行代码来实现,而且不需要创建任何对象。
  2. 尽管使用Selenium 3.X继W3C标准,与geckodriver.exe工作我们需要在System.setProperty线使用webdriver.gecko.driver而不是webdriver.firefox.marionette
  3. 当你提到System.setProperty你需要按如下方式提供的geckodriver.exe的绝对路径:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    
  4. 一旦你提到ImplicitlyWait,它被保留在你的程序的执行。您可以考虑删除多个提及。

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  5. 整个代码可以在短短6行写成如下:

    package demo; 
    
    import java.util.concurrent.TimeUnit; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    
    public class Q44308973_remote_unreachablebrowserexception { 
    
    public static void main(String[] args) 
    { 
    
    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    DesiredCapabilities dc = DesiredCapabilities.firefox(); 
    dc.setCapability("marionette", true); 
    WebDriver driver = new FirefoxDriver(dc); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    driver.get("https://google.com"); 
    } 
    
    } 
    

有关如何webdriver.firefox.marionette演变为webdriver.gecko.driver你可以看this space一个详细的了解。

让我知道这个答案是否是您的问题。

+0

非常感谢。解决方案帮助了我的代码,干杯!!! – ThugMeister22

0

你应该

driver = new FirefoxDriver(capabilities); 

所以更换

driver = new FirefoxDriver(); 

您运行与所需能力的考验。

唯一的问题是,它可能无法与3.4.0一起使用,因为默认超时值已减少,现在可能太短。

相关问题