使用RobotFramework+Appium启动应用触发ValueError超时错误求助
问题描述
使用RobotFramework调用Appium启动应用时,出现如下错误:
ValueError: Timeout value connect was <object object at 0x106cc5b50>, but it must be an int, float or None.
仅使用了RobotFramework AppiumLibrary中的Open Application关键字,此前从未出现该问题。
环境信息
Python版本
Python 3.9.12
Pip包列表
Package Version ------------------------------ -------- Appium-Python-Client 1.3.0 astor 0.8.1 async-generator 1.10 attrs 23.1.0 beautifulsoup4 4.9.1 certifi 2023.5.7 chardet 3.0.4 charset-normalizer 2.0.12 decorator 5.1.1 docutils 0.18.1 exceptiongroup 1.1.1 h11 0.14.0 idna 2.10 kitchen 1.2.6 lxml 4.5.2 outcome 1.2.0 pip 22.0.4 PySocks 1.7.1 PyYAML 6.0 requests 2.30.0 robotframework 5.0 robotframework-appiumlibrary 1.6.3 robotframework-pabot 2.5.4 robotframework-pythonlibcore 4.1.2 robotframework-requests 0.9.2 robotframework-seleniumlibrary 6.1.0 robotframework-stacktrace 0.4.1 selenium 3.141.0 setuptools 60.10.0 six 1.16.0 sniffio 1.3.0 sortedcontainers 2.4.0 soupsieve 2.0.1 strutil 0.2.1 tk 0.1.0 trio 0.22.0 trio-websocket 0.10.2 urllib3 2.0.2 wheel 0.37.1 wsproto 1.2.0
测试用例代码
*** Settings *** # Default Library Library AppiumLibrary Library BuiltIn *** Variables *** ${path} /Users/jj/Downloads/sample.apk *** Test Cases *** Install the app Open Application http://localhost:4723/wd/hub alias=Myapp1 platformName=iOS platformVersion=7.0 deviceName='iPhone Simulator' app=${path}
用户疑问:检查日志发现Appium并未运行,这可能是问题所在吗?
问题分析与解决
1. Appium未运行是核心诱因
Appium服务未启动时,AppiumLibrary尝试连接http://localhost:4723/wd/hub会失败,结合你当前的库版本组合,这种连接失败被转化为了超时值类型错误,而非直接提示连接失败。所以先启动Appium服务是必要步骤。
2. 版本兼容性冲突是根本原因
从包列表看,Appium-Python-Client 1.3.0版本过旧,和urllib3 2.0.2存在兼容性问题:urllib3 2.x对超时参数的类型校验更严格,旧版本的Appium-Python-Client传递了不符合要求的超时对象,直接触发了该ValueError。
修复步骤
- 启动Appium服务:打开命令行执行
appium命令,确保服务在localhost:4723正常运行后再执行测试用例。 - 调整包版本:
- 降级urllib3到1.x兼容版本:
pip install urllib3==1.26.15 - 升级Appium-Python-Client到适配版本:
pip install Appium-Python-Client==2.11.1
- 降级urllib3到1.x兼容版本:
- 修正测试用例参数:测试用例中同时指定
platformName=iOS和app=${path}(APK是Android应用包),参数矛盾,需根据实际测试平台调整:- 若测试iOS,将
app改为.ipa或.app文件路径; - 若测试Android,将
platformName改为Android,并匹配对应平台的其他参数。
- 若测试iOS,将
内容的提问来源于stack exchange,提问作者user2399158
相关产品推荐
相关产品推荐

