我通过 id 定位到 EditText 元素后,使用 clear() 方法清空内容,再用 send_keys('str'),但在执行测试用例时,普通 EditText 内容是可以清空的正确输入内容,而密码 EditText 会把光标定位到文本第一位,追加输入 send_keys('str') 中的 str
新人初次发帖,描述可能不太清楚,还望各位热心朋友指教
~Android
吗?
可以将 send_keys() 方法封装一下...
加入driver.keyevent(123)
,这个方法会将光标移到最后,然后再执行 clear() 或 send_keys(),方法有很多,多多尝试。
最后请加个头像。
@anikikun
def edittextclear(self,text):
self.driver.keyevent(123)
for i in range(0,len(text)):
self.driver.keyevent(67)
你好,首先非常感谢你的回复。
我按照你说明的方法找到以上方法,然后通过下方的代码使用
passEdit = self.driver.find.......获取控件
passEdit.click()
pwdtext2 = passEdit.get_attribute('text')
self.edittextclear(pwdtext2)
passEdit.send_keys('POMI12')
但仍然出现帖子里描述的问题
Andoid 有 adb shell 命令输入文本的,可以尝试特殊输入替代 sendKeys():
上面清除后,在 CMD 窗口先手动输入 “adb shell input text "pwdtext2" ;如果可以你不妨封装一个 用这种方式封装一下
@happystone 你好,“pwdtext2"是我要清除掉的文本内容,input 不是输入么?
刚才我在 pwdtext2 = passEdit.get_attribute('text') 这行代码下面打印 pwdtext2 的 type 和 len,输出类型为 Unicode,长度为 0,我想问一下是通过 element.get_attribute('text') 获取编辑框的文本内容对吧?
get_attribute 是获取某个属性的值,这里获取的应该是编辑框中的文本内容。刚明白你的意思,我之前也碰到过类似情况,我在 sendkeys() 之前先做个 Click() 操作点击一下文本框,就解决了。sendkeys 在输入之前自己会先 Clear 一下,所以 Clear 其实也不用加
@happystone 按照你的方法试了也是不行,光标总会定位到文本前面
info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
info: [debug] [BOOTSTRAP] [debug] Got command action: setText
info: [debug] [BOOTSTRAP] [debug] Using element passed in.
info: [debug] [BOOTSTRAP] [debug] Attempting to clear using UiObject.clearText().
info: [debug] [BOOTSTRAP] [debug] Text remains after clearing, but it appears to be hint text.
info: [debug] [BOOTSTRAP] [debug] Text not cleared. Assuming remainder is hint text.
info: [debug] [BOOTSTRAP] [debug] Sending plain text to element: 15.........(纯数字)
info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":true,"status":0}
以上是普通编辑框 clear() 后再 send_keys(‘15*********’) appium 端输出的信息,这个可以成功清除文本且正确输入指定的文本
info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
info: [debug] [BOOTSTRAP] [debug] Got command action: setText
info: [debug] [BOOTSTRAP] [debug] Using element passed in.
info: [debug] [BOOTSTRAP] [debug] Attempting to clear using UiObject.clearText().
info: [debug] [BOOTSTRAP] [debug] Sending plain text to element: ‘text_replace’
info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":true,"status":0}
以上是密码编辑框 clear() 后再 send_keys(‘text_replace’) appium 端输出的信息,相比于普通编辑框输出的信息缺少了:
info: [debug] [BOOTSTRAP] [debug] Text remains after clearing, but it appears to be hint text.
info: [debug] [BOOTSTRAP] [debug] Text not cleared. Assuming remainder is hint text.
感觉出错应该是 hint text 的原因,但没能明白这个导致失败的原因也不知解决方法,还望指教
在此先感谢你能抽空回复我的疑问
补充一下调试设备信息 机型为红米 1 Android 版本为 4.4.2
Text remains after clearing, but it appears to be hint text. //文本清除后有残留,但是显示的是隐藏文本
Text not cleared. Assuming remainder is hint text. //文本未被清除,假定其确实为隐藏文本
根据你的第一条回复,表示稍微能理解你的意思,但希望能指导下出现的原因
根据你的第二条回复,第一个编辑框弹出的是数字键盘,第二个编辑框弹出的普通的 26 字母那种键盘,且键盘非内部开发键盘
具体原因你可以咨询一下开发,我也不是太清楚。
你有尝试过用 keyEvent() 去输入密码吗?实在不行就点击对应键盘的坐标输入。
@happystone keyEvent() 是可以的,但获取不了长度还是不太方便。
非常感谢你的热心回答
@anikikun 不好意思现在在回帖,这个方法之前已经是不行的,现在因为工作原因暂时没时间去研究解决方法,之后有遇到类似问题再研究下