特地搞了一个干净的环境来验证这个问题。
1:环境信息:
osx 10.11.3,appium 版本 1.4.13.
python 3.4 , Appium-Python-Client 0.21, selenium 2.52.0 ,
2:代码部分:
3:效果部分:
4:appium 的日志:
日志正常,未报错,通过 charles 抓包看到的,也是 true 正常。
图中看到的是多一位,实际上也会出现 少一位,错位的情况,少一位出现的情况较多。
不知道大家有没有遇到过这种情况。
很多人还在问怎么解决的。好吧,回帖里面都有,那我在整理一下吧。
总结出来是这样的:
输入数字的时候,特别是长数字,如卡号,在 ui 中会自动分隔的,特别会出现这种问题,不清楚是否和账号这类会自动分割成几段有关。目前我们的解决方法是这样的:
1:先用 send_keys , 输入完成后,检查下值对不对,不对的话,再来 1 次。
2:如果 2 次还不成功,并且都是纯数字,就换 dr.press_keycode(7) 这种方法,7 就是 0。
3:用 press_keycode 之前,要 click 一下。具体的 keycode 可以看这里:http://developer.android.com/reference/android/view/KeyEvent.html
还有一种解决方法是,切换到另一个中系统的输入法,不适用 appium 的输入法,也可以解决。
这种情况也不是每次都出现,也是奇怪了,而且日志也不报错。
这种情况遇到过,主要是在银联支付页面,输入身份证时出现,用 appium 的方法输入每次都会输入少,后来我用 adb 一个一个的输入解决的
直接 set_value 吧。。。
#4 楼 @huanzhijin 纸巾试试,我是在 ios 上试的,直接跳过键盘输入
一个数字一个数字的输入试试?Andorid 其实也有这问题 ,我是用 press_keycode 解决的,但是 IOS 不支持这个方法··
不是 appium 的问题。charles 上应该可以看到传值,如果这个也不对,你看看前端代码吧。
是不是输入法弹出了一些自定义的输入法?
感谢大家。
总结出来是这样的:
输入数字的时候,特别会出现这种问题,不清楚是否和账号这类会自动分割成几段有关。
appium 中的 py 的 api 中,还没实现 set_value 的方法,其他语言没去查。
目前我们的解决方法是这样的:
1:先用 send_keys , 输入完成后,检查下值对不对,不对的话,再来 1 次。
2:如果 2 次还不成功,并且都是纯数字,就换 dr.press_keycode(7) 这种方法,7 就是 0。
3:用 press_keycode 之前,要 click 一下。
具体的 keycode 可以看这里:http://developer.android.com/reference/android/view/KeyEvent.html
这是因为这个输入账号的控件会有格式验证,直接用 Appium 自带的 UicodeIME 确实会有问题,这个时候,你可以先把手机输入法切换成别的输入法,如百度输入法之类的,输入完成后,再切换为 Appium 的 UnicodeIME 就可以了。你尝试一下。
#11 楼 @duyanguang 有这种可能性,账号是 4 位 4 位自动分割的。我后面实验下。
#17 楼 @hxhapppppy 没有的。有 set_value 方法,但是使用后会提示还没实现这个方法呢。。。
#18 楼 @among29 https://github.com/appium/python-client/blob/master/appium/webdriver/webelement.py
我查了一下源码,是有 set_text() 这个方法的,你用用看
def set_text(self, keys=''):
"""Sends text to the element. Previous text is removed.
Android only.
:Args:
- keys - the text to be sent to the element.
:Usage:
element.set_text('some text')
"""
data = {
'elementId': self._id,
'value': [keys]
}
self._execute(Command.REPLACE_KEYS, data)
return self
#19 楼 @hxhapppppy 我在 Python 里用 help() 查看 Webdriver 与 driver 没看到你这个方法
@hxhapppppy 看到这个方法。
C:\Python34\Lib\site-packages\appium\webdriver\webelement.py
继承于 C:\Python34\Lib\site-packages\selenium\webdriver\remote\webelement.py
初始化的时候,不知道怎么用了。
def __init__(self, parent, id_, w3c=False):
self._parent = parent
self._id = id_
self._w3c = w3c
按照你说的方法,先获取可用的 imes,然后切换到默认的输入法,试了 2 次成功了,暂未发现有出错。多谢。
#20 楼 @hcc3352779 看 webelement
#23 楼 @hxhapppppy 是我看错了,driver = webdriver.Remote('http://127.0.0.4:4725/wd/hub,desired_caps) 后,driver 是没这个方法的,但是如果用例如 find_element_by_id 定位到某个元素时,这个元素是可以使用 set_text() 方法的'
使用 send_keys() 方法,在安卓中无法输入数字,可以调起键盘,但无法把内容输入到手机,ios 中这个方法就好使
这种账号自动分割的情况,在输入前把 appium 的那个输入法禁用就可以了。
@dudubaby 我也遇到这也的问题, 你后来怎么解决的?
我也遇到这个问题了,有人解决了吗?
@among29 看你的回复,貌似解决了,可以分享一下吗?
可以看我的回复贴,已解决,用 python 写了一个类,可以直接用的。
地址:https://testerhome.com/topics/5389