【问题标题】:How to automate a swing java web start application which runs clicking a link into a web application, which is automated with Selenium WebDriver?如何自动化运行单击链接到 Web 应用程序的 Swing Java Web 启动应用程序,该应用程序由 Selenium WebDriver 自动化?
【发布时间】:2014-07-04 02:52:28
【问题描述】:

我有一个典型的 Web 应用程序,它由 Selenium WebDriver 自动化。我的问题是一个特殊的自动化案例,其中我有一个链接,它使用 Java Web Start 运行一个 Swing 应用程序,我想将自动化的控制权转移到 Swing 应用程序。这可能吗?我可以使用什么工具来做到这一点?而且,我该怎么做?提前致谢。

【问题讨论】:

    标签: java swing selenium automation webdriver


    【解决方案1】:

    由于 Java web start 应用程序基本上是常规 Java 应用程序并且不出现在 DOM 中,因此您无法使用 WebDriver 访问它们。

    我所知道的用于测试 AWT/Swing 应用程序的最佳工具是 Jemmy。我通常使用它来测试独立的 Swing 应用程序,但我相信您也可以将它用于使用 Web 启动机制启动的应用程序。

    【讨论】:

    • 谢谢@Itai。有什么方法可以从 Selenium WebDriver "Jemmy" 或任何其他类似工具中启动?
    【解决方案2】:
    1. 点击webdriver中的jnlp文件链接,将jnlp文件保存到磁盘;
    2. 从 jnlp 运行 webstart 应用程序;
    3. 捕获打开的应用并将其用于测试。

    可以使用以下库来完成:

    您可能可以使用其他 AWT/Swing 测试工具执行相同的技巧,但是 uispec4j 允许拦截从 jnlp 执行的 webstart 应用程序,您不需要通过调用 main() 来运行应用程序,也不需要在您的测试代码仓库中包含您的 webstart 应用程序源代码。我在使用其他库(包括 Jemmy)时遇到了问题。

    这对我有用:

    import java.io.File;    
    import javax.swing.JTextField;  
    import netx.jnlp.JNLPFile;
    import netx.jnlp.Launcher;
    import org.junit.Assert;
    import org.junit.Test;
    import org.uispec4j.Trigger;
    import org.uispec4j.UISpecAdapter;
    import org.uispec4j.UISpecTestCase;
    import org.uispec4j.Window;
    import org.uispec4j.interception.WindowInterceptor;
    
    public class WebstartTest extends UISpecTestCase {
    
        @Test
        public void test() throws Exception {
            // click your webdriver link, save the jnlp file to disk
            final File file = new File("file.jnlp");
            final JNLPFile jnlp = new JNLPFile(file.toURI().toURL());
    
            // adapter is a UISpec4j way to allow capturing windows created in 
            // non-standard way, exactly what we need.
            this.setAdapter(new UISpecAdapter() {
                @Override
                public Window getMainWindow() {
                    return WindowInterceptor.run(new Trigger() {
                        @Override
                        public void run() throws Exception {
                            // running jnlp by netx launcher 
                            Launcher launcher = new Launcher();
                            launcher.setCreateAppContext(false);
                            launcher.launch(jnlp);
                        }
                    });
                }
            });
    
            Window w = this.getMainWindow();
    
            // verify if window's components are there
            Assert.assertEquals("text", ((JTextField) w.getSwingComponents(JTextField.class)[0]).getText());
    
            // manipulate window components...
        }
    }
    

    注意:uispec4j 会拦截窗口,所以它不会变得可见。这对我来说不是问题,所以我没有调查是否可以让它可见。

    【讨论】:

    • 我无法启动我的 jnlp 文件可能是由于 jre 1.7+,因为我的测试项目使用 jre 1.6 并且正在测试的应用程序使用 1.7+ 我收到以下异常:线程“SPARCS 中的异常” N4" java.lang.UnsupportedClassVersionError:com/navis/framework/ulc/client/jnlp/CarinaJnlpLauncher:不支持的major.minor 51.0版
    猜你喜欢
    • 2021-06-08
    • 2014-07-12
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多