51Testing软件测试论坛

标题: 又是一个关于selenium的难题 [打印本页]

作者: afeng    时间: 2009-8-25 18:04
标题: 又是一个关于selenium的难题
一个td里写了两个textbox,而且name,id等属性都没有,只有type,value,而且在表格里是重复的,这样的textbox怎么定位
有谁知道
作者: park_p    时间: 2009-8-26 10:25
可以试试:
1.  xpath="//xxxx/td[@xxxxxx]/textbox[@value='xxxxx']",如果value值可以有区别的情况下。
2.  xpath="//xxxx/td[@xxxxxx]//textbox[1]"或者[2]用xpath的索引来定位。
3.  执行一个js函数来定位这个textbox,然后在js里设置一个全局变量保存函数返回值,在selenium里是可以直接使用这个js变量来定位元素的(selenium.click(变量名))。执行js函数可以用selenium.getEval()。
4.  如果以上皆否,可参看api找替代办法或用js扩展selenium功能。(js扩展selenium有列子的,可上网搜看,改selenium包里的js和selenium接口及DefaultSelenium类文件即可,还是比较方便的。)
作者: park_p    时间: 2009-8-26 10:30
补充,如果可以用dom=xxxxxxxx一个简单的js脚本可定位元素的话,直接用dom=xxxxx这个也可以定位元素,如果js定位脚本比较复杂的情况下可参看方法3定位元素。

以上所说希望可以解决你遇到的问题。
作者: afeng    时间: 2009-8-26 13:49
我已经定位好了,哈哈,dom=document.forms[].elements[]
不过新问题又来了,有谁知道以下页面里的firstname lastname怎么定位
作者: afeng    时间: 2009-8-26 13:50
<div class="ad2c366ecd-8f41-4e07-99fd-80a9fe593a53-0" style="top:197px;left:184px;width:120px;height:15px;">
    <table width="120px" border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td><table width="100%" border="0" cellpadding="0" cellspacing="0">
                <tr>
                    <td nowrap="true"><span class="fccec4093b-648d-44ab-b623-5ac87dc2db5f-5">firstname&nbsp;lastname</span></td>
                </tr>
            </table></td>
        </tr>
    </table>
</div>
作者: park_p    时间: 2009-8-26 15:36
"firstname lastname" 要定位什么?他们是文字,不是元素啊?!
IE没有文本节点这个概念吧,我记得好像,FF里才有文本节点的概念啊!
他们是“span”元素的innerHTML属性值啊
作者: afeng    时间: 2009-8-27 09:34
可我现在就是要检查ie里的这个文本,innerhtml也可以啊,这是水晶报表里的页面,现在要检查水晶报表,所以要定位到这个文本
作者: park_p    时间: 2009-8-27 10:19
selenium可以执行js脚本,你可以写个js脚本,让它返回span元素的innerhtml属性值,你用selenium执行该脚本并获得返回值,试试看能否得到你想要的文本
FF里可以试试直接获得这个文本节点并通过获得这个节点文本值看看是否满足要求
IE里也可以试试获得span元素的文本值看看
selenium不是有getText()方法么,你也可以试试看它能否获得span元素的Text值
不行还是那句话,用js扩展selenium的功能,用js操作浏览器里的各项你想要的操作或获得的值,selenium获得这个扩展能力后自然就有了你想要的结果了

[ 本帖最后由 park_p 于 2009-8-27 10:21 编辑 ]
作者: afeng    时间: 2009-8-27 21:09
问题是怎么定位到span元素,它什么属性都没有
作者: park_p    时间: 2009-8-28 12:53
可以js方式,也可以xpath方式,上面回帖知道的都说了,你可以先定位父元素,逐级定位xpath不是有搜索路径么
js可以直接写函数也可以,如果js都操作或定位不到的元素,那selenium也基本上就不可能定位操作它了
作者: afeng    时间: 2009-8-28 14:07
js怎么写呀,不太懂
作者: afeng    时间: 2009-8-28 14:07
xpath好像不行,那个div和上面的table也是什么属性都没有
作者: afeng    时间: 2009-8-28 14:13
o,我看过了,你说的js就是dom吧,我试了很多办法都定不到,xpath也不行,哎不想搞了,我要疯了
作者: park_p    时间: 2009-8-28 15:27
自己写javascript函数吧
递归遍历元素,最常用的写法,你可以网上查查看
getElementsByTag() 这个函数一般都会用
元素对象都有children属性的,用length判断有无子元素,然后递归
具体这么写看你的需要,我知道的也就这么多了,你搜搜看吧
作者: afeng    时间: 2009-8-28 15:37
就是dom=document.getelementbytagname()罗,这个我早就用过了,不行的,根本就没有tagname让它去定位,算了,不搞了,搞技术不能这样搞,这样搞也私人的
作者: park_p    时间: 2009-8-31 09:42
firstname lastname 如果只要检查这2个字串,这2个字串不会出现在页面其他位置,你可以直接检查页面上是否有这个字串即可啊!而且js应该是可以定位的,你需要写函数遍历~,不是简单的用dom=就完了的,要用getEval去执行函数,selenium得到一个全局变量来操作,如果简单的一句js就能定位的话,才用dom=的形式。如果这2个字串不会在别处出现,那么你可以用selenium。isTextPresent()去检查页面上是否存在该字串就应该可以达到检查的目的了
作者: afeng    时间: 2009-8-31 17:01
thankyou,不过现在不太想搞了
作者: yanmou626    时间: 2009-9-10 15:09
用xpath可以吧,那个div和上面的table也是什么属性都没有,你再往上找啊,div没有id,你可以用[数字]定位它,而你那个div里面就一个span,往上找到一个带id或name的,下面跟着这个 //div//span[1]试下
作者: afeng    时间: 2009-9-10 16:24
问题是水晶报表里,只有一个form是有id的,其他什么都没有啊,而且用element去遍历也是不行的,我不太清楚用js的fuction怎么去遍历,不过确实没什么好办法
作者: yanmou626    时间: 2009-9-10 17:56
你用auto pager不能抓到它吗?
作者: afeng    时间: 2009-9-14 17:22
什么auto pager
作者: shanxi    时间: 2009-9-14 19:55
auto pager  是Firefox的插件之一
作者: afeng    时间: 2009-9-15 11:47
o,我知道了,没用的呀,它源码里根本就不带那些属性




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2