Appium appium 中怎么读取 app 的安装目录?

苍勒个苍 · December 09, 2014 · Last by 恒温 replied at December 09, 2014 · 2317 hits

我的APP有这样一个问题,用户首次启动的时候会显示欢迎页,第二次启动就不会有欢迎页,是否是第一次启动在这个app的安装目录中有个xml文件记录,现在我应该怎样去读取到这个xml文件呢?
我的源代码是:

from appium import webdriver
import time
import os
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
desired_caps = {}
desired_caps['platformName'] = 'android'
desired_caps['browserName'] = ''
desired_caps['platformVersion'] = '4.2.2'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['app'] = PATH('E:\Test\sdk\platform-tools\LoadActivity.apk')
desired_caps['app-package'] = 'com.novunda.tcaapp'
desired_caps['app-activity'] = 'com.novunda.controller.load.WelcomeActivity'
dr = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
dr.find_element_by_class_name('android.widget.RelativeLayout')
dr.pull_file('_data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml')

运行的时候报错:

Traceback (most recent call last):
File "E:/apptest/android ui test.py", line 17, in <module>
dr.pull_file('_data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml')
File "D:\Python27\lib\site-packages\appium\webdriver\webdriver.py", line 432, in pull_file
return self.execute(Command.PULL_FILE, data)['value']
File "D:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 173, in execute
self.error_handler.check_response(response)
File "D:\Python27\lib\site-packages\appium\webdriver\errorhandler.py", line 29, in check_response
raise wde
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. (Original error: Command failed: remote object '_data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml' does not exist)

但是我用adb命令又是能找到这个文件的:

共收到 10 条回复 时间 点赞

dr.pull_file('data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml')
你的/写成了

汗!

#1楼 @weamylady 我之前写的是dr.pull_file('data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml')
执行的时候还是提示找不到这个目录,当时找开发问是什么原因,开发给的意见是 在adb shell里面不加下划线是访问的当前目录,相当于是SD卡,要访问系统路径就要在文件夹前加上下划线,最后我两种都试了都不能找到这个文件........

#2楼 @demon_ke 你试试os.system("adb pull /xxx/xxx/xxx/xxx.xml d:\xxxx\")

/data/data/com.novunda.tcaapp/shared_prefs/insatlldata.xml

代码请用代码块。

代码请贴代码并使用代码块!
日志请贴日志并使用代码块!
提问,指明问题信息,请像一个职业测试一样报问题
支持 Markdown 格式, 粗体删除线单行代码
支持表情,见 Emoji cheat sheet
按“M”键查看更多 帮助。

1、看4楼,linux路径从“/”开始代表根目录
2、java的话pullFile返回的是byte[]对象,需要自己写到文件里。
3、你应该试试清缓存后启动,看看有没有被当做第一次启动。

#4楼 @htdx0101 谢谢你的方法,已经解决问题并且把文件导出来了

#7楼 @demon_ke 亲,代码能用代码块么?

#8楼 @lihuazhang 谢谢管理员提醒。以改正啦。

#4楼 @htdx0101
dr.pull_file()方法导出的文件是导出在哪个位置的呢?

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up