Selenium IDE - WaitFor 在不应该通过的时候通过

Selenium IDE - WaitFors that are passing when they shouldnt

我有一个自动填写表格的小测试用例。

此表单是来自 sagepay 的 iFrame(我知道这可能会导致一些问题)

此表单没有名称,class 或 id(锁定它的意思是有问题的)

下面的代码

<!--Sagepay-->
<tr>
    <td>waitForPageToLoad</td>
    <td></td>
    <td></td>
</tr>
<tr>
    <td>assertElementPresent</td>
    <td>css=img.sageimg</td>
    <td></td>
</tr>
<tr>
    <td>assertElementPresent</td>
    <td>//div[@id='holrightcontainer']/div[2]/div/div/img[2]</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>id=proceedButton</td>
    <td></td>
</tr>
<tr>
    <td>waitForElementPresent</td>
    <td>css=#formCardDetails &gt; div &gt; span.errortext</td>
    <td></td>
</tr>
<tr>
    <td>waitForElementPresent</td>
    <td>css=div.details-inner</td>
    <td></td>
</tr>
<tr>
    <td>waitForElementPresent</td>
    <td>css=iframe</td>
    <td></td>
</tr>
<tr>
    <td>waitForElementPresent</td>
    <td>name=cardnumber</td>
    <td></td>
</tr>
<tr>
    <td>waitForElementPresent</td>
    <td>name=cardpostcode</td>
    <td></td>
</tr>
<tr>
    <td>type</td>
    <td>name=cardnumber</td>
    <td>${cardNumber}</td>
</tr>
<tr>
    <td>type</td>
    <td>name=cardfirstnames</td>
    <td>${cardFirstName}</td>
</tr>
<tr>
    <td>type</td>
    <td>name=cardsurname</td>
    <td>${cardSurname}</td>
</tr>
<tr>
    <td>assertElementPresent</td>
    <td>name=startmonth</td>
    <td></td>
</tr>
<tr>
    <td>select</td>
    <td>name=startmonth</td>
    <td>${cardMonthStart}</td>
</tr>
<tr>
    <td>select</td>
    <td>name=startyear</td>
    <td>${cardYearStart}</td>
</tr>
<tr>
    <td>select</td>
    <td>name=expirymonth</td>
    <td>${cardMonthEnd}</td>
</tr>
<tr>
    <td>select</td>
    <td>name=expiryyear</td>
    <td>${cardYearEnd}</td>
</tr>
<tr>
    <td>type</td>
    <td>name=securitycode</td>
    <td>${cardSecurityCode}</td>
</tr>

棘手的一点来了...它有时会跳过一些表单类型字段,并定期在 3-6 中的任何一个上失败。

我 运行 我的测试速度为 0,但这应该不是问题。

WaitFor 事先都通过让我知道元素在那里,但接下来就是问题了!

有什么建议吗?我试过在网上寻找其他提示,但没有找到任何东西。我能想到的唯一其他选择是使用 url 直接连接到 sagepay 网站,但我不需要。

我在我测试的站点上的许多搜索表单中遇到了同样的问题。我发现对我有用 (YMMV) 的是安装插件 Implicit Wait (https://addons.mozilla.org/en-US/firefox/addon/selenium-ide-implicit-wait/),在一些麻烦的情况下,在同一定位器上有一个 WaitForElementPresent,紧接着是一个 VerifyElementPresent。

当我第一次开始使用 Selenium IDE 时,我用了很多 "pauses",但发现我能够消除这些并提高测试的执行速度和可靠性。

克伦达图

我发现了一个主要问题,以及解决它的方法(尽管我研究过并发现 Implicit Wait 插件很有用)

我遇到的主要问题是等待错误弹出窗口。问题是关于一个点击命令然后重新加载页面,我发现下面是更好的等待。

waitForText | locator | regex:.+?

这让我可以等到错误出现,因为 WaitForVisible 和 WaitForElementPresent 都给了我假通行证