【问题标题】:How to use a method to call various methods inside and return true in seleniumselenium中如何使用方法调用内部的各种方法并返回true
【发布时间】:2025-12-21 18:25:16
【问题描述】:

我想要一个方法 public boolean verifySignIn() 并在里面调用下面的方法并返回 true,

setUserName(String) 该方法用于设置用户名。 setPassword(String) 该方法用于设置密码。 clickLogin() 该方法用于点击登录按钮。

这是我的代码现在的样子,

public boolean verifySignIn() 
{       
setUserName("user");
setPassword("admin123");
clickLogin();
return true;

}

【问题讨论】:

  • 这个返回值有什么意义,如果它总是返回真?另外:既然你想要的已经是你所拥有的,那么真正的问题是什么?
  • 代替 return true 您应该验证成功消息或某些元素的可见性以及应该返回的结果。

标签: java selenium selenium-webdriver


【解决方案1】:

要从 verifySignIn() 返回 true,您可以将函数包装在 try-catch{} 块中,如下所示:

public boolean verifySignIn() {  
       try{  
            setUserName("user");
            setPassword("admin123");
            clickLogin();
            return true;  
       }catch(Exception e){
            return false;
       }  
} 

【讨论】:

  • 如果目标是(正如 OP 解释的那样)始终返回 true,这有什么帮助?
  • @Stultuske 您的论点/问题是有道理的,但根据最佳实践,我不想忽略catch{}。万一 setUserName()setPassword()clickLogin 失败,理想情况下我们也能抓住它并返回 false
  • 我的猜测是传播异常,并使其成为无效方法。如果登录失败,无论如何您都应该被“阻止”,以编程方式清除它没有问题
  • 但这不一定是任何异常,也许只是错误的凭据。我同意@Stultuske,但我也不同意这应该总是正确的,中间应该有一些东西,捕捉异常,并且还要考虑负面测试用例,就像前面提到的错误信用。
  • @DebanjanB 现在您正在更改分析。您声称只有在登录数据正确时才应返回 true。 OP 声明它必须始终返回 true。
【解决方案2】:

如果我会做这样的事情,我会做这样的事情:

public boolean verifySignIn(){       
   return clickLogin(email, password);
}

方法实现

public boolean clickLogin(email, password){
    setUserName("user");
    setPassword("admin123");
    //do some assert, return result
    Assert.assertTrue(); // if it fails, You wont be able to execute any further.
    // or have some kind of check and return boolean

    return true;   
}

但无论如何尝试使用 PageObject 设计而不是返回布尔值。返回页面对象(例如主页)如果一切正常,您就登录了。 因此,您可以与下一页进行交互,或者只是在您成功登录时检查它,从而扩展和模块化您的测试。

【讨论】:

    【解决方案3】:

    我认为在此方法中验证登录最重要的是检查单击该登录按钮是否真的将您带到您应该到达的地方。

    所以,我会做一个类似的方法:

    public boolean verifySignIn() {
        setUserName("user");
        setPassword("admin123");
        return clickLogin();
      }
    

    然后我会更好地定义 clickLogin() 方法:

    public boolean clickLogin() {
        WebElement loginButton = driver.findElement(By.id("someId"));
        loginButton.click;
        return !driver.findElements(By.id("someElementOnPage")).isEmpty();
      }
    

    DebanjanB 的 try/catch 解决方案很好,但它唯一验证的是没有异常。它实际上并没有验证登录是否将您带到正确的页面。

    【讨论】: