Selenium并不总是抓取正确的动态生成的链接

时间:2012-08-30 19:17:52

标签: java selenium xpath selenium-webdriver selenium-rc

我目前的环境是使用Selenium RC(使用Selinium服务器2)的Firefox 3.6.28。最终,事情会被WebDriver迁移到Selenium 2.0,但我现在需要一些测试才能在Selenium RC中工作。

我有一个动态生成的表,每行内都有一个“a href”链接。我想点击某一行上的链接。但是,问题是Selenium有时会正确地选择它(测试通过),有时我会收到一个错误,说该元素不存在(测试失败):

[testng] com.thoughtworks.selenium.SeleniumException: ERROR: Element xpath=(//table[@class='results'])/tbody/tr[position()=5]/td/a not found

似乎没有任何模式可以检测/看不到元素。

为了看看当我收到错误时浏览器是否真正看到了该元素,我有这样的事情:



    ...
    try{
        wrapWaitForPageToLoad("10000");
        wrapWaitForPageToLoad("10000");
        clickAndWait(xpath);
    }catch(Exception e) { //loop indefinitely here }

事实证明,浏览器会看到元素。我测试了Selenium IDE中的xpath。 xpath显然是正确的,因为我可以在Selenium IDE中使用该xpath执行click命令。

如果某些元素没有完全加载,我在一些值为10000的wrapWaitForPageToLoad()中添加了。但是,这似乎对问题没有影响。在任何情况下,所有元素似乎都完全加载,因为上述测试建议...也增加时间没有帮助。

firebug给我的部分html:

<table class="results" cellspacing="0" cellpadding="1" border="0" style="cursor: default;">
<tbody>
<tr id="titles">
<tr class="listdata1" style="">
<tr class="listdata2" style="">
<tr class="listdata3" style="">
<tr class="listdata4" style="">
    <td align="center">...</td>
    <td>
        <a href="/click/this/link">Cake Pictures</a>
    </td>

可能导致这个奇怪错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

您需要修改

中的xpath
//table[@class='results'])/tbody/tr[position()=5]/td/a

//table[@class='results']/tbody/tr[5]/td[2]/a