HtmlUnit不会更改TextArea的文本

时间:2017-05-10 12:07:04

标签: java htmlunit

我编写了一个代码来连接到这个网页:compilerjava.net

1)我在该页面中找到了接受要编译的代码的文本区域字段。

2)我找到了编译代码的按钮。

3)我找到了返回代码结果的文本区域。

问题是,当我调用textarea.setText(“something”)时,它(我认为)实际上并没有改变网页中的代码。因此,当我单击编译按钮时,它会编译该页面中的默认代码并返回该默认代码的输出。

我试图将焦点设置为textarea,你可以在下面看到所有这些。 我打电话了;

1)textArea.focus();

2)textArea.click();

3)我尝试使用textArea.setAttribute(“name”,“code”);

我搜索了互联网,发现了各种堆栈溢出问题接近这个问题,它们都没有解决我的问题,只是当他们说textArea.setText()时似乎对每个人都有效。

我应该与你分享的另一个有趣的事实是,

如果我调用textArea.setText(“...”)然后我说;

HtmlTextArea textArea1 = form.getTextAreaByName(“code”);

如果我调用textArea1.getText(),则此文本的值将为“...”。这应该意味着我实际上设法改变了文本区域的值,但是当我编译时,它编译文本区域中的默认文本而不是我设置它的文本。

对此有何帮助?

P.S:我将编译结果放在while循环上的原因与网络连接问题有关。如果您尝试运行此代码,则可能在第一次尝试时无效。另请注意,运行时间大约为15秒,因为它会提供数千个警告,我将其阻止打印到控制台。 P.S2:我也看过这个页面,但这些都没有效果;

http://www.programcreek.com/java-api-examples/index.php?api=com.gargoylesoftware.htmlunit.html.HtmlTextArea

public class Test {
    public static void main(String[] args) {
        try {
            // Prevents the program to print thousands of warning codes.
            java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);
            java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

            // Initializes the web client and yet again stops some warning codes.
            WebClient webClient = new WebClient( BrowserVersion.CHROME);
            webClient.getOptions().setThrowExceptionOnFailingStatusCode( false);
            webClient.getOptions().setThrowExceptionOnScriptError( false);
            webClient.getOptions().setJavaScriptEnabled( true);
            webClient.getOptions().setCssEnabled( true);


            // Gets the html page, which is the online compiler I'm using.
            HtmlPage page = webClient.getPage("https://www.compilejava.net/");


            // Succesfully finds the form which has the required buttons etc.
            List<HtmlForm> forms = page.getForms();
            HtmlForm form = forms.get( 0);


            // Finds the textarea which will hold the code.
            HtmlTextArea textArea = form.getTextAreaByName( "code");

            // Finds the textarea which will hold the result of the compilation.
            HtmlTextArea resultArea = page.getHtmlElementById( "execsout");

            // Finds the compile button.
            HtmlButtonInput button = form.getInputByName( "compile");

            textArea.click();
            textArea.focus();
            // Simple code to run.
            textArea.setDefaultValue( "public class HelloWorld\n" +
                    "{\n" +
                    "  // arguments are passed using the text field below this editor\n" +
                    "  public static void main(String[] args)\n" +
                    "  {\n" +
                    "    System.out.print( \"Hello\");\n" +
                    "  }\n" +
                    "}");

            System.out.println( textArea.getText());

            // Compiles.
            button.click();

            // Result of the compilation.
            String str = resultArea.getText();
            while ( resultArea.getText() == null || resultArea.getText().substring(0, 3).equals( "exe")) {
                System.out.print( resultArea.getText());
            }
            System.out.println();
            System.out.println( resultArea.getText());

        } catch ( Exception e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这里有点耐心帮助

ns