【问题标题】:Using JUnit to run testcases which involve dialog boxes which take in user input使用 JUnit 运行涉及接受用户输入的对话框的测试用例
【发布时间】:2015-03-30 16:09:29
【问题描述】:

我正在构建一个应用程序,它通过提供分步说明帮助用户浏览网站。 说明以对话框的形式给出。我正在使用 Java Swing 创建 GUI 对话框。

这是启动 webdriver 的主类。

public class initialDriver{

    public static WebDriver driver;

    public static void main(String[] args) throws IOException, InterruptedException{

        testCases.simpleGoogle();
        testCases.wiki();


}

}

控制权传递给这个类。这由各个测试用例组成。每个测试用例都会为 GUI 发送争论。

public class testCases{


    public static void simpleGoogle() throws IOException, InterruptedException
    {

        initialDriver.driver = new FirefoxDriver();  
        initialDriver.driver.get("https://www.google.com"); 

        String message = "Enter search term,Click search button,Check the results";

        new StepMessage("GoogleSearch",message);

    }


    public static void wiki() throws IOException, InterruptedException
    {

        initialDriver.driver = new FirefoxDriver();  
        initialDriver.driver.get("https://www.wikipedia.org"); 

        String message = "Enter 'Solar Energy',Click search,Check the page";

        new StepMessage("WikipediaSearch",message);     

    }

}

这是 GUI 类。单击“确定”时,它会打开另一个 GUI 框架,该框架接受用户输入的“测试用例 - 通过或失败”。

public class StepMessage extends JFrame {

    private JPanel contentPane;

    public static javax.swing.JTextArea msgArea;

        public String message;
        public String nameoftheTest;

    public static javax.swing.JButton btnOk;



    /**
     * Create the frame.
     */
    public StepMessage(String Testname,String message) {

        nameoftheTest = Testname;

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 226);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);


        msgArea = new JTextArea();
        msgArea.setBounds(12, 13, 397, 68);
        contentPane.add(msgArea);
        msgArea.setEditable(false);
        StepMessage.msgArea.setText(message);


        btnOk = new JButton("OK");
        btnOk.setBounds(175, 135, 97, 30);
        contentPane.add(btnOk);
        btnOk.addActionListener(new java.awt.event.ActionListener() 
        {
            public void actionPerformed(java.awt.event.ActionEvent evt) 
            {
                OkBtnActionPerformed(evt);
            }
        });



    }



    public void OkBtnActionPerformed(java.awt.event.ActionEvent evt)
    {
        this.dispose();
        PassFail frame2 = new PassFail(nameoftheTest);
        frame2.setTitle("Test Pass or Fail");
        frame2.setVisible(true);

    }

}

我想使用 JUnit 运行多个此类测试。每个测试都必须导航到网站,打开 GUI 并等待用户输入。然后控件应该传回 testCases 类并执行下一个测试。

如何做到这一点?

【问题讨论】:

    标签: java swing junit


    【解决方案1】:

    这可以通过CompletableFuture 来完成(或者如果不可用,可以使用 Guava 的 SettableFuture)。编写测试如下:

    @Test
    public void testGoogle() throws Exception {
        CompletableFuture<Void> future = new CompletableFuture<>();
        testCases.simpleGoogle(future);
        future.get();
    }
    

    并通过 UI 传递未来,以便在事件处理程序中可用。然后根据测试是通过还是失败调用future.complete(null)future.completeExceptionally(new AssertionError("Failed"))

    【讨论】:

    • 谢谢。将对此进行调查。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多