Appium Appium 运行 python 脚本后提示 ‘java -version’ 有错误 (java 环境变量已排查过没问题)

Eason · 2015年07月06日 · 最后由 walker 回复于 2020年03月06日 · 2492 次阅读

环境
使用 win7 64 位(使用 win7 32 位也提示同样错误)
java 版本是 1.8 的版本(试过 1.7 的版本同样报错)
java 的环境变量我也已经排查过没问题
appium 在线安装和安装.exe 安装都同样报错
试过其他 python 编译器运行也报错

备注:
如果仍有格式问题,我下班后回家在做修改,请勿删帖感谢,这个问题我跟着 7,8 天了百度搜的方法贴边的都试了还是搞不定,有谁遇到同样的问题解决了跪求请分享一下经验!(我用 Markdown Pad2 编译的时候排版不错,怎么贴上了就成这熊样了)

appium 报错如下:
info: Client User-Agent string: Python-urllib/2.7 error: Failed to start an Appium session, err was: Error: 'java -version' failed. Error: spawn ENOENT info: [debug] Using local app from desired caps: C:\ContactManager.apk info: [debug] Creating new appium session 0acb2738-8bce-4fd7-b4b0-ce4d93c09411 info: Starting android appium info: [debug] Getting Java version info: [debug] Cleaning up android objects info: [debug] Cleaning up appium session info: [debug] Error: 'java -version' failed. Error: spawn ENOENT at [object Object]. (C:\Program Files (x86)\Appium\nodemodules\appium\lib\devices\android\android-common.js:1057:17) at exithandler (childprocess.js:633:7) at ChildProcess.errorhandler (childprocess.js:649:5) at ChildProcess.EventEmitter.emit (events.js:95:17) at Process.ChildProcess.handle.onexit (childprocess.js:795:12) info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: 'java -version' failed. Error: spawn ENOENT)","origValue":"'java -version' failed. Error: spawn ENOENT"},"sessionId":null} info: <-- POST /wd/hub/session 500 15.011 ms - 208 info: --> POST /wd/hub/session {"desiredCapabilities":{"deviceName":"NX507J","app":"C:\ContactManager.apk","platformVersion":"4.4.2","appPackage":"com.example.android.contactmanager","platformName":"Android","appActivity":".ContactManager"}} info: Client User-Agent string: Python-urllib/2.7 error: Failed to start an Appium session, err was: Error: 'java -version' failed. Error: spawn ENOENT info: [debug] Using local app from desired caps: C:\ContactManager.apk info: [debug] Creating new appium session 17ec9dac-c420-4b28-a876-56b5c87f0774 info: Starting android appium info: [debug] Getting Java version info: [debug] Cleaning up android objects info: [debug] Cleaning up appium session info: [debug] Error: 'java -version' failed. Error: spawn ENOENT at [object Object]. (C:\Program Files (x86)\Appium\nodemodules\appium\lib\devices\android\android-common.js:1057:17) at exithandler (childprocess.js:633:7) at ChildProcess.errorhandler (childprocess.js:649:5) at ChildProcess.EventEmitter.emit (events.js:95:17) at Process.ChildProcess.handle.onexit (childprocess.js:795:12) info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: 'java -version' failed. Error: spawn ENOENT)","origValue":"'java -version' failed. Error: spawn ENOENT"},"sessionId":null} info: <-- POST /wd/hub/session 500 4.283 ms - 20

Python 脚本如下:

import os
import unittest
from appium import webdriver
from time import sleep
PATH = lambda p: os.path.abspath( os.path.join(os.path.dirname(file), p) )
class ContactsAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}

   desired_caps['platformName'] = 'Android'

   desired_caps['platformVersion'] = '4.4.2'

   desired_caps['deviceName'] = 'NX507J'


    desired_caps['app'] = PATH(
        'C:/ContactManager.apk' 
    )

    desired_caps['appPackage'] = 'com.example.android.contactmanager' 
    desired_caps['appActivity'] = '.ContactManager'
    self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
def tearDown(self):
    self.driver.quit()
def testaddcontacts(self): el = self.driver.findelementbyaccessibilityid("Add Contact")
    el.click()

    textfields = self.driver.find_elements_by_class_name("android.widget.EditText")
    textfields[0].send_keys("Appium User")  

    textfields[2].send_keys("someone@appium.io")

    self.assertEqual('Appium User', textfields[0].text) 

    self.assertEqual('someone@appium.io', textfields[2].text)

    self.driver.find_element_by_accessibility_id("Save").click()

    alert = self.driver.switch_to_alert()

    self.driver.find_element_by_android_uiautomator('new UiSelector().clickable(true)').click()

    self.driver.press_keycode(3)
if name == 'main': 
suite = unittest.TestLoader().loadTestsFromTestCase(ContactsAndroidTests)
unittest.TextTestRunner(verbosity=2).run(suite)

备注
之前有评论让我运行一个他评论写的脚本结果如下:

