Selenium 使用ChromeDriver时获取无法访问的BrowserException

Selenium 使用ChromeDriver时获取无法访问的BrowserException,selenium,selenium-webdriver,selenium-chromedriver,Selenium,Selenium Webdriver,Selenium Chromedriver,这段代码是: 另一个编辑:我想指出,我正在使用java来实现这一点,所以我不认为斜杠是一个问题。(如果我错了,请纠正我) 编辑:我想补充的一点是,它实际上说它启动了chrome驱动程序版本,但之后立即失败 System.setProperty("webdriver.chrome.driver", "webdrivers/chromedriver.exe"); driver = new ChromeDriver(); 我最终会犯的错误是 org.openqa.selenium.r

这段代码是:

另一个编辑:我想指出,我正在使用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
webdrivers/chromedriver.exe

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

您可能应该尝试使用绝对路径

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

  • 确保您使用的是最新的Chrome浏览器,其中一个版本落后于另一个版本
  • 最新的
    Chromedriver.exe
    版本2.9
  • 路径应该像
    C://Test//chromedriver.exe

  • 您需要添加绝对路径,在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");
    

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

    使用OpenQA.Selenium.Chrome;
    公共类ChromeOptionsWithPrefs:ChromeOptions
    {
    公共字典prefs{get;set;}
    }
    公共静态void Start()
    {
    var options=new ChromeOptionsWithPrefs();
    期权。附加条款(“隐姓埋名”);
    使用(IWebDriver驱动程序=新的ChromeDriver(@“C:\FilePath\”,选项))
    {
    //进行测试
    driver.Navigate().gotour(@)http://www.google.com"); 
    driver.Quit();
    }
    }
    

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

    是的,我的同事尝试了绝对路径,但它仍然无法神秘地工作。但通常,如果我给它错误的路径,它会给我一个不同的异常,例如“.exe不可用”。axidus1989,您是否尝试过在Amith提到的chromdriver的路径中使用双斜杠//而不是单斜杠/?我认为这应该行得通。我在windows中使用的java将/'转换为\\,所以这不应该是导致问题的原因,但我会让我的同事尝试一下,当通过dbl单击chromedriver.exe直接执行chromedriver.exe时会发生什么?你有什么错误吗?它只是说在cmd窗口中启动驱动程序。在那之后,我用Java编写代码,所以在表面上尝试了一下之后,它给了我一个错误,即可执行文件是一个目录,因此我认为这不起作用。只是意识到她没有使用最新版本。我会给她留张便条看看这是否能解决问题
    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(); 
        }
    }