为什么我的if语句在第二个循环中寻找password8and256CharValidationError时出现RunTimeException

问题描述 投票:0回答:1

我正在尝试让我的自动化尝试每个将显示密码要求的密码。在循环的第一次迭代之后,当我希望它跳过该 if 并移至下一个 else if 时,它会陷入寻找password8And256CharValidationError 元素的困境。

这是例外:

java.lang.RuntimeException:org.openqa.selenium.TimeoutException:预期条件失败:等待代理元素的可见性:DefaultElementLocator'By.xpath://* [contains(text(),'密码必须介于8和之间) 256')]'(尝试了 60 秒,间隔 1000 毫秒)

@Step("Verify the create account fields.")
public void getInvalidAccountDetails() {
    try {
        if (!isFirstTime) {
            clickCreateAccount();
        }
        isFirstTime = false;
        fillValidAccountDetails();

        boolean isPasswordErrorHandled = false;

        for (String invalidPassword : invalidPasswords) {
            Thread.sleep(1000);
            fillPassword(invalidPassword);
            fillConfirmPassword(invalidPassword);
            clickCreateAccountAccountPage();
            if (isElementPresent(password8And256CharValidationError)) {
                verifyPasswordLengthWarning();
                isPasswordErrorHandled = true;
            } else if (isElementPresent(passwordSpecialCharValidationError)) {
                verifyOneSpecialCharacter();
                isPasswordErrorHandled = true;
            } else if (isElementPresent(password1numberValidationError)) {
                verifyOneNumberWarning();
                isPasswordErrorHandled = true;
            } else if (!isPasswordErrorHandled) {
                fillPassword("Test@123");
                fillConfirmPassword("Test@1234");
                clickCreateAccountAccountPage();
                verifyConfirmPasswordNotMatchValidationError();
            }
            clearPasswordFields();
        }
    }
}

我尝试过使用不同的捕获异常,但这没有帮助。

java selenium-webdriver
1个回答
0
投票

一些反馈:

  1. 最佳实践是每个脚本仅包含一个测试。因此,将这四种场景分成四个单独的测试。

  2. 每个测试都应该有自己的浏览器。这为每个测试提供了最有可能成功的机会,并且不会被浏览器中之前运行的其他测试所污染。每个测试应该:1. 启动一个新浏览器,2. 完成步骤并进行验证,以及 3. 关闭浏览器。

  3. 通过让每个场景都是自己的测试并拥有自己的浏览器,您可以通过并行执行获得巨大的速度提升。

  4. 它还使测试更易于调试、阅读和维护。现在,您在

    if
    循环内有一堆
    for
    ,这使得更难判断您当前正在测试什么。

  5. 如果早期验证失败,您将无法获得有关后续测试/验证的信息。

我会编写如下所示的测试。每一项的名称都明确,步骤也明确,任何失败都一目了然。测试易于阅读和理解,易于维护,易于调试。

注意:我不知道您的场景,因此您需要更新不同的无效密码以匹配预期场景,但这应该会让您了解组织测试的更好方法。

public void password8And256CharValidationShort() {
    clickCreateAccount();
    fillValidAccountDetails();
    String invalidPassword = "aaaaaa";
    fillPassword(invalidPassword);
    fillConfirmPassword(invalidPassword);
    clickCreateAccountAccountPage();
    verifyPasswordLengthWarning();
}

public void password8And256CharValidationLong() {
    clickCreateAccount();
    fillValidAccountDetails();
    String invalidPassword;
    invalidPassword = "a".repeat(257);
    fillPassword(invalidPassword);
    fillConfirmPassword(invalidPassword);
    clickCreateAccountAccountPage();
    verifyPasswordLengthWarning();
}

public void passwordSpecialCharValidation() {
    clickCreateAccount();
    fillValidAccountDetails();
    String invalidPassword = "aaaaaaa!";
    fillPassword(invalidPassword);
    fillConfirmPassword(invalidPassword);
    clickCreateAccountAccountPage();
    verifyOneSpecialCharacter();
}

public void passwordOneNumberValidation() {
    clickCreateAccount();
    fillValidAccountDetails();
    String invalidPassword = "aaaaaaa1";
    fillPassword(invalidPassword);
    fillConfirmPassword(invalidPassword);
    clickCreateAccountAccountPage();
    verifyOneNumberWarning();
}

public void passwordDoesntMatchValidation() {
    clickCreateAccount();
    fillValidAccountDetails();
    fillPassword("Test@123");
    fillConfirmPassword("Test@1234");
    clickCreateAccountAccountPage();
    verifyConfirmPasswordNotMatchValidationError();
}
© www.soinside.com 2019 - 2024. All rights reserved.