D:>node D:\test.js
current platform: win32
execute cmd: java -version stdout: C:\ProgramData\Oracle\Java\javapath;D:\androidbag\androidsdk\adt-bundle -windows-x86-20130917\sdk\platform-tools;D:\androidbag\androidsdk\adt-bundle-wi ndows-x86-20130917\sdk\tools;C:\Program Files\TortoiseSVN\bin;C:\Python27;C:\Pyt hon27\Scripts;C:\Users\Administrator\AppData\Roaming\npm\;E:\eclipse\plugins;E:\ java\apache-maven-3.3.3\bin;C:\Program Files (x86)\Appium\node_modules.bin;C:\P rogram Files\nodejs\;C:\Python27\Scripts;D:\jdk\bin;D:\jdk\jre\bin;C:\Users\jins onghao\AppData\Roaming\npm
stderr:
execute cmd: java -version stdout: stderr: java version "1.8.045" Java(TM) SE Runtime Environment (build 1.8.045-b15) Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)

共收到 23 条回复 时间 点赞

头晕,会不会装过几个版本的 java 引起的

#1 楼 @eurekasaber 我也知道排版很丑,但是我编译的时候挺好的,我电脑只有一个 java 版本

Eason #21 · 2015年07月08日 Author

@chenhengjie123 麻烦有时间帮忙看一下,上周你你评论写的 node 脚本我运行了,结果在上面,是 java 版本不对?

#3 楼 @kgjinsonghao 你的排版真心。。。麻烦还是改一下吧,否则很有可能还会被删帖。。。
spawn ENOENT 这个问题我们最近在 linux 上也遇到了,正在找原因和解决方法。找到后我再分享一下。

#4 楼 @chenhengjie123 我们这边找到原因了,环境变量需要以分隔符结尾。linux 是 /
你可以试下在 PATH 和 JAVA_HOME 关于 java 的值末尾加个分隔符?windows 应该是 \

#5 楼 @chenhengjie123 windows 的分隔符貌似是;

#6 楼 @apert 我说的是路径中上下级目录的分隔符,就是 C:\folder\file 里面的 \
; 是环境变量里不同值之间的分隔符。

#7 楼 @chenhengjie123 这样,就看到一个 “值末尾”...下次注意 QWQ

Eason #15 · 2015年07月09日 Author

#7 楼 @chenhengjie123 我刚刚把环境变变量修改后面加 ‘\’,如下
classpath: %JAVA_HOME%\lib\;%JAVA_HOME%\lib\tools.jar\;
JAVA_HOME:C:\Program Files (x86)\Java\jdk1.8.0_11\
path:%JAVA_HOME%\bin\;%JAVA_HOME%\jre\bin\;
但还是不行一运行就提示 ‘java -version’ 有错误,我家里的电脑重新安装 python-client 就没事了,我公司的电脑查看 window 是 64 位的,但是给你我的脚本显示 “current platform: win32”,我换了一个 32 位的 java 版本但还是不行,真是醉了。。。。。

#9 楼 @kgjinsonghao win32 只是说明它是 windows ,不代表它是 32 位。

晚些我在 appium 相关代码里加些 debug log ,然后发给你再试试?
你的 appium 版本多少?

Eason #13 · 2015年07月09日 Author

#10 楼 @chenhengjie123 版本是 v1.4.0

#11 楼 @kgjinsonghao 请问你这个问题解决了吗?我也碰到类似的问题
Appium 错误提示 info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: 'java -version' failed. Error: spawn ENOENT)","origValue":"'java -version' failed. Error: spawn ENOENT"},"sessionId":null}。
我用的是 eclipse,jdk 的版本是 1.8.0_51。系统的环境变量已配,包括 JAVA_HOME 和 PATH。在 cmd 命令中运行 javac,abd 命令都可运行,不知道为啥会报这个错误

Eason #10 · 2015年07月24日 Author

#13 楼 @hexid 我公司的电脑就是试了以上所有的办法都不行,但家里的同样安装已经好用了,唯一的区别就是公司的是 64 位的 win7,家里是 32 位的 win7,我不知道是不是系统的原因,要不然你换个 32 位的试试?(我还是建议在找找原因吧,装系统后很麻烦)

#14 楼 @kgjinsonghao 我在环境变量里面增加了%SystemRoot%\system32;%SystemRoot%;这些就好用了,谢谢~

#15 楼 @hexid 加在 PATH 里面?

Eason #17 · 2015年07月24日 Author

#15 楼 @hexid 我这边也 ok 了,我这个问题找了好久啊,非常感谢

#17 楼 @kgjinsonghao @hexid 你们把%SystemRoot%\system32;%SystemRoot%,只加到环境变量 Path 就行了?

#18 楼 @babyshine 是的,添加后就运行成功了

悲剧 为什么我添加了%SystemRoot%\system32;%SystemRoot% 还是报错

#20 楼 @skyice77 原因应该是你的 jdk、IDE 版本不太一样导致的,都用统一的 32 位应该是可以的。你可以试试。

William 回复

jdk 和 idea 的版本不一致?我的 Java:
System info: host: 'PC201604281043',os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_79'
这样的都不行啊???求解

请问你们有其它方法么

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册