【问题标题】:"return" is not returning to calling function“return”没有返回到调用函数
【发布时间】:2019-01-09 04:21:47
【问题描述】:

我想在收件箱中搜索带有主题行的电子邮件,电子邮件需要一些时间才能进入邮箱。如果在迭代中未找到电子邮件,则等待一段时间再搜索电子邮件,当找到电子邮件时返回 true;

public boolean searchForEmail(String MySubject, String linkAddress, String attachment) {
    boolean flag = false;
    List<WebElement> unreademeil = driver.findElements(By.xpath(""));
    for (int i = 0; i < unreademeil.size(); i++) {
        if ((unreademeil.get(i).isDisplayed()) == true) {
            System.out.println(unreademeil.get(i).getText());
            if (unreademeil.get(i).getText().contains(MySubject)) {
                unreademeil.get(i).click();
                flag=true;
                break;
            }
        }
    }
    if (!flag) {
        System.out.println("No mail with Subject ::--:: " + MySubject);
        while (counter < 40 && !flag) {
            sleep(10000);
            counter++;
            cloop();
        }
        SoftAssertor.asserTrue(isElementPresent("//*[contains(@text()='" + MySubject + "')]"),
                "Failed to search a email with Subject line  ::: " + MySubject);
    }
return flag; 
}



public void cloop(){
searchForEmail(SubjectLine, seeDetailsLink, "xpath");
}

上述程序是搜索带有主题行的电子邮件。有时它需要时间收到一封电子邮件。所以程序在 sleep(10000) 之后继续搜索。

return 语句出现问题,“return flag”语句在 while 循环下重定向到“cloop()”,即使 while 循环的条件不满足,即“flag== true”; 由于这个程序进入无限循环。请帮忙

【问题讨论】:

  • 你应该写flag = cloop(); 你需要考虑重构这段代码。你有两个方法互相调用..这是进入无限循环和内存溢出异常的好机会
  • 请考虑 1) 更改 cloop() 以返回布尔值(如 Chetan Ranpariya 建议的那样,2)将拼写更改为 unreadEmails,3)确保您的 counter 在之前(重新)设置正确您进入“while”循环,并且 - 4) 是:请考虑重构。
  • 嗨 Chetan 感谢您的回复,您能否详细说明一下。 ?标志 = cloop(); cloop() 函数只是再次调用 searchForEmail() 函数。因此 cloop 函数的返回类型为 void。
  • 感谢 paulsm4,Cloud 请告诉我重构的结构?

标签: java loops return


【解决方案1】:

重构是一种解决方案:

public boolean searchForEmail(String MySubject, String linkAddress, String attachment) {
        boolean flag = false;
        sleep(200);
        List<WebElement> unreademeil = driver.findElements(By.xpath("//*[@class='bqe']"));
        for (int i = 0; i < unreademeil.size(); i++) {
            if ((unreademeil.get(i).isDisplayed()) == true) {
                System.out.println(unreademeil.get(i).getText());
                if (unreademeil.get(i).getText().contains(MySubject)) {
                    unreademeil.get(i).click();
                    flag=true;
                    break;
                }
            }
        }
        return flag=true
    }

    public boolean isSearchPassed(String MySubject, String linkAddress, String attachment){
        boolean flag= false;
        int count =0;
        while (!searchForEmail( MySubject, linkAddress,  attachment) && (count< 45)) {
            sleep(10000);count++;   
        }
        return flag=true;
    }

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2018-11-20
    • 2021-08-15
    • 2014-04-24
    相关资源
    最近更新 更多