如何在Appium中通过代码配置--relaxed-security?(BrowserStack场景)
解决BrowserStack真机上执行ADB命令的问题
关于编程设置--relaxed-security
无法通过JavaScript代码编程设置--relaxed-security选项。BrowserStack托管的Appium实例由平台统一管控,用户无权修改其启动参数(包括这类安全相关的配置项)。
在BrowserStack上执行ADB命令的两种方法
方法1:使用BrowserStack Appium扩展命令(推荐在测试代码中集成)
BrowserStack提供了专属的Appium扩展命令browserstack_exec_adb_command,可以直接在JavaScript测试代码中调用,无需额外API请求。
以下是使用WebdriverIO的代码示例:
// 假设已初始化driver实例 async function runAdbCommand() { const adbOutput = await driver.executeScript('browserstack_exec_adb_command', ['shell', 'getprop ro.build.version.sdk']); console.log('ADB命令执行结果:', adbOutput); } // 调用执行 runAdbCommand();
如果使用原生WD.js库,代码示例如下:
const wd = require('wd'); const driver = wd.promiseChainRemote('hub.browserstack.com', 80, '你的BrowserStack用户名', '你的BrowserStack访问密钥'); async function runAdbCommand() { await driver.init({ // 你的BrowserStack测试配置,如设备型号、APP信息等 }); const output = await driver.execute('browserstack_exec_adb_command', ['shell', 'pm list packages']); console.log(output); await driver.quit(); } runAdbCommand();
方法2:使用BrowserStack REST API
你也可以通过BrowserStack的REST API直接发送ADB命令请求,适合在测试流程外单独执行的场景。
以下是使用JavaScript fetch API的示例:
async function executeAdbViaAPI(sessionId) { const username = '你的BrowserStack用户名'; const accessKey = '你的BrowserStack访问密钥'; const auth = btoa(`${username}:${accessKey}`); const response = await fetch(`https://api.browserstack.com/app-automate/sessions/${sessionId}/adb/execute`, { method: 'POST', headers: { 'Authorization': `Basic ${auth}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ command: 'shell', args: ['dumpsys battery'] }) }); const result = await response.json(); console.log('API执行结果:', result); } // 传入你的测试会话ID执行 executeAdbViaAPI('你的测试会话ID');
注意事项
- 确保你的BrowserStack账号拥有执行ADB命令的权限(多数付费计划支持,免费计划可能受限)。
- 部分敏感ADB命令(如修改系统设置、安装未知来源应用)可能被BrowserStack限制,具体可参考平台权限说明。
内容的提问来源于stack exchange,提问作者MukulCode
相关产品推荐
相关产品推荐

