如何提高Selenium脚本的稳健性?

时间:2012-11-08 17:25:21

标签: selenium internet-explorer-8 web element robustness

我正在运行大约30个脚本测试用例(每个测试用例是一个脚本),并且经常出现以下故障:无法识别指定元素,元素不​​存在。

我已经添加了很多不同的方法来等待元素出现。有时当它显然存在时,我猜Selenium很难找到元素的id?

我已经包含了几个

do{
    if(selenium.isElementPresent("id=resultTable_0_0"){
    selenium.click("viewResultForm:refresh_button");
    }
}while (!selenium.isElementPresent("id=resultTable_0_0"));

if(selenium.isElementPresent("id=resultTable_0_0"))
        selenium.isVisible("id=resultTable_0_0");

if(selenium.isElementPresent("id=resultTable_0_0_1_to"))
    selenium.click("resultTable_0_0_1_to");

在做某事之前总是检查元素是否存在。这可能对性能产生巨大影响,但是现在我只希望我的脚本运行无错误,完全可靠。我有这段代码:

do{
    if(selenium.isElementPresent("id=resultTable_0_0")){
    selenium.click("viewResultForm:refresh_button");
    }
}while (!selenium.isElementPresent("id=resultTable_0_0"));

        if(selenium.isElementPresent("id=resultTable_0_0"))
            selenium.isVisible("id=resultTable_0_0");
        if(selenium.isElementPresent("id=viewResultForm:currentDetailViewType"))
            selenium.isVisible("id=viewResultForm:currentDetailViewType");
        if(selenium.isElementPresent("id=viewResultForm:currentSearchDateType"))
            selenium.isVisible("id=viewResultForm:currentSearchDateType");
        if(selenium.isElementPresent("id=viewResultForm:currentLegalEntity"))
            selenium.isVisible("id=viewResultForm:currentLegalEntity");
        if(selenium.isElementPresent("id=viewResultForm:currentRollupBy"))
            selenium.isVisible("id=viewResultForm:currentRollupBy");
        if(selenium.isElementPresent("id=viewResultForm:currentSecurityAltId"))
            selenium.isVisible("id=viewResultForm:currentSecurityAltId");
        if(selenium.isElementPresent("id=viewResultForm:currentSecurityAltIdType"))
            selenium.isVisible("id=viewResultForm:currentSecurityAltIdType");
        if(selenium.isElementPresent("id=viewResultForm:currentDepoViewType"))
            selenium.isVisible("id=viewResultForm:currentDepoViewType");
        if(selenium.isElementPresent("id=viewResultForm:currentBusinessDate"))
            selenium.isVisible("id=viewResultForm:currentBusinessDate");

        System.out.println("Success T13001");
        selenium.stop(); 

即使这样也会出错!!!它不会落到selenium.stop和'假'成功。我可以做些什么来建立我的脚本的健壮性?任何帮助,将不胜感激。

我在IE 8上使用Selenium 2.20.0。

1 个答案:

答案 0 :(得分:1)

根据你的问题,如果找不到定位器id的问题,那么尝试使用其他定位器,如 css和xpath。

当您移动到新页面或打开网址时,请应用 selenium.waitforpagetoload

如果您正在使用基于ajax的应用程序,那么 selenium.waitforcondition 将对您不利。

如果您认为定位器在某些操作后可能需要一些时间才能显示,对这些元素使用正确的等待。