【问题标题】:Using a homemade library of classes as functions in other class files使用自制的类库作为其他类文件中的函数
【发布时间】:2016-01-03 11:28:16
【问题描述】:

我对 Java 还很陌生,所以如果这是一个愚蠢的问题,请原谅我,但是当我说我真的找不到可靠的答案时请相信我。

这就是我正在使用的:

所以我正在测试一个程序,保持和更新它的最简单方法是创建我自己的“按钮”库。库中的所有内容都是像“enterValidCredentials”和“clickLoginButton”这样的小函数。

那么让我们来看看我的测试用例。在一个完美的世界里,我能够:

public class progressCheck {
    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://mail.google.com/");
        enterValidCredentials;
        clickLoginButton;
    }       
}

enterValidCredentials 和 clickLoginButton 存在于我的类库中。我很清楚这不会像上面写的那样工作。从字面上看,正确的做法是什么?

如果有帮助的话,我的 enterValidCredentials 类看起来像这样:

public class loginPageButtons {
private WebDriver driver;
Actions actions = new Actions(driver);

public class enterValidCredentials { // This class enters in a valid username and valid password on the login page.
    public void enterValidCredentials2() {
        driver.findElement(By.cssSelector("input[type=\"text\"]")).clear();
        driver.findElement(By.cssSelector("input[type=\"text\"]")).sendKeys("XXXXXXXX");
        driver.findElement(By.cssSelector("input[type=\"password\"]")).clear();
        driver.findElement(By.cssSelector("input[type=\"password\"]")).sendKeys("XXXXXXXX");
    }
}

我所有的其他函数都遵循一个相对相似的结构(当然取决于它们的功能)。

【问题讨论】:

  • 您需要实例化类并将其称为公共方法。 (我想首先你应该设置driver 变量)
  • 你能给我看一个代码示例吗? @AlexanderStepchkov
  • 非静态方法@Gimby
  • 您可能想看看页面对象模型。你可以在网上找到一堆参考资料/教程。其中之一是在 Selenium 网站上,code.google.com/p/selenium/wiki/PageObjects

标签: java class selenium package


【解决方案1】:

您可以使用单元测试来检查类的单个功能。

创建单元测试最常用的库是JUnit

如果您使用 ide(如 IntelliJ 或 Eclipse)运行测试,可以使用一个简单的命令完成,就像运行 main 方法一样。

如果您需要创建对象的模拟,您可以使用 Mockito 之类的库(但还有许多其他有效的替代方案)。

注意: mock 是一个对象,它与一个在测试环境中难以使用的复杂对象(例如数据库连接、文件处理程序、网络处理程序)具有相同的接口.

这是一个例子,我试图想象你的代码和一个可能的测试。我假设 clickLoginButton 返回一个整数只是为了显示可能的断言语句。

例子:

@Test
public static void testCredentials() {
    WebDriver driver = new FirefoxDriver();
    driver.get("http://mail.google.com/");
    EnterValidCredentials enterValidCredentials = new EnterValidCredentials(); // Or create a mock if necessary
    // Set values if necessary
    int returnValue = enterValidCredentials.clickLoginButton();
    assertEquals(returnValue, 1);
}  

【讨论】:

  • 让我们把整个“测试”的事情排除在外。我真的只需要知道将类用作函数的语法。我们使用 JUnit,但我们的应用程序非常大,有很多测试用例,因此创建这个函数库将有助于维护测试用例(当我的所有 xpath 都搞砸时编辑一个函数,与编辑 100 个测试用例相比)。
  • “将类用作函数”是什么意思?
  • 例如,我们有一个名为 enterValidCredentials 的类 - 当您运行代码时,它会执行此操作(在某些文本字段中输入用户名和密码)。我希望能够在其他类(测试用例)中“调用”这个函数,这样我就不必重复复制和粘贴代码。我真的希望我可以(这不起作用)输入“enterValidCredentials”(因此将其视为一个函数),我的梦想就会成真。我希望你让我的梦想成真。
  • 原帖中的第一段代码说明了我想要发生的事情,我只是不知道如何实现。就像,如果你运行它,网络驱动程序会去谷歌邮件,输入我的凭据并点击登录按钮。
  • 只需创建具有您的方法(在您的测试函数中)的类的实例并调用此方法。如果创建一个类不是那么简单(因为您需要创建许多额外的对象,或者您需要访问一个非运行的数据库或类似的)创建该对象的模拟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多