如何在Mac系统中通过Ruby程序化启动Appium服务器?
当然可以实现!在Ruby测试框架里用Before/After钩子来启动和停止Appium服务器完全能满足你的需求,不用一直挂着GUI或者单独开终端跑服务器。结合你的环境(Appium 1.8.0、MacOS 10.13、Node 6.11、Ruby 2.5.1),我给你整理了具体的实现方案:
核心思路
利用appium_lib gem提供的服务器管理API,在测试套件启动前(Before)启动Appium服务器并初始化WebDriver,测试结束后(After)先退出driver再终止服务器。
步骤1:安装依赖
首先确保你安装了对应版本的appium_lib(要和Appium 1.8.0兼容,推荐9.10.0版本):
gem install appium_lib -v 9.10.0
如果还没全局安装指定版本的Appium服务器,执行:
npm install -g appium@1.8.0
步骤2:编写测试代码(以RSpec为例)
下面是完整的示例代码,包含服务器启动、driver初始化、测试逻辑和资源清理:
require 'appium_lib' describe 'iOS App Automation Test Suite' do before(:all) do # 配置Appium服务器启动参数 server_options = { port: 4723, # 自定义端口,避免冲突 log: './appium_test_logs.txt', # 生成日志文件,方便调试 log_level: 'info', # 如果你的Node或Appium不在默认路径,可手动指定 # node_path: '/usr/local/bin/node', # appium_path: '/usr/local/bin/appium' } # 启动Appium服务器 @appium_server = Appium::Server.new(server_options) @appium_server.start # 配置iOS Desired Capabilities,根据你的App调整 desired_caps = { platformName: 'iOS', platformVersion: '11.0', # 对应你的模拟器/设备iOS版本 deviceName: 'iPhone 8', # 设备名称,要和模拟器列表一致 app: '/Users/yourname/Apps/YourTestApp.app', # App的本地路径(.app或.ipa) automationName: 'XCUITest', # iOS必须使用XCUITest驱动 noReset: true # 可选:测试后不重置App状态 } # 初始化并启动WebDriver @driver = Appium::Driver.new({ caps: desired_caps }, true).start_driver end after(:all) do # 先退出WebDriver,再停止服务器 @driver.quit if @driver @appium_server.stop if @appium_server end # 你的测试用例 it 'successfully loads the app and interacts with elements' do # 示例操作:点击登录按钮 # login_btn = @driver.find_element(:accessibility_id, 'LoginButton') # login_btn.click end end
关键注意事项
- 端口冲突:如果4723端口被其他进程占用,修改
port参数为其他值(比如4724),无需修改driver配置,appium_lib会自动关联启动的端口。 - WebDriverAgent配置:Appium 1.8.0依赖WebDriverAgent驱动iOS设备/模拟器,第一次运行可能需要手动打开Xcode,将WebDriverAgent项目(路径一般为
/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent)运行到目标设备/模拟器,完成授权。 - 日志排查:开启日志文件能帮你快速定位服务器启动失败、driver连接异常等问题。
- Cucumber适配:如果你用Cucumber框架,只需要把Before/After逻辑放到
features/support/hooks.rb文件中,写法基本一致。
应急方案
如果代码里的stop方法没能正常终止服务器,可以手动执行以下命令杀掉对应端口的进程:
lsof -ti:4723 | xargs kill -9
内容的提问来源于stack exchange,提问作者Poornima Hegde
相关产品推荐
相关产品推荐

