Appium 错误:无法创建新会话。 (原始错误:没有从 Chromedriver 获得会话重定向)

Posted

技术标签:

【中文标题】Appium 错误:无法创建新会话。 (原始错误:没有从 Chromedriver 获得会话重定向)【英文标题】:Appium Error : A new session could not be created. (Original error: Did not get session redirect from 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();        
                


【问题讨论】:

遇到同样的错误?你有什么解决办法吗? 【参考方案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

【讨论】:

以上是关于Appium 错误:无法创建新会话。 (原始错误:没有从 Chromedriver 获得会话重定向)的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 浏览器无法使用 Java 在 Appium 中启动

Nightwatch:检索新会话时发生错误

Laravel 为每个请求创建一个新会话

setsid()

无法从 Appium 桌面应用程序启动应用程序。 apksigner 执行期间出错

Appium 未知错误:处理命令时发生未知的服务器端错误。原始错误:重新安装需要“应用程序”选项