Selenium webdriver 无法以编程方式启动appium服务器。错误:spawn ENOTDIR

Selenium webdriver 无法以编程方式启动appium服务器。错误:spawn ENOTDIR,selenium-webdriver,appium-ios,Selenium Webdriver,Appium Ios,我正在尝试在mac中使用“AppiumServiceBuilder”启动appium服务器。我指的是以下网站: 我正在使用以下代码: AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder(); serviceBuilder.usingAnyFreePort(); serviceBuilder.usingDriverExecutable(new File("/usr/local/bin/node")); serviceBu

我正在尝试在mac中使用“AppiumServiceBuilder”启动appium服务器。我指的是以下网站:



我正在使用以下代码:

AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder();
serviceBuilder.usingAnyFreePort();
serviceBuilder.usingDriverExecutable(new File("/usr/local/bin/node"));
serviceBuilder.withAppiumJS(new File("/usr/local/bin/appium"));
HashMap<String, String> environment = new HashMap();
environment.put("PATH", "/usr/local/bin/carthage"); 
serviceBuilder.withEnvironment(environment);
server = AppiumDriverLocalService.buildService(TLDriverFactory.serviceBuilder);
server.start();
我仍然明白这个问题


我有两个问题:
1.如何解决此问题并使其生效?
2.在启动iDriver时,为什么它会说“这些功能[“useJSONSource”,“WaitForQuiese”]不是标准功能,应该有一个扩展前缀”?这是否意味着如果通过AppiumServiceBuilder启动appium,这些功能将无法工作



Mac版本:macOS Mojave 10.14.6
Appium版本:1.13.0
Appium Java客户端:6.1.0(也尝试使用7.2.0)

Selenium版本:3.4.0

我尝试了以下代码:

AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder();
serviceBuilder.usingAnyFreePort();
serviceBuilder.usingDriverExecutable(new File("/usr/local/bin/node"));
serviceBuilder.withAppiumJS(new File("/usr/local/bin/appium"));
HashMap<String, String> environment = new HashMap();
environment.put("PATH", "/usr/local/bin:" + System.getenv("PATH"));
serviceBuilder.withEnvironment(environment);        

