【问题标题】:Selenium UnreachableBrowserException - "Could not start a new session" in SoapUI Groovy TestStepSelenium UnreachableBrowserException - SoapUI Groovy TestStep 中的“无法启动新会话”
【发布时间】:2015-05-22 12:42:51
【问题描述】:

我在 Win7 x32 上使用 SoapUI Pro 5.1.2,并尝试在 Groovy TestStep 中连接到 Selenium Webdriver。

为此,我在$SOAP_HOME$\bin\ext 文件夹中添加了selenium-standalone-server.jar v2.45.0。

我的 Groovy TestStep 代码:

import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver

System.setProperty('webdriver.chrome.driver', 'C:\\\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver')) //got 'C:\\Windows\system32\chromedriver.exe'

WebDriver driver = new ChromeDriver() // this line causes error

driver.get('http://google.com')
driver.quit()

当我尝试运行此步骤时,SoapUI 返回消息:

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.45.0', 
    revision: '5017cb8', 
    time: '2015-02-26 23:59:50' 
System info: 
    host: 'SmithPC', 
    ip: '10.0.2.15', 
    os.name: 'Windows 7', 
    os.arch: 'x86', 
    os.version: '6.1', 
    java.version: '1.8.0_45' 
Driver info: 
    driver.version: ChromeDriver 
error at line: 7

在将相同的selenium-standalone-server.jar 包添加到空的java 项目后,我尝试通过Netbeans IDE 运行这段代码。 它已经顺利完成了!

这是soapUI的错误日志:

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.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'SmithPC', ip: '10.0.2.15', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_45'
Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:593)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:126)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:139)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:171)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:160)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:117)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:186)
    at Script3.run(Script3.groovy:7)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:92)
    at com.eviware.soapui.support.scripting.groovy.SoapUIProGroovyScriptEngineFactory$SoapUIProGroovyScriptEngine.run(SourceFile:79)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:138)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:250)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at org.apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.java:79)
    at org.apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.java:77)
    at org.apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.java:124)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:183)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:126)
    at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:72)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:133)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:66)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:572)
    ... 23 more

我也试过用FirefoxDriver()代替ChromeDriver(),得到了同样的错误。

【问题讨论】:

  • 看起来chromedriver.exe 正常启动- 至少soapUI 登录终端会在错误消息之前显示消息Starting ChromeDriver 2.15.322448 (hashcode) on port 36240
  • 我尝试在没有任何预配置的情况下运行FirefoxDriver() - 启动浏览器的最简单方法 - 但它也会抛出相同的错误
  • 我遇到了同样的错误,我的解决方案是旧版 Chrome

标签: java selenium groovy webdriver soapui


【解决方案1】:

我也遇到了同样的错误,说的是:

org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话。可能的原因是远程服务器地址无效或浏览器启动失败。

chromedriver.exe 开始正常。我可以在任务管理器中看到它。

我的环境如下,

  • Windows 7,终极版,64 位系统
  • selenium-server-standalone-2.47.1
  • chromedriver 2.19
  • 谷歌浏览器:45.0

在谷歌结果中建议多次尝试后,我的最终解决方案是将127.0.0.1 localhost 添加到C:\Windows\System32\drivers\etc\hosts

希望能帮到你!

【讨论】:

  • 如果您有一个虚假的本地主机条目,也可能是一个问题。简而言之,selenium 只喜欢 127.0.0.1 localhost 作为您的 localhost 条目。
【解决方案2】:

从 seleniumhq.org 下载最新的驱动程序(chrome 或 IE),并使用以下代码

    System.setProperty("webdriver.chrome.driver","<YourPath>chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.get("http://www.yahoo.com");

这对我有用。

【讨论】:

  • 更新 chromedriver 对我有帮助。
【解决方案3】:

在 selenium 中出现此错误消息:

org.openqa.selenium.remote.UnreachableBrowserException: 无法 开始一个新的会话。可能的原因是远程地址无效 服务器或浏览器启动失败。

可能有很多原因。但是在这种情况下查看堆栈跟踪是由于NullPointerException

Caused by: java.lang.NullPointerException
    at org.apache.http.impl.conn.SystemDefaultRoutePlanner.determineProxy(SystemDefaultRoutePlanner.java:79)
    at org.apache.http.impl.conn.DefaultRoutePlanner.determineRoute(DefaultRoutePlanner.java:77)
    at org.apache.http.impl.client.InternalHttpClient.determineRoute(InternalHttpClient.java:124)

问题是您在 SOAPUI 中使用了 selenium。 SOAPUI 似乎将默认代理设置为null (ProxySelector.setDefault(null))。因此,当 selenium 获取默认代理并在其上调用方法时,会抛出 NullPointerException

问题是您在 SOAPUI 中执行您的代码,因此在 SOAPUI 将其设置为 null 之前您无法获得默认代理...然后可能的解决方法是在您的 Groovy 测试步骤中尝试创建一个 ProxySelector 并将其设置为WebDriver 执行前的默认值:

import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.net.Proxy
import java.net.ProxySelector

def selectDirectProxy(URI uri) {
  final List<Proxy> proxy = new ArrayList<Proxy>()
  proxy.add(Proxy.NO_PROXY)
  return proxy
}

// create a ProxySelector
ProxySelector proxySelector = [ select : { uri->selectDirectProxy(uri) } ] as ProxySelector
// set as default to avoid null pointer
ProxySelector.setDefault(proxySelector);

// now it's safe to invoke WebDriver...
System.setProperty('webdriver.chrome.driver', 'C:\\\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver')) //got 'C:\\Windows\system32\chromedriver.exe'

