[小菜随笔]新手使用appium+python进行自动化测试过程中webdriver.Remote报错的错误分析方法(带实例)
很多人刚开始使用python+appium去执行APP自动化的时候经常会遇到webdriver.Remote,报错位置指向都是driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub/',desired_caps)这行代码
很容易误导别人错认为是自己的webdriver发生了错误,此时应该如何排查这个问题,以下将举例说明
当发生以下错误的时候
Traceback (most recent call last):
File "E:\Workplace\app test\login_test.py", line 22, in <module>
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub/',desired_caps)
File "E:\Python27\lib\site-packages\appium\webdriver\webdriver.py", line 36, in __init__
super(WebDriver, self).__init__(command_executor, desired_capabilities, browser_profile, proxy, keep_alive)
查看的错误信息实际并非以上的信息,很有可能是程序最后报错的信息,所以我们首要的任务需要对程序最后报错的信息进行排查
案例一:JAVA环境没有正常安装布置(案例转自网络)
最后的提示:
在最后的提示上已经明确的指出实际出错的错误,检查自己JAVA程序和环境变量的配置
可以在cmd命令上进行JAVA -VERSION检测环境是否正常(下图就是正常的返回)
案例二:APK的路径路径设置错误
最后的错误提示:
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: A new session could not be created. (Original error: Bad app: C:\ContactManager.apk. App paths need to be absolute, or relative to the appium server install dir, or a URL to compressed file, or a special app name. cause: Error: Error locating the app: ENOENT, stat 'C:\ContactManager.apk')
简单翻译为:原来的错误:错误的应用:C:\ contactmanager.apk。应用程序的路径必须是绝对的,或相对于Appium服务器安装目录,或一个URL压缩文件,或一个特殊的应用程序名称。原因:错误:错误定位的应用
解决方法:1、查看你的APK的路径是否正确,最好使用绝对路径
2、假若找不到解决方法且安装功能非必要用例,可以使用adb shell install 应用包(包含路径) 将APK安装,去除安装的设置代码
大部分这种问题的错误居多都报错在最后,英文水平较差的兄弟可以使用翻译软件翻译大部分基本语言去理解,由于本人水平也有限,只是提供给大家找问题的一个方法,如有更好的方法可以在评论区留言讨论
以下是网络搜索结果的解决方法,为了方便读者参考,我也一并转载过来了
转载地址:http://blog.csdn.net/rziqq/article/details/51161543
先检查Appium server是否启动:
address 127.0.0.1 port 4723 将会用于webdriver.remote构造函数的第一个参数,
可以在config.py中如下配置:
cf_appium_hub = 'http://127.0.0.1:4723/wd/hub'
BaseActions.app_driver = webdriver.Remote( command_executor=config.cf_appium_hub, desired_capabilities={ 'deviceName': config.cf_device_name, 'platformName': config.cf_platform_name, 'platformVersion': config.cf_platform_version, 'appPackage': app_package, 'appActivity': app_activity })