移动测试基础 Robotframework+AppiumLibrary 过程中遇到的问题及解决办法

jennifer · 2015年06月05日 · 最后由 Jodie 回复于 2019年11月07日 · 2376 次阅读

我在 Robotframework 中用 AppiumLibrary 写了 android 测试,我发现群里面没有人用这个框架,我每次问问题回答的人都不多,
下面是我遇到的一些问题以及找到的解决办法,很初级,但是希望能帮到刚开始接触的同学.

Question1:

定位的时候用 id 定位的而且在虚拟机上是可以跑通的,但是到真机上就报错

这是原来的写法

这是在真机上运行时的写法
就是在写 id 的时候一定要写全路径。

Question2:

备注:我的手机是 meizu 的。
用 appium 在命令行启动后,运行用例时报错:api 版本不能低于 17.
我的版本是 19,报这个错的解决办法:
用以下命令:
appium -a 127.0.0.1 -p 4723 -U 040ABFTWNJWR --no-reset
其中 040ABFTWNJWR 是我的设备名。

Question3:

魅族手机 MX2 连到电脑的时候用命令 adb devices 提示找不到设备。
解决办法:
Windows 7 中文环境
建立或修改 C:\用户<你的用户名>.android\adb_usb.ini 文件,在该文件中添加一行文本,内容是 0x2a45。

Question4:

在可编辑区域用 input text 输入中文时,代码中的中文内容并没有输入到文本框中 (英文可以输入)
解决办法:
在 open application 的时候最后面增加两个参数.

Question5:

调用 hide keyboard 关键词后无法再次调出键盘?
在输入法中去掉 Appium Android Input..的勾选,就可以调出键盘。

Question6:

Robotframework+appiumLibrary 中用 xpath 时总是报错,发现是没有加 android.widget,正确 xpath 写法如下:
xpath=//android.widget.RelativeLayout[2]/android.widget.TextView[contains(@index,0)]
或者:
xpath=//android.widget.RelativeLayout[2]/android.widget.TextView[1]

感谢群里面回答我问题的人,这里有些问题的答案就是群里的人提供的,希望可以帮到大家。

共收到 25 条回复 时间 点赞

不错,不错,以后可以试试

总结不错。关于这些问题,我补充说明一下这些问题出现的原因:

Q1:id 正常都是需要完整地写的,我没在虚拟机上试过使用不带包名的 id 定位元素(appium 1.3.4),但这种写法确实不是太规范。

Q2:这应该是因为你同时连接了不止一个设备(模拟器也算),刚好 adb 默认使用的设备 API 低于 17。所以必须指定设备名称。

Q3:魅族这个坑我也遇到过,根本原因是魅族的设备 id 没有加入到 google 默认的 Vendor ID 中。这个无解,只能自己手动加。不过去魅族论坛一般都能搜到解决方案。以前印象中官方有一个文档详细说明在各个系统怎么添加这个 id 的,但一下子找不到了。。。

Q4:这个问题查一下 appium 官方文档其实也能知道。不支持中文,严格的说是不支持所有非 ascii 字符是 uiautomator 本来就存在的问题,因为它本来就没想过要支持。。。

Q5:这个是因为 unicodeKeyboard 参数实质上就是在启动 session 时加入一个切换默认输入法的命令。resetKeyboard 则是在关闭 session 时把默认输入法切换回来(如果你开 session 前默认输入法就是 unicode 输入法,那它就只能还是切换回 unicode 输入法了)。这个应该和是否使用 hide keyboard 没多大关系。

Q6:xpath 的原理是在 dump 出来的界面元素 xml 文件里面查找元素。这个 xml 文件的全部内容可以通过 log source 方法看到。想确定 xpath 有没有写错的通用方法就是在找元素前 log source 提取 xml 文件内容,然后自己用支持 xpath 搜索的 xml 文件编辑器来试试自己写的 xpath 能否找到对应元素。

PS:麻烦排一下版,现在这样的排版可读性太差了,问题和回答之间没有间隔,问题之间也没间隔。读起来很费力。。。

#2 楼 @chenhengjie123 第一次发帖,不知道啥样,发出来才看到密密麻麻的一堆,以后发帖会弄好看点的

#2 楼 @chenhengjie123 刚仔细看了你的分析,感觉好强悍,多谢,又学到了。

我在 h5 页面输入字符,出现有的字符漏掉了,另外,经常出现 h5 元素识别不出来,只能识别是网页视图,这个怎么破

#5 楼 @app_test 你试过切换 context 到 webview 吗?

我也在用 robotframework 写用例,互相交流啊!lz,我遇到个问题,滑动手机直到获取某个 text,这个你是如何实现的?

#7 楼 @okokhihi 关键词 Scroll 应该可以的,你试试,start_locator 就是开始的 text,end_locator 就是你要获取的 text,但是我用这个的时候有个问题,就是如果 text 不在屏幕中显示,就会报错。你要是找到更好的办法也给我分享一下

#3 楼 @jennifer 第一次发帖,不知道您有没有看发帖时候的排版说明?

#9 楼 @lihuazhang 刚注意到右下角有个 排版说明 ,刚看了一下

@jennifer 我是在用 scroll,不过用了一次无法再划第二次,总之这个方法不好用,再研究下

#6 楼 @chenhengjie123 有什么办法可以判断某个列表刷新完成吗?

#11 楼 @okokhihi scroll 直到指定元素出现用 scrollTo :http://appium.io/slate/en/master/?python#scroll-to

#12 楼 @jennifer 不明白你的问题。
列表是什么列表?tableview 还是 listview 还是什么?
刷新完成的判断标准是什么?

问问题麻烦把所有条件说清楚,像报 bug 那样问问题。

#13 楼 @chenhengjie123 列表是 ListView,刷新完成的标准就是页面中所有的图片以及文字都加载完成。

#14 楼 @jennifer 不清楚你刷新完成前后界面的区别。如果刷新完成前元素不存在,刷新后元素存在,那么获取元素是否存在就好了。
如果元素一直存在,只是值不一样,那就去检查值。

#15 楼 @chenhengjie123 好的,多谢了!

@chenhengjie123 我是在 rf 中间用的,就是 lz 的那个软件,那里面 library 封装的貌似没有 scroll TO 哦

#17 楼 @okokhihi 嗯,是没有的。
自己封装个就好了。

#6 楼 @chenhengjie123 PC 安装了 Robotframework,appium,用来测试手机 app,怎么切换 context 到 webview ,在哪里改配置文件还是改哪里的代码?我不是开发人员,只有一个 app 可以用

总结的好好啊,赞赞,纠结了半天了输入不进去中文,哈哈 谢谢啦

你好,Open Application 传入参数爆红,请问是怎么处理的?

first-on-line 回复

应该是没有导入 AppiumLibrary 库吧

你好,我想问一下,open application 按照官方的问档填写的,然后报错了。
Open Application
http://localhost:4723/wd/hub
platformName=Android
platformVersion=4.2.2
deviceName=192.168.56.101:5555
app=${CURDIR}/demoapp/OrangeDemoApp.apk
appPackage=com.netease.qa.orangedemo
appActivity=MainActivity
报错:

Starting test: A.12
20181226 15:51:17.357 : FAIL : Keyword 'AppiumLibrary.Open Application' expected 1 to 2 arguments, got 7.
Ending test: A.12

提示是参数填多了,然而填写少了又不能打开 app。
希望您能帮我解答。

jennifer 回复

请问你有遇到过 appiumLibrary 和 seleniumLibrary 关键字冲突的问题吗?😫

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册