2010-09-08 64 views
1

我在使用Selenium RC测试我的html页面部分时遇到问题。如果一个元素出现在页面中,并且在加载页面时可见,那么Selenium RC可以访问它并可以获取它的值或写入它(如果它是输入的话)等。如何使用Selenium RC测试DHTML?

但是如果该元素不可见并且只能使用javascript显示,则硒不能使用它。例如,我有2个div:

<div id="row2" class="row" onclick="switchTo('row2e');"> 
    <div class="row label">Address</div> 
    <div class="row data">${user.address}</div> 
</div> 
<div id="row2e" class="row-edit"> 
    <form id="address-form" name="address-form" method="post" onsubmit=""> 
    <div class="row label">Address-Must be 5-25 letters or numbers</div> 
    <input type="text" id="address" name="address" value="${user.address}"/> 
    <button>Change address</button> 
    </form> 
</div> 

加载页面时div“row2”可见,“row2e”被隐藏。当我点击“row2”divs将被改变(使用javascript),以便“row2”将被隐藏,并且“row2e”将可见。此时Selenium RC无法管理“row2e”div中的输入。

当使用javascript更改大部分页面时(没有提交页面),我遇到同样的问题。

任何想法,为什么会发生这种情况?

回答

1

您是否在等待RC发生变化?在许多UI脚本框架中,跑步者不会等待你所做的事情的交互式结果,除非你告诉它。通常使用iMacros(穷人的硒)我只需要等待自动回发,但即使JS执行所花费的时间也比Selenium愿意等待的快速计算机运行时间要长。在尝试访问新显示的控件之前,让它睡半秒钟。

0

我建议使用TestPlan用于有很多元素变化的页面。它有一个智能的等待系统,如果一个元素不存在,它会在继续之前等待几分钟。这使您可以编写测试,而无需担心元素是静态的还是动态的。

对于一个简单的例子,你可以在这里键入:

Click //div[@id="row2"] 
Click //div[@id="row2e"]//button 

如果按钮是一个动态元素测试计划将等待几秒钟,它出现,然后单击它。但大多数情况下,您只是将该页面用作用户,TestPlan会找出要执行的操作。

顺便说一句,它可以使用Selenium作为后端,除了HTMLUnit。

相关问题