Selenium cannot focus element 的解决方法

周小丽 · 2017年01月16日 · 最后由 周小丽 回复于 2017年01月18日 · 1861 次阅读

今天测试时,passwd.sendKeys("123456"); 报错 unknown error: cannot focus element。很不理解,因为 passwd.isDisplayed() 是 true 的,那为什么 passwd.sendKeys("123456");执行后并没有实际输入。先贴下前端的源码:

<div class="passw">
   <input type="text" class="logininput" id="passwd1" style="color: rgb(153, 153, 153);" value="请输入密码" name="passwd"> 
   <input type="password" class="logininput" id="passwd2" style="display: none;" value="请输入密码" name="passwd">  
</div>

后来换了一种方式模拟键盘输入就可以了

Actions action = new Actions(driver); 
action.sendKeys(passwd,"123456").perform();

或者

JavascriptExecutor js = (JavascriptExecutor) driver;
 js.executeScript("arguments[0].value=\"123456\"", passwd);

但我现在都没明白为什么 passwd.sendKeys("123456"); 报错?

共收到 10 条回复 时间 点赞

看下 sendKeys 的源代码不就好了

#1 楼 @carl 不明白你说什么

简单方式,你设下断点,你 debug 调试下,就可以知道是否正确获取到该元素

—— 来自 TesterHome 官方 安卓客户端

有这么一种可能是定位到密码输入框后焦点还没来得及到 input 框时就触发了 sendKeys,你可以在 passwd.sendKeys("123456") 之前加个类似 time.sleep(2) 的调试一下看看是不是因为这个原因。个人见解,不一定真是这个情况,可以试一下排除一下可能性。

#2 楼 @xiaoli 就是因为没有获取焦点,获取了不就可以了吗

#4 楼 @CwXwWw 加了 sleep 不行,我试过执行 passwd.sendKeys("123456");时,input 框中没有出现光标,但若执行 passwd.click 时,input 框是出现光标了的,这说明其实 passwd 这元素是存在且获取到了的对吧

如果先写 passwd.click 再执行 sendkey 呢?

@xiaoli,有的时候页面回放就是这么 “任性”,但是我们要做的就是找到一种能保证你所在平台的回放稳定性,比如你这种情况可以尝试用 JQuery 的方式替换下,$("input[id='passwd2']").val("123456")

#7 楼 @wall_e 试验过了不行

#8 楼 @Rey
String js = "$('input[id='passwd2']').val('123456')";
((JavascriptExecutor) driver).executeScript(js);

我看了多遍没少 )

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