前端测试 在 Webdriver 中 Element 怎样算不可见?

恒温 · 2013年11月04日 · 最后由 自杀企鹅 回复于 2013年11月09日 · 2206 次阅读

今天,一个澳洲的同事发了个网址给我,https://aelp.smartsparrow.com/v/open/6dfe73e971d745519cb35d7f740cab9d, 他说他的 webdriver 找不到 next button。 让我试试看,我试验了一遍,发现也没法解决,最后用 jquery 跳过。但是百思不得其解。于是向大家求教。

这个 case 的步骤是:

  • 选择 option1
  • 点击蓝色 next
  • 在弹出的框里点击红色的 next
  • 然后再选择 option 3
  • 再点击蓝色 next

第五步就找不到这个蓝色的 next 了。

我找了 selenium 的文档,认为 element 可见的情景有:

  • visibility != hidden
  • display != none (is also checked against every parent element)
  • opacity != 0 (in rc2 this is no longer checked for clicking an element)
  • height and width are both > 0
  • for an input, the attribute type != hidden

我将这些属性用 getCssValue 输出,都显示是可见的。

另外附上: 低音钢琴—久其 的总结:

  • 超出屏幕范围;
  • hidden 类型的元素
  • 放到 td,span 里的 HTML 元素;
  • 页面中存在多个相同标识的对象,但是脚本找到的对象却是已被隐藏的对象,例如点击下一步后,那么之前的页面对象都不可视
  • 由于页面刷新导致脚本已获取的对象不可用,需要重新获取;
  • 页面进程处于挂起状态

这些是以前做自动化测试时碰到的元素不可见或者不可识别的一些原因

低音钢琴—久其 (41744770) 下午 05:34:41
对于 RFT 是这样的,他的 find 方法默认是 false,不查找 td 和 span 里的元素,不过这个参数只是影响查找,不会报元素不可视的异常,刚才是一起给你列出来了,呵呵

低音钢琴—久其 (41744770) 下午 05:37:48
想查的话,可以把每个元素的 rectangle 属性打印出来,可见的属性应该是 x > 2,y > 2 并且 width 和 height 都大于 0,对于 RFT 来说,只要符合这个条件就能操作。但是不知道 webdrive 会不会有区别。

低音钢琴—久其 (41744770) 下午 05:38:12
我刚才列的那些,可以让你的同事参考一下,呵呵,那是我们做自动化测试时,碰到的最多的几种情况。

我都试验了下,还是无解。希望大家一起来讨论下。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

有没这种情况。第一次 get url 的时候 html 的 dom tree 赋给了一个对象,然后 ajax 回来的 html 后没生成新的对象,依旧在老的对象里面遍历,所以没找到?

我用 ruby 的 irb 进行单步调试,1-5 步骤都可操作,我想是因为元素加载没完成导致的

#2 楼 @simple 那我增加等待时间 也没有能等到它加载完毕啊。

#1 楼 @andward 那怎么办呢 ?

sorry i don't have chinese installed on this machine, could it be that it triggers certain js action when option 3 is selected e.g. onchange?
IE webdriver might have focus issue if it's IE.
If it's in an iframe/frame, did it get switched out of that frame at one stage?

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