Appium 【已解决】通过 find_element_by_id 获取了 button 的 id,为何 click 操作没效果?

strayeagle · 2014年09月11日 · 最后由 strayeagle 回复于 2014年09月12日 · 2766 次阅读

(第一次发帖,不知道是否符合要求)

问题描述:
通过 find_element_by_id 获取了 button 的 id,为何 click 操作没效果?

代码片段如下:

name = driver.find_element_by_id('xxx:id/login_username_editor')
name.click()
name.send_keys(r'abc')

password = driver.find_element_by_id('xxx:id/login_password_editor')
password.click()
password.send_keys(r'654321')

company = driver.find_element_by_id('xxx:id/login_domain_editor')
company.click()
company.send_keys(r'edu')


loginButton = driver.find_element_by_id('xxx:id/login_btn')

loginButton.click()

用户名、密码和域信息传值均正常输入了,然后向点击 “登录” 按钮进行登录操作,这里通过 id 获取了登录的 button,为何 click 没反应啊?

共收到 5 条回复 时间 点赞

我补充一下环境:是安卓 4.3,手机 app 程序

#1 楼 @strayeagle 看不出来有什么问题,你可以试试用 classname 看有没有效果

匿名 #3 · 2014年09月11日

index = 2 ?有没有关系?

使用 find_element_by_class_name 也是一样的效果,无法触发点击操作:
button = driver.find_element_by_class_name('android.widget.Button')
driver.implicitly_wait(5)
button.click()
期间暂停了 5 秒也没用

问题定位出来了,在最后一个 send_key() 后,输入法没有隐藏/消失,导致后面获取登录 button 虽然成功,但 click 失败。解决问题的思路也得到群里的大力支持,总的方向是隐藏输入法,我这里使用了 back() 方法(因为 from selenium import webdriver),模拟返回操作,使得输入法自动隐藏,修改后如下:

company = driver.find_element_by_id('xxxxxx:id/login_domain_editor')
company.click()
company.send_keys(r'xxxx')
#模拟返回键,隐藏输入法
driver.back()


loginButton = driver.find_element_by_id('xxxxxxx:id/login_btn')
driver.implicitly_wait(5)
loginButton.click()

也可以使用 hide_keyboard 方法,群里给的建议是 from appium import webdriver,毕竟是测试 app 的,这里我抛下砖,后面我改进,使用 appium 的方法

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