Appium IOS 真机测试 iphone

本文提供了解决使用Appium Java操作真机时遇到错误的详细步骤,包括启动Appium的方法、真机代码配置以及启动真机上的app的完整流程。通过遵循这些步骤,可以成功启动和操作真实设备上的应用。

使用APPIUM + java 操作真机报下面的错误!
错误详情:
错误:


配置

代码

package ios;

import static org.junit.Assert.*;
import io.appium.java_client.remote.MobileCapabilityType;

import java.io.File;
import java.net.URL;

import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

public class CASE {


    WebDriver driver;

    @Before
    public void setUp() throws Exception {
          // set up appium
//      File appDir = new File(System.getProperty("github/local/AppiumTest/sample-code/apps/TestApp/Products");

      DesiredCapabilities capabilities = new DesiredCapabilities();
     // capabilities.setCapability("device", "iPhone Simulator");
      //capabilities.setCapability(CapabilityType.BROWSER_NAME,"iOS");
      capabilities.setCapability(CapabilityType.VERSION,"7.1");
      capabilities.setCapability(CapabilityType.PLATFORM,"Mac");
      capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
      capabilities.setCapability("deviceName", "pohoto");
      capabilities.setCapability("platformName", "ios");
      capabilities.setCapability(MobileCapabilityType.APP,"com.yiguo.YiGuoApp"); 
      driver = new RemoteWebDriver(new URL("http://0.0.0.0:4723/wd/hub"),capabilities);


}

    @Test
    public void example() throws Exception {

        // find an element by tag name
        WebElement button = driver.findElement(By.tagName("button"));
        button.click();

        // get the value of the element
        WebElement texts = driver.findElement(By.tagName("staticText"));
        assertEquals(texts.getText(), "some expected value");
    }
}


APPium 报错打印日志

Last login: Thu Jan 29 15:20:12 on ttys000
liyudeMac-mini:~ admin$ appium -U 728CD07EF9A84DFEB0C04CC20D02A68D3162CD8E --app com.yiguo.YiGuoApp
info: Welcome to Appium v1.3.4 (REV c8c79a85fbd6870cd6fc3d66d038a115ebe22efe)
info: Appium REST http interface listener started on 0.0.0.0:4723
info: [debug] Non-default server args: {"app":"com.yiguo.YiGuoApp","udid":"728CD07EF9A84DFEB0C04CC20D02A68D3162CD8E"}
info: Console LogLevel: debug
info: --> POST /wd/hub/session {"desiredCapabilities":{"app":"io.appium.TestApp","platformVersion":"7.1","browserName":"","platformName":"iOS","deviceName":"iPhone Simulator"}}
info: Client User-Agent string: Apache-HttpClient/4.3.4 (java 1.5)
info: [debug] App is an iOS bundle, will attempt to run as pre-existing
info: [debug] Creating new appium session 9e25c17f-5e62-4cb6-9835-90c4f196fc4e
info: [debug] Removing any remaining instruments sockets
info: [debug] Cleaned up instruments socket /tmp/instruments_sock
info: [debug] Setting Xcode folder
info: [debug] Setting Xcode version
info: [debug] Setting iOS SDK Version
info: [debug] Getting sdk version from xcrun with a timeout
info: [debug] iOS SDK Version set to 8.1
info: [debug] Not checking whether simulator is available since we're on a real device
info: [debug] Detecting automation tracetemplate
info: [debug] Not auto-detecting udid, running on sim
info: [debug] Could not parse plist file (as binary) at /usr/local/lib/node_modules/appium/io.appium.TestApp/en.lproj/Localizable.strings
info: Will try to parse the plist file as XML
`parseFileSync()` is deprecated. Use `parseStringSync()` instead.
info: [debug] Could not parse plist file (as XML) at /usr/local/lib/node_modules/appium/io.appium.TestApp/en.lproj/Localizable.strings
warn: Could not parse app Localizable.strings; assuming it doesn't exist
info: [debug] Creating instruments
info: On some xcode 6 platforms, instruments-without-delay does not work. If you experience this, you will need to re-run appium with the --native-instruments-lib flag
info: [debug] Preparing uiauto bootstrap
info: [debug] Dynamic bootstrap dir: /Users/admin/Library/Application Support/appium/bootstrap
info: [debug] Dynamic env: {"nodePath":"/usr/local/Cellar/node/0.10.35_2/bin/node","commandProxyClientPath":"/usr/local/lib/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js","instrumentsSock":"/tmp/instruments_sock","interKeyDelay":null,"justLoopInfinitely":false,"autoAcceptAlerts":false,"sendKeyStrategy":"grouped"}
info: [debug] Dynamic bootstrap code: // This file is automatically generated. D...ot manually modify!
info: [debug] Dynamic bootstrap path: /Users/admin/Library/Application Support/appium/bootstrap/bootstrap-c28cdf2cec4fb293.js
info: [debug] Reusing dynamic bootstrap: /Users/admin/Library/Application Support/appium/bootstrap/bootstrap-c28cdf2cec4fb293.js
info: [debug] Getting device string from opts: {"forceIphone":false,"forceIpad":false,"xcodeVersion":"6.1","iOSSDKVersion":"8.1","deviceName":"iPhone Simulator","platformVersion":"7.1"}
info: [debug] fixDevice is on
info: [debug] Fixing device. Changed from: "iPhone Simulator (7.1 Simulator)" to: "iPhone 5s (7.1 Simulator)"
info: [debug] Final device string is: 'iPhone 5s (7.1 Simulator)'
info: [debug] Not setting device type since we're on a real device
info: [debug] Checking whether we need to set app preferences
info: [debug] Not setting iOS and app preferences since we're on a real device
info: [debug] Running ios sim reset flow
info: [debug] Killing the simulator process
info: [debug] Killall iOS Simulator
info: [debug] Killing any other simulator daemons
info: [debug] On a real device; cannot clean device state
info: [debug] Not setting locale because we're using a real device
info: [debug] No iOS / app preferences to set
info: [debug] Starting iOS device log capture via deviceconsole
error: Log capture did not start in a reasonable amount of time
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: Log capture did not start in a reasonable amount of time
info: [debug] Error: Log capture did not start in a reasonable amount of time
    at null._onTimeout (/usr/local/lib/node_modules/appium/lib/devices/ios/ios-log.js:137:10)
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: Log capture did not start in a reasonable amount of time)","origValue":"Log capture did not start in a reasonable amount of time"},"sessionId":null}
info: <-- POST /wd/hub/session 500 10228.916 ms - 234 
info: [debug] Not pre-launching simulator
info: [debug] Creating iDevice object with udid 728CD07EF9A84DFEB0C04CC20D02A68D3162CD8E
info: [debug] Couldn't find ideviceinstaller, trying built-in at /usr/local/lib/node_modules/appium/build/libimobiledevice-macosx/ideviceinstaller
info: [debug] Checking app install status using: /usr/local/lib/node_modules/appium/build/fruitstrap/fruitstrap isInstalled --id 728CD07EF9A84DFEB0C04CC20D02A68D3162CD8E --bundle io.appium.TestApp


