运行Appium RobotFramework时触发TypeError异常求助
解决Appium RobotFramework中的Unicode类型异常问题
我之前踩过这个坑!在运行Appium+RobotFramework测试时碰到过一模一样的错误,给你分享下排查和解决的方法:
问题回顾
你遇到的错误信息:
FAIL : TypeError: exceptions must be old-style classes or derived from BaseException, not unicode
测试代码如下:
*** Settings *** Library AppiumLibrary Test Cases AB Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=8.0.0 deviceName=emulator-5554 appPackage=com.grabqpons.android appActivity=com.grabqpons.android.MainActivity Sleep 2s Click Button xpath=//*[startswith(@id,'slide-skip-btn')] Sleep 2s
从执行日志看,错误是在执行Click Button步骤后触发的,还生成了操作截图,说明元素定位应该是没问题的,问题出在库的内部逻辑上。
根本原因
这个错误90%以上是AppiumLibrary版本与Python版本不兼容导致的:
- 如果你用的是Python 2.x,新版本的AppiumLibrary已经不再适配Python 2的字符串(unicode)处理逻辑,抛出异常时就会触发这个类型错误。
- 少数情况是Appium服务器和客户端库版本不匹配,导致通信时的字符串解析出问题。
解决方案
我当时是这么解决的,你可以按顺序尝试:
1. 降级AppiumLibrary到Python 2兼容版本(适合不想换Python版本的情况)
直接卸载现有版本,安装最后一个支持Python 2的稳定版:
pip uninstall -y robotframework-appiumlibrary pip install robotframework-appiumlibrary==1.4.0
这个版本我亲测能完美解决Python 2下的这个unicode异常问题。
2. 升级到Python 3(推荐长期方案)
如果你的项目允许,直接把Python环境升级到3.6及以上版本,然后安装最新版的AppiumLibrary:
pip install --upgrade robotframework-appiumlibrary
Python 3对字符串的处理更统一,从根源上避免了这类unicode相关的异常,后续也能使用库的新功能。
3. 同步Appium服务器版本
如果上面两步都没用,检查下Appium服务器的版本,确保和客户端库版本匹配。比如升级到最新稳定版:
npm install -g appium@latest
验证方法
改完后重新运行你的测试用例,Click Button步骤应该能正常执行,不会再抛出那个类型错误了。如果还是有问题,可以再检查下xpath定位是否准确,但从截图生成的情况来看,定位应该是没问题的,优先解决版本兼容问题就好。
内容的提问来源于stack exchange,提问作者Madhu Nds
相关产品推荐
相关产品推荐