server.set(AppiumDriverLocalService.buildService(serviceBuilder));
server.get().start();
AppiumServiceBuilder serviceBuilder=新的AppiumServiceBuilder();
usingAnyFreePort();
serviceBuilder.usingDriverExecutable(新文件(“/usr/local/bin/node”);
serviceBuilder.withAppiumJS(新文件(“/usr/local/bin/appium”);
HashMap环境=新建HashMap();
environment.put(“PATH”),“/usr/local/bin:”+System.getenv(“PATH”);
serviceBuilder.withEnvironment(环境);
set(AppiumDriverLocalService.buildService(serviceBuilder));
server.get().start();

这对我来说很好。

我还尝试从终端启动appium服务器。我创建了一个文件-appiumSh.command,其中包含以下行:
#/bin/bash/usr/local/bin/appium
当我试图从程序中调用该文件时,它不起作用:
Runtime.getRuntime().exec(cwd+“/appiumSh.command”)
我缺少什么吗?
[35m[HTTP][39m [37m-->[39m [37mPOST[39m [37m/wd/hub/session[39m
[35m[HTTP][39m [90m{"desiredCapabilities":{"waitForQuiescence":false,"noReset":true,"useJSONSource":true,"platformVersion":"12.3.1","automationName":"XCUITest","bundleId":"com.tekion.cdmsmobileenterprise","platformName":"iOS","udid":"cc6080c50dad4605d8e5511e89410792f0100026","deviceName":"iPhone 6"},"capabilities":{"alwaysMatch":{"appium:automationName":"XCUITest","appium:bundleId":"com.tekion.cdmsmobileenterprise","appium:deviceName":"iPhone 6","appium:noReset":true,"platformName":"ios","appium:platformVersion":"12.3.1","appium:udid":"cc6080c50dad4605d8e5511e89410792f0100026","useJSONSource":true,"waitForQuiescence":false},"firstMatch":[{}]}}[39m
[debug] [35m[W3C][39m Calling AppiumDriver.createSession() with args: [{"waitForQuiescence":false,"noReset":true,"useJSONSource":true,"platformVersion":"12.3.1","automationName":"XCUITest","bundleId":"com.tekion.cdmsmobileenterprise","platformName":"iOS","udid":"cc6080c50dad4605d8e5511e89410792f0100026","deviceName":"iPhone 6"},null,{"alwaysMatch":{"appium:automationName":"XCUITest","appium:bundleId":"com.tekion.cdmsmobileenterprise","appium:deviceName":"iPhone 6","appium:noReset":true,"platformName":"ios","appium:platformVersion":"12.3.1","appium:udid":"cc6080c50dad4605d8e5511e89410792f0100026","useJSONSource":true,"waitForQuiescence":false},"firstMatch":[{}]}]
[debug] [35m[BaseDriver][39m Event 'newSessionRequested' logged at 1568395822117 (23:00:22 GMT+0530 (India Standard Time))
[35m[BaseDriver][39m The capabilities ["useJSONSource","waitForQuiescence"] are not standard capabilities and should have an extension prefix
[35m[Appium][39m Appium v1.13.0 creating new XCUITestDriver (v2.113.2) session
[35m[Appium][39m Capabilities:
[35m[Appium][39m   platformName: ios
[35m[Appium][39m   useJSONSource: true
[35m[Appium][39m   waitForQuiescence: false
[35m[Appium][39m   automationName: XCUITest
[35m[Appium][39m   bundleId: com.tekion.cdmsmobileenterprise
[35m[Appium][39m   deviceName: iPhone 6
[35m[Appium][39m   noReset: true
[35m[Appium][39m   platformVersion: 12.3.1
[35m[Appium][39m   udid: cc6080c50dad4605d8e5511e89410792f0100026
[debug] [35m[BaseDriver][39m W3C capabilities {"alwaysMatch":{"platformNa... and MJSONWP desired capabilities {"waitForQuiescence":false,... were provided
[debug] [35m[BaseDriver][39m Creating session with W3C capabilities: {"alwaysMatch":{"platformNa...
[35m[BaseDriver][39m Session created with session id: 7e5f96b0-2540-41d4-9d2f-4153ffef9cd3
[debug] [35m[XCUITest][39m Unable to get username running server: spawn ENOTDIR
[35m[XCUITest][39m Error: spawn ENOTDIR
[35m[XCUITest][39m     at ChildProcess.spawn (internal/child_process.js:394:11)
[35m[XCUITest][39m     at spawn (child_process.js:540:9)
[35m[XCUITest][39m     at /usr/local/lib/node_modules/appium/node_modules/teen_process/lib/exec.js:30:16
[35m[XCUITest][39m     at Promise.cancellationExecute [as _execute] (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/debuggability.js:335:9)
[35m[XCUITest][39m     at Promise._resolveFromExecutor (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/promise.js:483:18)
[35m[XCUITest][39m     at new Promise (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/promise.js:79:10)
[35m[XCUITest][39m     at exec (/usr/local/lib/node_modules/appium/node_modules/teen_process/lib/exec.js:27:10)
[35m[XCUITest][39m     at getConnectedDevices (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/real-device-management.js:8:26)
[35m[XCUITest][39m     at XCUITestDriver.determineDevice (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:762:31)
[35m[XCUITest][39m     at XCUITestDriver.determineDevice [as start] (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:269:51)
[35m[XCUITest][39m     at runNextTicks (internal/process/task_queues.js:58:5)
[35m[XCUITest][39m     at processImmediate (internal/timers.js:412:9)
[35m[XCUITest][39m     at XCUITestDriver.createSession (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:206:7)
[35m[XCUITest][39m     at AppiumDriver.createSession (/usr/local/lib/node_modules/appium/lib/appium.js:342:35)
[35m[XCUITest][39m     at AppiumDriver.executeCommand (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:319:13)
[35m[XCUITest][39m     at AppiumDriver.executeCommand (/usr/local/lib/node_modules/appium/lib/appium.js:471:14)
[35m[XCUITest][39m     at asyncHandler (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:352:21)
[debug] [35m[BaseDriver][39m Event 'newSessionStarted' logged at 1568395822141 (23:00:22 GMT+0530 (India Standard Time))
[debug] [35m[W3C][39m Encountered internal error running command: Error: spawn ENOTDIR
[debug] [35m[W3C][39m     at ChildProcess.spawn (internal/child_process.js:394:11)
[debug] [35m[W3C][39m     at spawn (child_process.js:540:9)
[debug] [35m[W3C][39m     at /usr/local/lib/node_modules/appium/node_modules/teen_process/lib/exec.js:30:16
[debug] [35m[W3C][39m     at Promise.cancellationExecute [as _execute] (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/debuggability.js:335:9)
[debug] [35m[W3C][39m     at Promise._resolveFromExecutor (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/promise.js:483:18)
[debug] [35m[W3C][39m     at new Promise (/usr/local/lib/node_modules/appium/node_modules/bluebird/js/release/promise.js:79:10)
[debug] [35m[W3C][39m     at exec (/usr/local/lib/node_modules/appium/node_modules/teen_process/lib/exec.js:27:10)
[debug] [35m[W3C][39m     at getConnectedDevices (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/real-device-management.js:8:26)
[debug] [35m[W3C][39m     at XCUITestDriver.determineDevice (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:762:31)
[debug] [35m[W3C][39m     at XCUITestDriver.determineDevice [as start] (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:269:51)
[debug] [35m[W3C][39m     at runNextTicks (internal/process/task_queues.js:58:5)
[debug] [35m[W3C][39m     at processImmediate (internal/timers.js:412:9)
[debug] [35m[W3C][39m     at XCUITestDriver.createSession (/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/lib/driver.js:206:7)
[debug] [35m[W3C][39m     at AppiumDriver.createSession (/usr/local/lib/node_modules/appium/lib/appium.js:342:35)
[debug] [35m[W3C][39m     at AppiumDriver.executeCommand (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/basedriver/driver.js:319:13)
[debug] [35m[W3C][39m     at AppiumDriver.executeCommand (/usr/local/lib/node_modules/appium/lib/appium.js:471:14)
[debug] [35m[W3C][39m     at asyncHandler (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:352:21)
[35m[HTTP][39m [37m<-- POST /wd/hub/session [39m[31m500[39m [90m28 ms - 523[39m
[35m[HTTP][39m [90m[39m
org.openqa.selenium.WebDriverException: It is impossible to create a new session because 'createSession' which takes HttpClient, InputStream and long was not found or it is not accessible
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'Abduls-MacBook-Pro-2.local', ip: '2402:3a80:464:2a24:6980:fa71:954a:5c2b%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.6', java.version: '12'
Driver info: driver.version: IOSDriver
    at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:195)
    at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:209)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:231)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
    at io.appium.java_client.ios.IOSDriver.execute(IOSDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:38)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:84)
    at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:94)
    at io.appium.java_client.ios.IOSDriver.<init>(IOSDriver.java:95)
    at com.utilities.TLDriverFactory.initializeIOSDriver(TLDriverFactory.java:225)
    at com.utilities.TLDriverFactory.setTLDriver(TLDriverFactory.java:134)
    at com.utilities.Tek_Properties.beforeMethodReporting(Tek_Properties.java:257)
    at com.utilities.Mobile_TestBase.initializWebDriver(Mobile_TestBase.java:162)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:523)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:185)
    ... 44 more
Caused by: org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: spawn ENOTDIR
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'Abduls-MacBook-Pro-2.local', ip: '2402:3a80:464:2a24:6980:fa71:954a:5c2b%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.6', java.version: '12'
Driver info: driver.version: IOSDriver
remote stacktrace: UnknownError: An unknown server-side error occurred while processing the command. Original error: spawn ENOTDIR
    at getResponseForW3CError (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/errors.js:826:9)
    at asyncHandler (/usr/local/lib/node_modules/appium/node_modules/appium-base-driver/lib/protocol/protocol.js:447:37)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    ... 49 more
brew cask install phantomjs
node rebuild
AppiumServiceBuilder serviceBuilder = new AppiumServiceBuilder();
serviceBuilder.usingAnyFreePort();
serviceBuilder.usingDriverExecutable(new File("/usr/local/bin/node"));
serviceBuilder.withAppiumJS(new File("/usr/local/bin/appium"));
HashMap<String, String> environment = new HashMap();
environment.put("PATH", "/usr/local/bin:" + System.getenv("PATH"));
serviceBuilder.withEnvironment(environment);        

server.set(AppiumDriverLocalService.buildService(serviceBuilder));
server.get().start();