解决方案:
1,启动Appium 加上设备UDID 和BUID
2,启动真机代码内的配置内容:

public void setUp() throws Exception {
    // set up appium
        DesiredCapabilities capabilities = new DesiredCapabilities();
        //capabilities.setCapability(CapabilityType.BROWSER_NAME, "ios");
        capabilities.setCapability(CapabilityType.VERSION, "7.1");
        capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
        //capabilities.setCapability("device", "iPhone Simulator");
        //capabilities.setCapability("app", "safai");
        capabilities.setCapability("deviceName", "pohoto");//pohoto
          capabilities.setCapability("platformName", "ios");
        driver = new RemoteWebDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);

3,这样就可以启动我们真机上的app了

### 使用 Appium 进行 iOS 应用的真实设备测试 #### 准备工作 为了能够在真实的 iOS 设备上执行自动化测试,需要准备并配置开发环境。这包括安装必要的依赖项和服务。 对于 iOS 测试的支持,`appium-xcuitest-driver` 利用了 Facebook 提供的 WebDriverAgent (WDA) 方案来实现对 iOS 的控制[^1]。这意味着 WDA 将作为中间件,在被测设备上启动并与之通信,从而允许发送指令给应用程序以及接收响应数据。 另外,还需要 `ios-deploy` 工具以便可以从命令行部署 iPhone 应用程序到实际设备上去,而不是通过 Xcode 来完成这一过程。可以通过 Homebrew 轻松获取该工具: ```bash brew install ios-deploy ideviceinstaller ``` 同时,确保已经正确设置了 Apple 开发者账号,并且拥有有效的证书和描述文件用于签名待测的应用包[^2]。 #### 设置 Capabilities 当一切就绪之后,定义 DesiredCapabilities 对象以告知 Appium Server 关于目标平台的信息。下面是一组典型的 capabilities 示例设置,适用于连接至 Mac 上 USB 接口的真实 iOS 设备上的应用测试: ```java DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("platformName", "iOS"); caps.setCapability("automationName", "XCUITest"); //指定使用的驱动器名称 caps.setCapability("deviceName", "<Your Device Name>"); caps.setCapability("udid", "<Device UDID>"); //唯一标识符 caps.setCapability("bundleId", "<Bundle Identifier of the app>"); caps.setCapability("xcodeOrgId", "<Team ID>"); caps.setCapability("xcodeSigningId", "iPhone Developer"); // 如果是企业级分发,则可能不需要提供 team id 和 signing identity ``` 请注意替换 `<Your Device Name>`、`<Device UDID>` 及其他占位符为具体的值。这些信息可以在 iTunes 或 Finder 中找到(针对较新版本 macOS),也可以借助 `idevicename` 命令查看当前连接的所有设备列表及其对应的 udid。 #### 启动会话与操作 一旦所有的准备工作都已完成,就可以创建一个新的 Appium 会话并将上述 capabilities 发送给服务器端了。成功建立连接后即可开始编写脚本来模拟用户的交互行为,比如点击按钮、输入文本等动作。 ```python from appium import webdriver driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) try: el = driver.find_element_by_accessibility_id("Some Button") el.click() finally: driver.quit() ``` 这段 Python 代码展示了怎样远程调用位于本地主机监听默认端口号的服务实例,并尝试查找具有特定 accessibility identifier 属性的对象来进行简单的触摸事件触发;最后无论是否发生异常都会关闭 session 并释放资源。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值