1

我在使用 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 更改页面的较大部分(不提交页面)时,我遇到了同样的问题。

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

4

2 回答 2

1

您是否让 RC 等待更改发生?在许多 UI 脚本框架中,运行程序不会等待您所做的事情的交互式结果,除非您告诉它这样做。通常使用 iMacros(穷人的 Selenium)我只需要等待自动回发,但即使是 JS 执行也可能比运行 Selenium 的快速计算机愿意等待的时间更长。在尝试访问新可见的控件之前让它休眠半秒钟。

于 2010-09-08T01:45:07.543 回答
0

我建议对具有大量变化元素的页面使用TestPlan 。它有一个智能等待系统,如果一个元素不存在,它会在继续之前等待片刻。这使您可以编写测试,而不必担心元素是静态的还是动态的。

举个简单的例子,你可以在这里输入:

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

如果按钮是动态元素,TestPlan 将等待几秒钟让它出现,然后单击它。但在大多数情况下,您只需将页面用作用户,TestPlan 就会弄清楚要做什么。

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

于 2010-09-12T08:24:41.123 回答