chuodl 发表于 2013-12-15 22:09:26

元素不可见

请问一下元素不可见的情况怎么处理呀 我在操作一个元素的时候报了Element is not currently visible and so may not be interacted with
Command duration or timeout: 12 milliseconds 的错误

我用的WebElement e= driver.findElement(By.xpath("//table/tbody/tr/td/input"));

if(!(e.isDisplayed())){System.out.println("Element is not displayed!"); };
            来判断 可以打出Element is not displayed! 应该是说明这个元素是不可见的了吧 ?之后就不知道怎么处理了 上网上也没查到 试过用css来取元素也是一样的效果

测试的网页就是http://tousu.baidu.com/zhidao/add#2 是一个百度的网页用账户登录就可以了 我是想点击下面的提交,上面的账号 描述等都已经填写了

zhulifu 发表于 2013-12-16 11:02:26

你把xpath换成"//table/tbody/tr/td/input[@class='btn']" 试下.

joykao 发表于 2013-12-16 12:20:14

不是我觉得首先要确保你的xpath能找到元素吧。。。能不用xpath就不用吧。。贴出属性来看看

chuodl 发表于 2013-12-16 22:15:59

回复 2# zhulifu

可以了 谢谢呀 哈问下为什么你这么定位就没问题了呢 我开始用的 css定位driver.findElement(By.cssSelector("input")); 不可以 后来看网上有的说有时候用@属性就出现元素不可见的问题 所以就写了一个没有@的xpath 就是一楼写的那个 还是不可以,但是我看你教我的方法也有@属性呀 是我的定位元素有问题吗?还是别的什么问题

chuodl 发表于 2013-12-16 22:24:10

回复 3# joykao 属性见图片 我看是用的 driver.findElement(By.cssSelector("input")) 定位结果Element is not currently visible的问题,后来看网上有人说 有时候用@属性会出现这种问题 就试着写了一个 xpath的 就是driver.findElement(By.xpath("//table/tbody/tr/td/input"))这个也不行 不过用楼上教的那个方法就可以了 这是什么原因呀 是我的元素定位有问题还是什么别的原因呀 不过我用isDisplayed方法判断时候 可以取到元素 就是 判断是不可见的 用 if(!(e.isDisplayed())){System.out.println("Element is not displayed!"); };
            来判断 可以打出Element is not displayed! 不知道怎么回事 唉 还是自己练的少 有点问题就可难住了

joykao 发表于 2013-12-17 11:07:01

回复 5# chuodl


这种很明显的元素就不要用xpath去定位了。。。用cssSelector准确而且效率高。。。

css的值可以组合起来的。。。当然在你用css值的时候最好先去验证下你写的值是不是取到了你想要的元素。。个人经验,经常有一些隐藏的元素属性几乎和显示的元素没什么大的区别。。就比如你input在页面上用firefind可能会找到多个元素。。。当然属性值可以搭配使用的。。。只要在后面接上[..........]自己好好去多研究下如果locate 元素吧。。把各个方法都去熟悉下。。。
ID,name,cssSelector,xpath, linkText, tagName等等。。。。

zhulifu 发表于 2013-12-17 12:04:41

回复 4# chuodl


   你写的xpath能找到3个元素...肯定不行的
页: [1]
查看完整版本: 元素不可见