无法创建新的远程会话。 Appium

Posted

技术标签:

【中文标题】无法创建新的远程会话。 Appium【英文标题】:Unable to create new remote session. Appium 【发布时间】:2017-09-10 14:01:28 【问题描述】:
public class StartFirstJobTest 

AppiumDriver driver;
@BeforeTest
public void setUp() throws Exception 
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("deviceName", "F4AZFG07P508");
    //capabilities.setCapability("platformName","android");
    //capabilities.setCapability("platformVersion", "5.0");
    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

当我尝试运行测试时,出现此错误。

org.openqa.selenium.SessionNotCreatedException:无法创建新的 远程会话。期望的能力 = 能力 [platformName=Android, deviceName=F4AZFG07P508],必填 能力=能力[]构建信息:版本:'3.3.1', 修订:'5234b325d5',时间:'2017-03-10 09:10:29 +0000' 系统信息: 主机:'MacBook-Pro-Roman.local',ip:'fe80:0:0:0:77:aef0:77:32%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.3', java.version: '1.8.0_121' 驱动信息: driver.version: AndroidDriver

我认为我在 appium 中正确设置了所有内容(当检查器启动时,设备已安装应用程序并可以测试)

作为项目收集器,我使用 Maven

UPD。 我正在尝试自动化应用程序。我在代码中指定了附加功能

    @BeforeTest
public void setUp() throws Exception 
    File app = new File("/Users/romanderabin/Downloads/TimeTracker.apk");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("deviceName","F4AZFG07P508");
    capabilities.setCapability("platformVersion", "5.0");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("app", app.getAbsolutePath());
    capabilities.setCapability("appPackage", "com.ronasit.timetrackerandroid");
    capabilities.setCapability("appActivity","com.ronasit.timetrackerandroid.MainActivity");
    driver = new AndroidDriver(new URL("http://127.0.0.1:4727/wd/hub/"), capabilities);

和错误是一样的

org.openqa.selenium.SessionNotCreatedException:无法创建新的 远程会话。期望的能力 = 能力 [app=/Users/romanderabin/Downloads/TimeTracker.apk, appPackage=com.ronasit.timetrackerandroid, appActivity=com.ronait.timetrackerandroid.MainActivity, 平台版本=5.0,平台名称=Android,设备名称=F4AZFG07P508], 所需功能 = 功能 [] 构建信息:版本: '3.3.1',修订:'5234b325d5',时间:'2017-03-10 09:10:29 +0000' 系统信息:主机:'MacBook-Pro-Roman.local',ip: 'fe80:0:0:0:77:aef0:77:32%en0', os.name: 'Mac OS X', os.arch: “x86_64”,os.version:“10.12.3”,java.version:“1.8.0_121”驱动程序 info: driver.version: AndroidDriver

在 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126) 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:141) 在 io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:69) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:604) 在 io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:40) 在 io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) 在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:244) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:144) 在 io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:36) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:114) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:132) 在 io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:92) 在 StartFirstJobTest.setUp(StartFirstJobTest.java:30) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 在 org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211) 在 org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138) 在 org.testng.TestRunner.beforeRun(TestRunner.java:648) 在 org.testng.TestRunner.run(TestRunner.java:616) 在 org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 在 org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 在 org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 在 org.testng.SuiteRunner.run(SuiteRunner.java:261) 在 org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 在 org.testng.TestNG.runSuitesSequentially(TestNG.java:1191) 在 org.testng.TestNG.runSuitesLocally(TestNG.java:1116) 在 org.testng.TestNG.run(TestNG.java:1024) 在 org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) 在 org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

测试被忽略。

我尝试开始测试时的 Appium 日志

[HTTP] --> POST /wd/hub/session "desiredCapabilities":"app":"/Users/romanderabin/Downloads/TimeTracker.apk","appPackage":"com.ronasit.timetrackerandroid","appActivity":"com.ronasit.timetrackerandroid.MainActivity"," platformVersion":"5.0","platformName":"Android","deviceName":"F4AZFG07P508","requiredCapabilities":,"capabilities":"desiredCapabilities":"app":"/Users/romanderabin /Downloads/TimeTracker.apk","appPackage":"com.ronasit.timetrackerandroid","appActivity":"com.ronasit.timetrackerandroid.MainActivity","platformVersion":"5.0","platformName":"Android", "deviceName":"F4AZFG07P508","requiredCapabilities":,"alwaysMatch":"app":"/Users/romanderabin/Downloads/TimeTracker.apk","appPackage":"com.ronasit.timetrackerandroid" ,"appActivity":"com.ronasit.timetrackerandroid.MainActivity","platformVersion":"5.0","platformName":"Android","deviceName":"F4AZFG07P508","firstMatch":[]

