【问题标题】:Appium Error : A new session could not be created. (Original error: Did not get session redirect from Chromedriver)Appium 错误:无法创建新会话。 (原始错误:没有从 Chromedriver 获得会话重定向)
【发布时间】:2014-08-28 21:01:46
【问题描述】:

我正在尝试通过 Appium 运行我的第一个测试并收到以下错误。

org.openqa.selenium.SessionNotCreatedException:无法创建新会话。 (原始错误:没有从 Chromedriver 获得会话重定向)(警告:服务器没有提供任何堆栈跟踪信息) 命令持续时间或超时:4.64 秒 构建信息:版本:'2.41.0',修订:'3192d8a',时间:'2014-03-27 17:17:32' os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7.0_51' 驱动程序信息:org.openqa.selenium.remote.RemoteWebDriver

Appium 日志:

错误:调试:在 /wd/hub/session 发起的 Appium 请求
信息:看起来我们想要在 android 上使用 chrome
信息:创建新的 appium 会话 99ff77a0-86fa-4851-93ad-5375c95656e7
错误:调试:正在执行:“D:\****\adt-bundle-windows-x86-20140321\sdk\platform-tools\adb.exe”设备
信息:正在为会话准备设备
信息:不检查应用程序是否存在,因为我们假设它已经在设备上
信息:检查 adb 是否存在
信息:[ADB] 使用来自 D:\****\adt-bundle-windows- 的 adb x86-20140321\sdk\platform-tools\adb.exe
信息:尝试查找已连接的 android 设备
信息:[ADB] 正在获取连接的设备...
信息:[ADB] 1 个设备( s) 已连接
错误:调试:正在执行:“D:\****\adt-bundle-windows-x86-20140321\sdk\platform-tools\adb.exe”-s emulator-5554 wait-for-设备
信息:将设备 ID 设置为 emulator-5554
信息:[ADB] 等待设备准备好并响应 shell 命令(超时 = 5)
错误:调试:正在执行:“D: \****\adt-bu ndle-windows-x86-20140321\sdk\platform-tools\adb.exe" -s emulator-5554 shell "echo 'ready'"
信息:启动 logcat 捕获
错误:调试:将解锁帮助程序推送到设备...
错误:调试:执行:“D:\****\adt-bundle-windows-x86-20140321\sdk\platform-tools\adb.exe”-s emulator-5554 install “C :\Appium\node_modules\appium\build\unlock_apk\unlock_apk-debug.apk"
错误:调试:执行:"D:\****\adt-bundle-windows-x86-20140321\sdk\platform- tools\adb.exe" -s emulator-5554 shell "dumpsys window"
信息:将 dumpsys 输出写入 C:\Appium\node_modules\appium\.dumpsys.log
错误:调试:屏幕已解锁,继续.
信息:创建 Chrome 会话
信息:确保 Chrome 驱动程序存在
信息:杀死所有旧的 chromedrivers,运行: FOR /F "usebackq tokens=5" %a in (`netstat -nao ^| findstr /R /C:"9515 "`) 做 (FOR /F "usebackq" %b in (`TASKLIST /FI "PID eq %a" ^| findstr /I chromedriver.exe`) 做 (IF NOT %b= ="" TASKKILL /F /PID %b))
信息:似乎不存在旧的 chromedrivers
信息:使用以下命令生成 chromedriver:C:\Appium\node_modules\appium\build\chromedriver\windows\chromedriver.exe
信息:[CHROMEDRIVER] 在端口 9515 上启动 ChromeDriver (v2.9.248315)
信息:使用 opts 发出 http 请求:{"url":"http://****:9515/wd/hub/ session","method":"POST","json":{"sessionId":null,"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.android.browser","androidActivity":"com .android.browser.BrowserActivity","androidDeviceSerial":"emulator-5554"}}}}
错误:调试:正在执行:“D:\****\adt-bundle-windows-x86-20140321\sdk \platform-tools\adb.exe" -s emulator-5554 设备
信息:[CHROMEDRIVER STDERR] [0.003][SEVERE]:无法将套接字绑定到 0.0.0.0:9515
信息:[CHROMEDRIVER] 端口无法使用。正在退出...
信息:Chrome 驱动程序退出并显示代码 1
信息:[ADB] 正在连接设备...
错误:错误:Chrome 驱动程序创建会话无效。状态为 200,正文为 {"sessionId":"ba9a494082776d6b4836da850072cbcb","status":13,"value":{"message":"unknown error: Device emulator-5554 is already in use\n (Driver info: chromedriver= 2.9.248315,platform=Windows NT 6.1 SP1 x86)"}}
信息:清理 appium 会话
错误:错误:无法启动 Appium 会话,错误是:错误:未从 Chromedriver 获得会话重定向
信息:错误:未从 Chromedriver
获得会话重定向为 null。 (C:\Appium\node_modules\appium\lib\devices\android\chromedriver.js:195:12)
在 Request._callback (C:\Appium\node_modules\appium\lib\devices\common.js:104 :5)
在 Request.self.callback (C:\Appium\node_modules\appium\node_modules\request\request.js:121:22)
在 Request.EventEmitter.emit (events.js:98: 17)
应要求。 (C:\Appium\node_modules\appium\node_modules\request\request.js:985:14)
在 Request.EventEmitter.emit (events.js:117:20)
在 IncomingMessage。 (C:\Appium\node_modules\appium\node_modules\request\request.js:936:12)
在 IncomingMessage.EventEmitter.emit (events.js:117:20)
在 _stream_readable.js:920: 16
在 process._tickCallback (node.js:415:13)
信息:以错误响应客户端:{"status":33,"value":{"message":"新会话无法被创建。(原始错误:没有从 Chromedriver 获得会话重定向)","origValue":"没有从 Chromedriver 获得会话重定向"},"sessionId":null}