WebDriver driver = new ChromeDriver()

在这个例子中,我以一种时髦的方式扩展了ProxySelector 抽象类,以设置至少一个直接代理。如果有必要,也可以使用 Proxy 类来配置无直接代理并将其设置在列表中,但是使用此代码,我试图避免 NPE 由于 SOAPUI ProxySelector.setDefault(null)

【讨论】:

  • 真的很酷的把戏。我曾经在 SoapUI 旧版本(4.xx)中运行 webdriver,你的帖子帮助我在新版本中运行它:)
【解决方案4】:

它已经告诉你发生了什么:

//got 'C:**\\**Windows\system32\chromedriver.exe'

尝试使用以下方法之一定义路径:

System.setProperty('webdriver.chrome.driver','C:\\Windows\\system32\\chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver'))

System.setProperty('webdriver.chrome.driver','C:/Windows/system32/chromedriver.exe')
log.info(System.getProperty('webdriver.chrome.driver'))

另外,我不建议您将 chromedriver.exe 存储在 system32 文件夹中,尤其是在您没有工作站管理员权限的情况下。像 C:/WebDrivers/hromedriver.exe 一样使用 smt

【讨论】:

  • 并不是 ChromeDriver 可执行路径错误,因为这个 java 抛出 IllegalStateException: "驱动程序可执行文件不存在"。我试图更改驱动程序的目录,将chromedriver.exe 的新副本放在C:\drivers 中,但这无济于事 - 出现同样的错误。
【解决方案5】:

这可能是您使用的“selenium”、“chrome 浏览器版本”和“chrome 驱动程序”版本之间的兼容性问题。

如果您使用的是 Selenium 2.53(像我一样),那么使用 chrome 驱动程序 2.25 应该适合您。

您可以从这里下载它 - https://chromedriver.storage.googleapis.com/index.html?path=2.25/

【讨论】:

    【解决方案6】:

    我遇到了同样的问题,升级到最新的 chrome 驱动程序解决了我的问题。

    您可以从以下网址下载最新的 chrome 驱动程序。

    http://chromedriver.storage.googleapis.com/index.html

    最好始终使用最新版本。下载后在System.setProperty("webdriver.chrome.driver","{Your path Chrome Driver}")中设置chrome驱动的路径;

        System.out.println("Creating Chrome Driver");
     // Set Chrome Driver
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
    
        WebDriver driver = new ChromeDriver();
        driver.get("{Your URL}");
    

    【讨论】:

      【解决方案7】:

      这个问题完全与chrome浏览器版本和chrome驱动版本有关。

      一旦您保持浏览器和驱动程序版本相同,您的问题就会得到解决。

      要检查 chrome 版本,请执行以下步骤 ->> 单击三个垂直点 ->> 帮助 ->> 关于 Google Chrome 浏览器 ->> 查看 chrome 版本。

      现在检查 chrome 浏览器版本

      在我的情况下浏览器版本是 90.0

      现在下载与操作系统相同版本的chrome驱动程序

      我们会下载90.0版本的驱动,然后设置浏览器路径 System.setProperty("webdriver.chrome.driver", "D:\chromedriver.exe");

      WebDriver driver = new ChromeDriver();
      driver.get("{Your URL}")
      

      #JAVA #硒

      【讨论】:

        【解决方案8】:

        如果有人在 Ubuntu 上遇到类似问题,请检查您是否安装了 Chromium 网络浏览器

        只有 chrome 浏览器是不够的。

        More details

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-22
          • 2010-11-27
          • 1970-01-01
          • 2013-08-05
          • 2023-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多