使用Appium上传/下载文件(push文件、pull文件)

本文介绍了一个使用Appium进行Android应用自动化测试的例子。通过设置不同的能力参数,如设备名称、平台版本等,并利用AndroidDriver执行操作,演示了如何安装应用、上传文件等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 package com.lx.class1;
 2 
 3 import java.io.File;
 4 import java.io.IOException;
 5 import java.net.URL;
 6 import java.util.concurrent.TimeUnit;
 7 
 8 import org.apache.commons.codec.binary.Base64;
 9 import org.apache.commons.io.FileUtils;
10 import org.openqa.selenium.remote.DesiredCapabilities;
11 
12 import io.appium.java_client.android.AndroidDriver;
13 
14 public class Demo4 {
15     public static void main(String[] args) throws Exception {
16             AndroidDriver driver;        
17             DesiredCapabilities cap=new DesiredCapabilities();        
18             cap.setCapability("automationName", "Appium");//appium做自动化
19 //            cap.setCapability("app", "C:\\software\\jrtt.apk");//安装apk
20 //            cap.setCapability("browserName", "chrome");//设置HTML5的自动化,打开谷歌浏览器
21             cap.setCapability("deviceName", "S4");//设备名称
22             cap.setCapability("platformName", "Android"); //安卓自动化还是IOS自动化
23             cap.setCapability("platformVersion", "4.4"); //安卓操作系统版本
24             cap.setCapability("udid", "192.168.56.101:5555"); //设备的udid (adb devices 查看到的)
25             cap.setCapability("appPackage","com.cyanogenmod.filemanager");//被测app的包名
26             cap.setCapability("appActivity",".activities.NavigationActivity");//被测app的入口Activity名称
27             cap.setCapability("unicodeKeyboard", "True"); //支持中文输入
28             cap.setCapability("resetKeyboard", "True");   //支持中文输入,必须两条都配置
29             cap.setCapability("noSign", "True");  //不重新签名apk
30             cap.setCapability("newCommandTimeout", "30");  //没有新命令,appium30秒退出
31             
32             driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),cap);//把以上配置传到appium服务端并连接手机
33              //隐式等待
34             driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
35             Thread.sleep(3000);
36             //上传文件
37             File file = new File("C:\\test.txt");
38             String content = null;
39             try {
40                 content = FileUtils.readFileToString(file);
41             } catch (IOException e) {
42                 e.printStackTrace();
43                 }
44             byte[] data = Base64.encodeBase64(content.getBytes());
45                 driver.pushFile("sdcard/test.txt", data);
46             //下载文件举例:
47             byte[] resultDate = driver.pullFile("sdcard/test.txt");
48             System.out.println(new String(Base64.decodeBase64(resultDate)));
49 
50             //下载文件夹:
51             driver.pullFolder("tmp/");  
52             //把android的tmp目录拷贝到临时文件夹
53             System.out.println(driver.pullFolder("tmp/"));
54 
55     }
56 
57 }

 

转载于:https://www.cnblogs.com/sunny-sl/p/6534653.html

逍遥模拟器是一款常用于在PC端运行Android应用的工具,尤其在游戏测试、自动化操作等领域较为常见。在使用过程中,用户可能会遇到与文件权限相关的设置问题,尤其是在自动化测试脚本执行或模拟器与外部工具(如Appium)交互时。 ### 文件权限设置相关问题 1. **模拟文件系统权限不足** 逍遥模拟器在运行时,其内部文件系统通常基于Android系统的权限机制,即每个应用拥有独立的私有目录。当尝试访问或修改应用私有文件时,如果没有root权限或适当的授权,会遇到权限拒绝错误(Permission Denied)。 - 解决方法包括: - 在逍遥模拟器中启用“Root权限”,允许脚本或工具以root身份执行操作。 - 修改文件或目录权限,使用 `chmod` 命令调整访问权限,例如 `chmod 777 /path/to/file`。 - 使用 `adb shell` 命令连接模拟器并手动修改权限设置。 2. **外部工具访问模拟文件受限** 当使用自动化工具如 Appium 或 MonkeyRunner 时,如果脚本尝试读取或写入模拟器中的文件,可能会因权限问题导致失败。 - 可行的解决方案包括: - 在逍遥模拟器的设置中开启“USB调试模式”和“开发者选项”,确保ADB连接正常。 - 使用 `adb push` 和 `adb pull` 命令在本地与模拟器之间传输文件。 - 在脚本中加入等待机制,确保文件操作前模拟器已完全启动并授权访问。 3. **模拟器挂载点权限问题** 逍遥模拟器的文件系统挂载点(如 `/sdcard` 或 `/data`)可能默认为只读模式,导致无法写入新文件或修改现有文件。 - 解决方法为: - 使用 `mount -o remount,rw /mount_point` 命令重新挂载目标路径为可读写模式。 - 检查模拟器版本是否支持自定义挂载点权限设置,必要时升级至最新版本。 4. **多用户环境下的权限冲突** 在多用户或多实例运行逍遥模拟器的情况下,不同用户或实例之间可能会因文件权限设置不当导致访问冲突。 - 建议做法: - 为每个用户或实例分配独立的存储路径,避免共享文件系统。 - 在启动模拟器时指定不同的用户ID或配置文件,确保权限隔离。 ### 示例代码:使用 ADB 修改文件权限 ```bash # 连接到逍遥模拟器 adb devices # 修改指定文件的权限为所有用户可读写 adb shell chmod 666 /sdcard/example.txt # 重新挂载 sdcard 为可读写模式 adb shell mount -o remount,rw /sdcard ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值