[debug] [MJSONWP] 错误参数:BadParametersError:参数是 不正确。我们要 "required":["desiredCapabilities"],"optional":["requiredCapabilities","sessionId","id"] 你发了 ["desiredCapabilities","re​​quiredCapabilities","capabilities","alwaysMatch","firstMatch"]

[HTTP]

【问题讨论】:

【参考方案1】:

我希望您使用的是物理设备而不是模拟器。在这两种情况下,我们都需要在所需功能中提及浏览器或应用程序文件的详细信息。我假设您没有在代码中以及在 Appium GUI 中提到这些内容。下面是使用 appium 测试混合 apk 的示例代码。

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","ANDROID");
capabilities.setCapability("platformVersion", "6");
capabilities.setCapability("platformName",Constant.appPlatform);
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", Constant.appPackage);
capabilities.setCapability("appActivity",Constant.appActivity);
driver = new AndroidDriver(new URL("http://127.0.0.1:4727/wd/hub"), capabilities);  

此代码将调用在目标设备中打开的应用程序,其中提到的应用程序活动具有所需的功能。

【讨论】:

是的,我使用的是真实设备。不幸的是,你的决定对我没有帮助。 appium 和 selenium 之间的兼容性版本有问题吗? 这里的问题在于所需的功能。如果我确切地知道您要达到的目标,我可以为您提供更好的帮助。您是否在移动设备中自动化浏览器或应用程序。如果您要自动化应用程序,上面的代码应该可以工作。在浏览器自动化的情况下,我们需要更改所需的功能。错误代码清楚地表明您只通过了两个所需的功能。 Android 和设备名称。浏览器或应用程序功能均未通过。 功能看起来不错。你能更新完整的错误代码吗? Appium 还告诉了不创建会话的原因 我检查了错误代码,但我没有任何线索。在使用 eclipse 时,我们常常会得到原因以及错误,例如“org.openqa.selenium.SessionNotCreatedException:无法创建新会话。(原始错误:找不到连接的 Android 设备。)(警告:服务器没有不提供任何堆栈跟踪信息)命令持续时间或超时:29.76 秒”,如原始错误所述。你检查过appium日志吗?在启动驱动程序时还要确保端口号。我使用“4727”的示例代码。应该和appium端口一样。 感谢您的建议,朋友。我找到了解决问题的方法,希望对其他人有所帮助【参考方案2】:

我找到了问题的解决方案。将 Appium Java 客户端版本 4.1.2 更新到 5.0.0 BETA6 并使用 Selenium-Java 版本 3.3.1

【讨论】:

【参考方案3】:

尝试更换设备。我更换了设备,它对我有用。

【讨论】:

【参考方案4】:

我遇到了同样的问题,因为我使用了清单中的 appPackage。应该从 gradle (applicationId) 获取 appPackage。

【讨论】:

【参考方案5】:

在您的 IDE 中,在终端中运行以下命令

appium --allow-insecure chromedriver_autodownload

这将安装 chromedrivers,您就可以在 chrome 浏览器上运行代码

【讨论】:

【参考方案6】:

这可能是个问题,因为据我了解,您在客户端脚本所在的同一台机器上运行 Appium,请尝试使用“http://127.0.1.1:4723/wd/hub”。这个解决方案对我有用。

AndroidDriver<AndroidElement> driver = null;
driver = new AndroidDriver<>(new URL("http://127.0.1.1:4723/wd/hub"), capabilities);

【讨论】:

【参考方案7】:

在处理版本兼容性时,Maven 存储库提供了 Compile Dependencies 选项。只需在 Maven Repository 网站上向下滚动,您就会看到此部分。

【讨论】:

为您所引用的页面添加链接,并更清楚地解释它将如何解决问题。

以上是关于无法创建新的远程会话。 Appium的主要内容,如果未能解决你的问题,请参考以下文章

无法创建新的远程会话 - Selenium webdriver

无法使用 remotewebdriver 和 gecko 驱动程序创建新的远程会话

如何修复 SessionNotCreatedException:尝试运行 Firefox 时无法创建新的远程会话?

Selenium 3.0 Firefx 驱动程序失败并出现 org.openqa.selenium.SessionNotCreatedException:无法创建新的远程会话

org.openqa.selenium.SessionNotCreatedException:无法创建新的远程会话。在模拟器中初始化android驱动程序时

移动自动化与 appium -- Selenium 驱动程序