Selenium - Java在测试脚本中等待加载页面失败

时间:2013-02-07 08:23:04

标签: java unit-testing selenium selenium-rc

我使用JAVA和一些Selenium脚本在Eclipse IDE中创建测试用例。

我的问题是,有时,连续运行测试用例会在selenium.waitForPageToLoad(“30000”)方法中产生错误/失败测试。我做了一个解决方案,该方法将循环,直到满足特定条件,所以我来到这个代码。但这不起作用。

这会发生什么:运行Junit测试> @ Test1,2,3..n>页面无法加载@ Test n>执行下一行代码> @Test n中的测试失败>因为Page没有加载所以无法完成下一个脚本(因为它没有加载,所以页面中缺少必需的元素)。

这是支持的:运行Junit测试> @ Test1,2,3..n>页面无法加载@ Test n>等待页面加载直到满足特定条件(例如,元素X已经存在于页面中)>执行下一行代码>通过@Test n中的测试

我需要一个等待页面加载的解决方案,直到下一行脚本所需的元素出现。

此代码无效。我非常需要你的帮助。感谢

//Wait for Page to Load until Expected Element is not Present   
public void waitForPageToLoadElement(final String isElementPresent){

boolean elementBoolean;
do{
selenium.waitForPageToLoad("30000");
elementBoolean = selenium.isElementPresent(isElementPresent);
if (elementBoolean==false){
try{Thread.sleep(3000);}
catch (Exception e) {
//catch
}}
}
while(elementBoolean==false);
}
//Wait for Page to Load until Expected Text is not Present
public void waitForPageToLoadText(String isTextPresent){

boolean elementBoolean;
do{
selenium.waitForPageToLoad("30000");
elementBoolean = selenium.isTextPresent(isTextPresent);
if (elementBoolean==false){
try{Thread.sleep(3000);}
catch (Exception e) {
//catch
}}
}
while(elementBoolean==false);

}

//Opens url until Expected Element is not Present
public void openUrl(String url){

boolean userNameBoolean, passwordBoolean;
do {
selenium.open(url);
userNameBoolean = selenium.isElementPresent("id=loginForm:username");
passwordBoolean = selenium.isElementPresent("id=loginForm:password");
if (userNameBoolean==false && passwordBoolean==false){
try{Thread.sleep(3000);}
catch (Exception e) {
//catch
}}
}while (userNameBoolean==false && passwordBoolean==false);

}

1 个答案:

答案 0 :(得分:0)

这种逻辑可能对你有帮助

public static void waitforElement(Selenium selenium,String element)
{

        try
        {
            int second;
            for (second = 0; ; second++) 
            {

                if (selenium.isElementPresent(element))
                {   
                    break;
                } 
                if (second >= 20)
                { 
                    break;
                }
                Thread.sleep(1000);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
  }

在使用任何元素执行任何操作之前,只需为该元素调用此方法,以便它等待该元素,直到达到超时(即20秒),如果找不到该元素。

示例

waitforElement(selenium,"id=loginForm:username");
selenium.type("id=loginForm:username","username");
waitforElement(selenium,"id=loginForm:password");
selenium.type("id=loginForm:password","password");
selenium.click("submit");