iOS端使用Appium启动Safari后闪退,报ECONNREFUSED错误求助
解决Appium+Capybara启动Safari后跳转0.0.0.0并报错ECONNREFUSED的问题
我之前在Appium 1.x搭配Xcode 9.x的环境里也踩过类似的WebView连接坑,结合你的报错信息和环境配置,给你几个针对性的排查和解决方向:
1. 先确认Web检查器的授权与开启状态
报错里的connect ECONNREFUSED ::1:27753说明Appium连不上Safari的WebInspector端口(27753是WebInspector的动态端口),先检查基础配置:
- 打开iOS模拟器的设置 > Safari > 高级,确保「Web检查器」开关是打开的;
- 打开Xcode,进入Xcode > Preferences > Locations,确认「Command Line Tools」选择的是Xcode 9.3(避免工具版本不匹配);
- 完全关闭Safari和模拟器,再重启Appium服务,有时候残留进程会占用端口导致连接失败。
2. 修正Capybara的Appium配置参数
你的spec_helper.rb大概率缺少关键的自动化配置项,Appium 1.7+对iOS 10+必须使用XCUITest驱动,而且需要明确指定WebView相关参数。这里给你一个修正后的配置示例:
require 'bundler' Bundler.require require 'capybara/dsl' require 'appium_capybara' Capybara.register_driver(:appium) do |app| capabilities = { platformName: 'iOS', platformVersion: '11.3', # Xcode9.3默认支持的iOS版本是11.3,要和你的模拟器版本匹配 deviceName: 'iPhone 8', # 替换成你实际使用的模拟器名称 browserName: 'Safari', automationName: 'XCUITest', # 必须指定,Appium1.7+不再支持UIAutomation autoWebview: true, # 自动切换到WebView上下文,避免手动切换的麻烦 newCommandTimeout: 30, # 延长超时时间,给WebInspector足够的连接时间 showXcodeLog: true # 可选,开启后可以查看Xcode的日志,方便排查问题 } Appium::Capybara::Driver.new(app, caps: capabilities) end Capybara.default_driver = :appium include Capybara::DSL
重点说明:
automationName: 'XCUITest'是核心,Appium 1.7+对iOS 10及以上版本只能用XCUITest驱动,不设置的话会默认用废弃的UIAutomation,导致WebView连接失败;autoWebview: true会自动帮你切换到Safari的WebView上下文,不用手动调用switch_to.context;platformVersion要和你模拟器的iOS版本完全匹配,Xcode9.3对应的iOS版本是11.3,别写错。
3. 强制Appium使用IPv4连接
报错里的::1是IPv6的本地回环地址,有时候Appium会优先用IPv6连接WebInspector,但Safari的WebInspector可能只监听IPv4端口。可以尝试启动Appium时强制绑定IPv4:
appium --address 0.0.0.0
另外,也可以用lsof命令检查27753端口是否被其他进程占用:
lsof -i :27753
如果有结果,用kill -9 <进程ID>杀掉对应的进程,再重启测试。
4. 兼容性调整(备选方案)
Appium 1.7.2和Xcode9.3之间存在一些小的兼容性bug,如果前面的方法都没用,可以尝试:
- 升级Appium到1.8.2(这个版本和Xcode9.3兼容性较好);
- 或者降级到Appium 1.7.1,部分用户反馈这个版本解决了WebInspector连接的问题。
最后提醒一下:每次启动测试前,一定要关闭所有Safari窗口和模拟器,避免残留的WebInspector进程干扰新的连接。
内容的提问来源于stack exchange,提问作者Matthew Jaeger
相关产品推荐
相关产品推荐