我只想使用 Android 默认浏览器而不是 Chrome。我不知道 Appium 为什么要尝试启动 Chromedriver 和 Chrome 浏览器。下面是我使用的代码。

import java.net.URL;                

import org.openqa.selenium.WebDriver;                
import org.openqa.selenium.remote.CapabilityType;                
import org.openqa.selenium.remote.DesiredCapabilities;                
import org.openqa.selenium.remote.RemoteWebDriver;                
import org.testng.annotations.AfterMethod;                
import org.testng.annotations.BeforeMethod;                
import org.testng.annotations.Test;                

public class Appium {                

    public WebDriver driver;            

    @BeforeMethod            
    public void beforeMethod() throws Exception {            
        // set up appium        
        DesiredCapabilities capabilities = new DesiredCapabilities();        
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "Browser");        
        capabilities.setCapability("platformName", "Android");        
        capabilities.setCapability("deviceName", "Android Emulator");        
        capabilities.setCapability("platformVersion", "4.4.2");        
        WebDriver driver = new RemoteWebDriver(new URL(        
                http://****:4723/wd/hub), capabilities);
        driver.get("http://www.yahoo.com");        
    }            

    @Test            
    public void f() {            

    }            

    @AfterMethod            
    public void afterMethod() {            
        driver.quit();        
    }            

}

【问题讨论】:

  • 遇到同样的错误?你有什么解决办法吗?

标签: java selenium appium


【解决方案1】:

为 android 功能设置最安全的方法 = DesiredCapabilities.android()

PS:您的会话未创建,因为您的脚本无法连接到 selenium 节点/集线器;你应该检查你的配置

在您发布的堆栈跟踪中,它连接到 http://**:9515/(不像您提到的端口 4723)

【讨论】:

    【解决方案2】:

    您需要将以下 URL 设置为 http://0.0.0.0:9515/wd/hub 而不是 ****:4723...

    WebDriver driver = new RemoteWebDriver(new URL(http://****:4723/wd/hub), capabilities);

    Chromedriver 的端口默认为 9515,而不是 4723。You should read the documentation on this. There are other capabilities that need to be set correctly(如BROWSER_NAME

    【讨论】:

      【解决方案3】:

      虽然这个问题已经很老了,而且随着 chrome 驱动程序版本的更新,appium 客户端使用的很多定义也发生了变化。然而我能弄清楚的是,这里的问题是来自日志:

      错误:错误:Chromedriver 创建会话无效。状态为 200 身体是 {"sessionId":"ba9a494082776d6b4836da850072cbcb","status":13,"value":{"message":"unknown 错误:Device emulator-5554 已在使用中\n(驱动程序信息: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86)"}}

      这进一步导致:

      org.openqa.selenium.SessionNotCreatedException:一个新的会话可以 不会被创建。 (原始错误:没有从 Chromedriver)(警告:服务器未提供任何堆栈跟踪 信息)

      因此SessionNotCreatedException

      更简单的解决方法是确保在启动另一个会话之前没有其他会话正在进行,以避免端口冲突和会话失败。

      【讨论】:

        【解决方案4】:

        在评论下面的语句后尝试运行

         capabilities.setCapability("platformVersion", "4.4.2"); 
        

        【讨论】:

          【解决方案5】:

          将旧的 chrome 驱动程序替换为 appium 位置的新 chrome 驱动程序,它对我有用。

          Appium 位置应该类似于:

          C:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win\
          

          Appium 版本:1.4.16.1

          【讨论】:

            猜你喜欢
            • 2016-02-15
            • 1970-01-01
            • 1970-01-01
            • 2015-02-22
            • 1970-01-01
            • 2015-01-06
            • 2018-03-05
            • 1970-01-01
            相关资源
            最近更新 更多