我在使用Selenium RC测试部分html页面时遇到问题。如果页面中存在一个元素,并且在页面加载时可见,那么没有问题,Selenium RC可以访问它并可以获取它的值或写入它(如果它是输入)等等。
但是如果元素不可见并且仅使用javascript使其可见,则selenium无法使用它。例如,我有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”时,将更改div(使用javascript),以便隐藏“row2”并显示“row2e”。此时,Selenium RC无法管理“row2e”div中的输入。
使用javascript(不提交页面)更改页面的较大部分时遇到同样的问题。
为什么会发生这种情况?
答案 0 :(得分:1)
你是否正在让RC等待改变发生?在许多UI脚本框架中,除非您告诉它,否则跑步者不会等待您所做的事情的交互结果。通常使用iMacros(穷人的Selenium)我只需要等待自动回发,但即使是JS执行也需要比运行Selenium的快速计算机更长的时间等待。在尝试访问新显示的控件之前让它休眠半秒钟。
答案 1 :(得分:0)
我建议将TestPlan用于包含大量更改元素的网页。它有一个智能等待系统,这样如果一个元素不存在,它会在继续之前等待片刻。这使您可以编写测试而无需担心元素是静态还是动态。
有关快速示例,您可以在此输入:
Click //div[@id="row2"]
Click //div[@id="row2e"]//button
如果按钮是动态元素,TestPlan将等待几秒钟才能显示,然后单击它。但在大多数情况下,您只需将该页面用作用户,TestPlan将确定要执行的操作。
顺便说一句,除了HTMLUnit之外,它还可以使用Selenium作为后端。