【问题标题】:Getting a UnreachableBrowserException while using ChromeDriver使用 ChromeDriver 时出现 UnreachableBrowserException
【发布时间】:2014-04-05 12:32:50
【问题描述】:

这段代码是:

另一个编辑:想指出我正在使用 java 来实现这一点,所以我认为斜杠不会成为问题。 (如果我错了,请纠正我)

编辑:我想补充的另一件事是,它实际上说它启动了 chrome 驱动程序版本,但之后立即失败

System.setProperty("webdriver.chrome.driver", "webdrivers/chromedriver.exe");
        driver = new ChromeDriver();

我最终会得到的错误是

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: '2.37.0', revision: 'a7c61cb', time: '2013-10-18 17:15:02'
System info: host: '****-PC', ip: '10.10.10.1', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_51'

没有堆栈跟踪,这会在 webdriver 尝试启动后立即发生。我猜上面的代码就是它发生的地方,因为netbeans并没有真正指出它出错的地方。

神秘的是,这在我的计算机上有效,但在尝试在同事的计算机上运行时,它只会产生此错误。 Firefox 对她有用,但 IE 和 Chrome 都会导致这种情况。有什么想法吗?

编辑:显然有一个堆栈跟踪:

Driver info: driver.version: ChromeDriver
 at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:165)
 at     org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:62)
 at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:527)
 ... 7 more
Caused by: org.openqa.selenium.net.UrlChecker$TimeoutException: Timed out waiting for     [http://localhost:8891/status] to be available after 20002 ms
 at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:104)
 at org.openqa.selenium.remote.service.DriverService.start(DriverService.java:163)
 ... 9 more
Caused by: com.google.common.util.concurrent.UncheckedTimeoutException: java.util.concurrent.TimeoutException
 at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:143)
 at org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:79)
 ... 10 more
Caused by: java.util.concurrent.TimeoutException
 at java.util.concurrent.FutureTask.get(FutureTask.java:201)
 at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:130)
 ... 11 more

【问题讨论】:

  • dbl点击直接执行chromedriver.exe会发生什么?那你有什么错误吗?
  • 它只是说在 cmd 窗口中启动驱动程序。之后就没有别的了

标签: selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

您要么需要添加在 Windows 中可能需要包含转义反斜杠的绝对路径,例如

System.setProperty("webdriver.chrome.driver", "C:\\chromedriver\\chromedriver.exe"); 
driver = new ChromeDriver();

或者您可以将属性添加到您的系统路径。

如果这些选项不起作用,则可能是连接到 ChromeDriver 时出现问题。在这种情况下,您可以打开 Chromedriver.exe 文件

WebDriver driver = new RemoteWebDriver("http://localhost:9515", DesiredCapabilities.chrome());
driver.get("http://www.google.com");

https://code.google.com/p/selenium/wiki/ChromeDriver

【讨论】:

    【解决方案2】:

    webdrivers/chromedriver.exe

    我怀疑它找不到 chromedriver。您确定这是通往chromedriver.exe 的正确路径吗?

    您应该尝试使用绝对路径。

    例如C:/Users/Name/Desktop/webdrivers/chromedriver.exe

    【讨论】:

    • 是的,我的同事尝试了绝对路径,但它仍然无法正常工作。但通常如果我给它错误的路径,它会给我一个不同的异常,例如“.exe 不可用”。
    • axidus1989,您是否尝试过在 Amith 提到的 chromdriver 路径中使用双斜杠 // 而不是单斜杠 /?我认为这应该可行。
    • 我正在使用 java 在 windows 中将 / 转换为 \\ 所以它不应该是导致问题的原因,但我会请我的同事试一试
    【解决方案3】:
    1. 确保您使用的是最新版本的 Chrome 浏览器,并且
    2. 最新Chromedriver.exe版本2.9
    3. 路径应该像C://Test//chromedriver.exe一样提及

    【讨论】:

    • 刚刚意识到她没有使用最新版本。我会给她留个便条,看看这是否能解决问题
    【解决方案4】:

    当我使用绝对路径时,它给了我错误。但是,当我使用可执行文件所在的目录时,它启动得很好。这是一个 C# 示例

    using OpenQA.Selenium.Chrome; 
    
    public class ChromeOptionsWithPrefs : ChromeOptions
    {
        public Dictionary<string, object> prefs { get; set; }
    }
    
    public static void Start()
    {
        var options = new ChromeOptionsWithPrefs();
        options.AddArguement("-incognito");
        using (IWebDriver driver = new ChromeDriver(@"C:\FilePath\", options))
        {
            //perform the test
            driver.Navigate().GoToURL(@"http://www.google.com"); 
            driver.Quit(); 
        }
    }
    

    我只是使用首选项不在我运行测试的任何机器上存储任何数据。它不是必需的,但您可以通过它传递一些有趣的选项。

    【讨论】:

    • 我正在使用 Java 对其进行编码,所以在表面上尝试后,它给了我一个错误,即可执行文件是一个目录,因此我认为这不起作用。