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

苍勒个苍 · 2014年12月09日 · 最后由 恒温 回复于 2014年12月09日 · 1669 次阅读

我的 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() 方法导出的文件是导出在哪个位置的呢?

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