51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7009|回复: 18
打印 上一主题 下一主题

求救,关于selenium rc自动化测试网页的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2010-2-25 11:19:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的浏览器是 firefox
那个  有2个页面 A 和 B
我通过点击 A 页面上的一个按钮 跳转到了 页面B
然后 通过 xpath 去定位 控件  结果 在B页面上定位到的位置 抓取的控件的Text 都是 页面A 上面的  这个是为什么阿 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2010-2-25 15:25:43 | 只看该作者
首先你确定Xpath定位的控件是唯一存在的么?

  其次我猜测是Selenium的Session ID导致你的操作都停留在页面A

  你可以尝试下使用 selenium.selectWindow("TITLE从POPUP WINDOW中获得")

  望高手指教

[ 本帖最后由 Eric_Lee 于 2010-2-25 15:42 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2010-2-26 09:22:09 | 只看该作者
原帖由 Eric_Lee 于 2010-2-25 15:25 发表
首先你确定Xpath定位的控件是唯一存在的么?

  其次我猜测是Selenium的Session ID导致你的操作都停留在页面A

  你可以尝试下使用 selenium.selectWindow("TITLE从POPUP WINDOW中获得")

  望高手指教


应该是唯一,因为 之前的脚本 我是分别在不同的页面测试过的 我的意思是 我是在 页面 A 和B 分别用 IDE 测试过的脚本,然后 转成 Junit的代码后,整合在一起跑,就出现这样的情况了。 单独跑,没有这样的问题
呃,小的不才, selenium.selectWindow 里面的参数是什么呢 ?   我这个不是很清楚, 难道是填写页面B ?  
谢谢~
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2010-2-26 09:24:06 | 只看该作者
而且,页面跳转的时候 我用 waitforpageload(3000)  一直是失效的  这个和网页是 ajax 有关么 ?
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2010-2-26 09:38:00 | 只看该作者
这个是页面跳转操作,页面B是因为在A页面点击某个链接或按钮时弹出的新页面,这时可以用selectWindow跳到新弹出的页面上操作,如果两个页面不存在这样的关系,或者说两个页面不是在一个selenium session里的话,是不能互操作的。
参数我没用过title的,但api上的说明有这样的用法,应该可以,我想那个title只是的时html里<title>标签里 的页面文档title吧。
还用很多参数和用法,你最好查看selenium网站上api的手册,上面都有比较不错的说明。
还有waitforpageload(3000)操作,如果发生弹出新页面了,因为你没切换窗口,这个操作还是在主页面上进行操作的,所以结果一定是超时的,主页面实际上并没用刷新。如果你切换窗口到新页面,这个操作的结果也是不保证的,因为有时你切的新页面,然后等待加载页面时,也许你切换的同时就加载完毕了,所以你依然得到一个等待超时,所以这样的行为是不保证的。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2010-2-26 09:44:40 | 只看该作者
“这个是页面跳转操作,页面B是因为在A页面点击某个链接或按钮时弹出的新页面,这时可以用selectWindow跳到新弹出的页面上操作,如果两个页面不存在这样的关系,或者说两个页面不是在一个selenium session里的话,是不能互操作的。“

那个,谢谢你的回答,我想补充的,我所描述的页面A和页面B,之间的联系就是 A 上面有个 查看结果的按钮,然后我点击了,然后页面A 就变成 页面B 了
这样的情况 是您说的哪一种 ?
我比较笨,老是问这中低级问题,不好意思哈 。 应该Q1的OKR 还没有完成,要来不及了,我有点急了
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2010-2-26 09:49:49 | 只看该作者
你的意思是在浏览器A页面中点击一个查看链接或按钮,没有打开一个新的浏览器来显示B页面,还是在原来的浏览器中,把A页面全部换成了B页面内容,但是页面没有刷新,是么??
这个是Ajax的吧,如果是这样是不需要selectWindow切换窗口的。可以直接在原页面上操作,只要等待信的ajax请求结果加载完毕吧,不晓得你说的情况,能具体点嘛
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2010-2-26 09:55:08 | 只看该作者
原帖由 park_p 于 2010-2-26 09:49 发表
你的意思是在浏览器A页面中点击一个查看链接或按钮,没有打开一个新的浏览器来显示B页面,还是在原来的浏览器中,把A页面全部换成了B页面内容,但是页面没有刷新,是么??
这个是Ajax的吧,如果是这样是不需要sele ...


对的 ,就是这样 ~
这样举例子吧, 我们看到的论坛, 我点击了一个按钮,就变成了另外一个页面 但是 上面的 51testing 软件测试论坛 之类的 图片阿 什么都没有变化,但是下面的东西发生了变化。
然后,之前 页面上 有一个内容: 可用库存:新查询
变成页面B之后  这个内容变成了: 可用库存:详细信息

那么,我在检查页面B元素的时候,显然需要测试 ”详细信息“这4个字是否存在,结果,给我的结果是  检查出来,那个位置是的内容是”新查询“ , 显然,这个是页面A的东西,而现在我已经处于页面B了 ~
这样描述 可以么 ? 我不敢截图,因为涉及公司的东西,回头老大要找我麻烦了 。。。  这个真是对不起阿
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2010-2-26 09:57:47 | 只看该作者
原帖由 zgdragon1 于 2010-2-26 09:55 发表
selenium 存在的缺陷很多,建议用360WebTester,能够很好地解决你遇到的问题。


已经决定用selenium了 。。 这个没有的选择了 ~
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2010-2-26 09:59:54 | 只看该作者
你的页面里是不是套了iframe或是iframe还嵌套了几层啊?你说的情况iframe也能实现,不一定是ajax,你能看看你的页面html源码嘛
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2010-2-26 10:01:50 | 只看该作者
原帖由 eio402 于 2010-2-26 09:57 发表


已经决定用selenium了 。。 这个没有的选择了 ~


那个是做广告的~
如果360全部功能都免费使用并无偿提供帮助和技术支持一年以上,到是可以试试用看,哈哈哈哈~~
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2010-2-26 10:15:17 | 只看该作者
原帖由 park_p 于 2010-2-26 09:59 发表
你的页面里是不是套了iframe或是iframe还嵌套了几层啊?你说的情况iframe也能实现,不一定是ajax,你能看看你的页面html源码嘛


检查了一下,没有iframe。。  都是一层层的 div 。。。 源码不能帖阿 都是g开头的,傻子都知道是谁的了 呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2010-2-26 10:22:43 | 只看该作者
你这个没有html码,就不知具体是怎么达到这样的效果的了,难道页面内容都是js临时写的?
这个没有环境,真不好查看问题在哪儿了。就算你用了一些js库也是可以操作的啊,ext?
是不是frame套在div里啊,套的比较深?
这个没环境还真不好说了~~~~~~~
爱莫能助啊!
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2010-2-26 11:08:23 | 只看该作者
我经理加了一个 sleep(3000) 居然就认出来了 怎么会这样 想不通!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2010-2-26 12:39:28 | 只看该作者
原帖由 eio402 于 2010-2-26 11:08 发表
我经理加了一个 sleep(3000) 居然就认出来了 怎么会这样 想不通!!!!


那估计是Ajax加载需要一定时间,你的操作应该在等待某个预期的东东发生才能进行,而你使用的waitforpageload(XXXX)是达不到这个效果的

不过建议还是尽量少使用Sleep,会极大的降低测试效率

最后在鄙视那个XXX工具,你们这样赤裸裸的推广只会令人反胃,建议你们直接买个广告机每天轰炸下论坛就OK了,何必手工推了?
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2010-2-26 13:15:03 | 只看该作者
原帖由 Eric_Lee 于 2010-2-26 12:39 发表


那估计是Ajax加载需要一定时间,你的操作应该在等待某个预期的东东发生才能进行,而你使用的waitforpageload(XXXX)是达不到这个效果的

不过建议还是尽量少使用Sleep,会极大的降低测试效率

最后在鄙视那个 ...


同意,这样做法可行只能说在硬等待ajax的响应结果了,这个问题以前就有人提过并回答过的,你可以用循环动态等待一个ajax处理请求后才产生的id或某元素,这样比直接sleep要好。

还有就是有了解ruby和watir的朋友们,有使用经验的朋友们对比下360,看看到底增加了什么特殊的、好的、扩展的功能。如果只是简单整合,那有免费的watir不用干嘛用收费的360。
回复 支持 反对

使用道具 举报

该用户从未签到

17#
 楼主| 发表于 2010-2-26 13:46:39 | 只看该作者
多谢各位  这个该死的网页 是  doubleclick的人搞的 真是麻烦阿 ~
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2010-3-23 13:19:48 | 只看该作者
原帖由 eio402 于 2010-2-25 11:19 发表
使用的浏览器是 firefox
那个  有2个页面 A 和 B
我通过点击 A 页面上的一个按钮 跳转到了 页面B
然后 通过 xpath 去定位 控件  结果 在B页面上定位到的位置 抓取的控件的Text 都是 页面A 上面的  这个是为什么阿 ...


说明你没有跳到第二个页面。selectWindow方法
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2010-3-24 14:23:56 | 只看该作者
在使用selenium的时候,有些链接不仅仅是页面跳转,有可能运行js,或者弹出对话框,对于类似的操作,都需要sleep, 比如一个按钮,触发一个js  “javascript:addBankOpt()” 作用是在页面上新增一个 输入框,那么在触发这个js后,需要等待1-2秒中,否则无法识别新增输入框的 locate.
如果是alert一个对话框,不等待1-2秒,selenium无法捕捉到这个对话框,从而自动化会中断


这个确实影响代码运行效率,能不用则不用,但有时,我个人没有找到更好的办法。只能用sleep

[ 本帖最后由 fflastjay 于 2010-3-24 14:26 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 13:01 , Processed in 0.104502 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表