环境说明

操作系统:Mac OS 10.13.4
设备:iPhone 6 / iOS 10.3.3
Python:3.6.5
Appium:1.8.0

问题

  1. Appium 的文档中有关于 push_file 的接口说明Push File,但是没有说明/path/to/device/foo.bar 具体的例子,想请教有成功在 iOS 真机上执行成功的吗?

  2. 查了一些资料(比较老了)说只在模拟器上实现了。但其实 Appium 使用的 ifuse 是可以在真机上完成 push_file 的操作的,如果没有实现真机,不知道出于什么考虑没有实现这个功能?

  3. 另外,因为我没有对 UI 操作的需求,所以可以不用 Appium。我也用 ios-deploy 和 ifuse 完成了大部分功能。但是没有办法通过命令行退出 APP,请教有什么工具可以吗?

附加信息说明

我的方法:

driver.push_file('image_0.txt', 'test')

对于 path,尝试了如下 3 种写法:

/Documents/xx/image_0.txt
Documents/xx/image_0.txt
image_0.txt

image_0.txt 没有报错,但是没有在沙盒中找到 image_0.txt,其他两者均报错

Updated 5.22

  1. push_file 确认是可以在真机上运行,我怕在 appium-xcuitest-driver 中找到了 pushFileToRealDevice 函数(就是二楼大大贴的代码),调用的是 ifuse commandline。
  2. 写对文件目录以后 appium 可以 push_file,然后 pull_file(pushed_file) 可以读到正确的数据。但是出现的问题是没法在沙盒上找到写入的数据,已提 issue 给 appium,等待答复中~

答复如下:

By default the file is copied into the global media folder. If you want to put the file into the particular application container then the following target format should be used: @bundleId/. Read https://github.com/appium/appium-xcuitest-driver/blob/ed9740894ebf634789feb95e70c90f5b73f144e8/lib/commands/file-movement.js#L97for  more details.

即:默认写入的是 media 文件夹,如果需要读写沙盒,要写成@com.xxx.xx.xxx/Documents/xxx.xx 这种格式,带上@bundleId/,再加上沙盒内的路径。亲测可用。


↙↙↙阅读原文可查看相关链接,并与作者交流