«возврат» не возвращается к вызывающей функции - PullRequest
0 голосов
/ 09 января 2019

Я хочу найти электронное письмо в папке «Входящие» с темой письма, для того, чтобы электронная почта попала в почтовый ящик, требуется некоторое время. если электронная почта не найдена в итерации, подождите некоторое время и повторите поиск электронной почты, а когда найденная электронная почта вернет 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");
}

Выше Программа предназначена для поиска писем с темой. Иногда требуется время, чтобы получить электронное письмо. Таким образом, программа продолжает поиск после сна (10000).

Проблема возникает в операторе return, оператор return flag перенаправляется на cloop () в цикле while, даже если условие while не выполнено, т.е. «flag == true»; благодаря этой программе идет бесконечный цикл. Пожалуйста, помогите

1 Ответ

0 голосов
/ 10 января 2019

Рефакторинг - это решение:

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;
    }
...