【UI自动化测试】2_IOS自动化测试 _使用模拟器

文章目录

  • [一、运行 iOS 程序到模拟器](#一、运行 iOS 程序到模拟器)
  • [二、查看 iOS 元素特征](#二、查看 iOS 元素特征)
  • 三、编写和运行自动化脚本
    • [3.1 前置代码](#3.1 前置代码)
    • [3.2 需求](#3.2 需求)
    • [3.3 需求-示例](#3.3 需求-示例)
  • 四、注意点

一、运行 iOS 程序到模拟器

1、使用 Xcode 打开要运行的程序。( Xcode 打开要测试的项目)

2、选择将要运行的 程序 和 模拟器设备。( HMiOSTest 和 iphone8)

3、快捷键 command + r 运行。(或者点击播放按钮: ▶) 在Xcode界面运行

实际上这个ios模拟器属于Xcode的一部分。

二、查看 iOS 元素特征

1、打开 appium

2、启动 appium

3、左上角菜单栏选择 appium --->new session window...

4、填写对应的启动参数,并启动。

三、编写和运行自动化脚本

3.1 前置代码

python 复制代码
from appium import webdriver

desired_caps = dict()
desired_caps['platformName'] = 'iOS'       
desired_caps['platformVersion'] = '12.1'     # ios系统版本
desired_caps['deviceName'] = 'iPhone 8'      # 这里面不能随便写,安卓可以 
desired_caps['app'] = 'com.itcast.HMiOSTest' # 相当于安卓app的包名

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

3.2 需求

  1. 点击按钮 进入列表

  2. 获取所有列表的文字内容并输入

  3. 滑动一次

  4. 点击 20

  5. 清空文本框内容

  6. 在文本框中输入 "hello"

  7. 单击返回按钮

3.3 需求-示例

python 复制代码
import time

from appium import webdriver

desired_caps = dict()
desired_caps['platformName'] = 'iOS'
desired_caps['platformVersion'] = '12.1.2'
desired_caps['deviceName'] = 'iPhone 6s Plus'
desired_caps['app'] = 'com.itcast.HMiOSTest'

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 1、点击 进入列表
driver.find_element_by_id("进入列表").click()

# 2、在控制台输出所有的文字内容
"""
# 在 android 中只会查找到屏幕上所显示的控件
# 在 iOS 中都会找到控件,但是如果进行操作的时候,也同样需要展示在屏幕上:比如 4、点击20这个元素
"""
text_views = driver.find_elements_by_class_name("XCUIElementTypeStaticText")
for text_view in text_views:
    print(text_view.text)

# 3、滑动一次
# driver.swipe(100, 2000, 100, 1000)  # 这个方法有的情况不好用,时灵时不灵,用下面的方法
driver.execute_script("mobile: swipe", {"direction": "up"})

# 4、点击 20
driver.find_element_by_xpath("//*[@name='20']").click()

# 5、清空文本框
text_field = driver.find_element_by_class_name("XCUIElementTypeTextField")
text_field.clear()

# 6、输入 hello
text_field.send_keys("hello!!!")

# 7、点击 返回back
driver.find_element_by_xpath("//*[@name='Back']").click()


time.sleep(5)

driver.quit()

四、注意点

1、官方已经明确表示 swipe 等 API 在模拟器 7.x - 8.x 中无法使用,真机并未提及。

2、在IOS模拟器中可以连接电脑的键盘进行输入,但是如果连接,appium 将无法工作,所以需要消选 Connect Hardware Keyboard

方法:选中模拟器---> 左上角 Hardware---> Keyboard --->消选 Connect Hardware Keyboard

相关推荐
传奇开心果编程13 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程17 小时前
【现代声明式UI学与练】第4课 列表渲染与 key——如何高效渲染列表、key 的作用、列表重排时的状态保持
学习·flutter·react native·ui·swiftui·android jetpack
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer
茶底世界之下19 小时前
视频预览切换为何会闪回旧帧:用 generation + mode identity 管住异步回调
ios·swift
老李IT笔记20 小时前
从备份恢复会把管理状态带回来吗:iOS 27 之后答案变了|MDM.Plus
ios·智能手机
谢亮_vipxieliang21 小时前
Go 接口设计原则核心知识点
开发语言·ios·golang
Hello_Pyhx1 天前
iPhoneMirror:把 iPhone 接入 Windows,先分清投屏与反控
windows·ios·iphone
茶底世界之下1 天前
类型擦除之后,Metal 滤镜组合为什么不能只执行一个 Filter?
ios·swift
传奇开心果编程1 天前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
传奇开心果编程1 天前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack