📄 formtagtest.java
字号:
* registered) */ public void testFormScanningShouldNotHappen() throws Exception { String testHTML = "<HTML><HEAD><TITLE>Test Form Tag</TITLE></HEAD>" + "<BODY><FORM name=\"form0\"><INPUT type=\"text\" name=\"text0\"></FORM>" + "</BODY></HTML>"; createParser( testHTML ); ((PrototypicalNodeFactory)parser.getNodeFactory ()).unregisterTag (new FormTag ()); NodeList nodes = parser.extractAllNodesThatMatch (new NodeClassFilter ( FormTag.class )); assertEquals( "shouldn't have found form tag", 0, nodes.size () ); } /** * See bug #745566 StackOverflowError on select with too many unclosed options. * Under Windows this throws a stack overflow exception. */ public void testUnclosedOptions () throws ParserException { String url = "http://htmlparser.sourceforge.net/test/overflowpage.html"; int i; Node[] nodes; parser = new Parser(url); PrototypicalNodeFactory factory = new PrototypicalNodeFactory (); // we want to expose the repetitive tags factory.unregisterTag (new Html ()); factory.unregisterTag (new HeadTag ()); factory.unregisterTag (new BodyTag ()); factory.unregisterTag (new ParagraphTag ()); parser.setNodeFactory (factory); i = 0; nodes = new Node[50]; for (NodeIterator e = parser.elements(); e.hasMoreNodes();) nodes[i++] = e.nextNode(); assertEquals ("Expected nodes", 39, i); } public void testSetFormLocation() throws ParserException { createParser(FORM_HTML); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; formTag.setFormLocation("http://www.yahoo.com/yahoo/do_not_login.jsp"); String expected = FORM_HTML.substring (0, FORM_HTML.indexOf ("\"do_login.php\"")) + "\"http://www.yahoo.com/yahoo/do_not_login.jsp\"" + FORM_HTML.substring (FORM_HTML.indexOf ("\"do_login.php\"") + 14); assertStringEquals("Raw String",expected,formTag.toHtml()); } public void testToPlainTextString() throws ParserException { createParser(FORM_HTML); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; assertStringEquals("Form Tag string representation","\n \nUser Name\n\nPassword\n\n \n\n \nContents of TextArea\n\n\n", formTag.toPlainTextString()); } public void testSearchFor() throws ParserException { createParser(FORM_HTML); parser.setNodeFactory ( new PrototypicalNodeFactory ( new Tag[] { new FormTag (), new InputTag (), new TextareaTag (), new SelectTag (), new OptionTag (), })); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; NodeList nodeList = formTag.searchFor("USER NAME"); assertEquals("Should have found nodes",1,nodeList.size()); Node[] nodes = nodeList.toNodeArray(); assertEquals("Number of nodes found",1,nodes.length); assertType("search result node",Text.class,nodes[0]); Text stringNode = (Text)nodes[0]; assertEquals("Expected contents of string node","User Name",stringNode.getText()); } public void testSearchForCaseSensitive() throws ParserException { createParser(FORM_HTML); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; NodeList nodeList = formTag.searchFor("USER NAME",true); assertEquals("Should have not found nodes",0,nodeList.size()); nodeList = formTag.searchFor("User Name",true); assertNotNull("Should have not found nodes",nodeList); } public void testSearchByName() throws ParserException { createParser(FORM_HTML); parser.setNodeFactory ( new PrototypicalNodeFactory ( new Tag[] { new FormTag (), new InputTag (), new TextareaTag (), new SelectTag (), new OptionTag (), })); parseAndAssertNodeCount(1); assertTrue("Node 0 should be Form Tag",node[0] instanceof FormTag); FormTag formTag = (FormTag)node[0]; Tag tag= formTag.searchByName("passwd"); assertNotNull("Should have found the password node",tag); assertType("tag found",InputTag.class,tag); } /** * Bug 713907 reported by Dhaval Udani, erroneous * attributes being reported. */ public void testFormRendering() throws Exception { String testHTML = "<HTML><HEAD><TITLE>Test Form Tag</TITLE></HEAD>" + "<BODY><FORM name=\"form0\"><INPUT type=\"text\" name=\"text0\"></FORM>" + "</BODY></HTML>"; createParser( testHTML ); FormTag formTag = (FormTag)(parser.extractAllNodesThatMatch (new NodeClassFilter ( FormTag.class )).elementAt (0)); assertNotNull("Should have found a form tag",formTag); assertStringEquals("name","form0",formTag.getFormName()); assertNull("action",formTag.getAttribute("ACTION")); assertXmlEquals( "html", "<FORM NAME=\"form0\">" + "<INPUT TYPE=\"text\" NAME=\"text0\">" + "</FORM>", formTag.toHtml() ); } /** * From support request #772998 Cannot extract input tags * The getFormInputs list was reporting zero size and textarea tags were * in the inputs list. * Neither of these was reproducible. */ public void testTextArea () throws Exception { FormTag formTag; NodeList nl; InputTag inpTag; TextareaTag texTag; String html = "<body onload=\"otextnloadHandler()\" onunload=\"closeAdvanced()\">\n" + " <form name=\"searchForm\" onsubmit=\"doSearch()\">\n" + " <table id=\"searchTable\" align=\"left\" valign=\"middle\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" + " <tbody><tr nowrap=\"\" valign=\"middle\">\n" + " <td id=\"searchTD\">\n" + " <label id=\"searchLabel\" for=\"searchWord\">\n" + " Search:\n" + " </label>\n" + " </td>\n" + "\n" + " <td>\n" + " <input type=\"text\" id=\"searchWord\" name=\"searchWord\" value=\"\" size=\"24\" maxlength=\"256\" alt=\"Search Expression\">\n" + " </td>\n" + // note: this was added as there weren't any textarea tags in the page referenced " <td>\n" + " <textarea name=\"mytextarea\" rows=\"1\" cols=\"12\" alt=\"Free Form Text\">\n" + " The text.\n" + " </textarea>\n" + " </td>\n" + " <td>\n" + " <input type=\"button\" onclick=\"this.blur();doSearch()\" value=\"GO\" id=\"go\" alt=\"GO\">\n" + " <input type=\"hidden\" name=\"maxHits\" value=\"500\">\n" + " </td>\n" + " <td nowrap=\"nowrap\">\n" + "\n" + " <a id=\"scopeLabel\" href=\"javascript:openAdvanced();\" title=\"Search only the following topics\" alt=\"Search only the following topics\" onmouseover=\"window.status='Search only the following topics'; return true;\" onmouseout=\"window.status='';\">Search scope:</a>\n" + " </td>\n" + " <td nowrap=\"nowrap\">\n" + " <input type=\"hidden\" name=\"workingSet\" value=\"All topics\">\n" + " <div id=\"scope\">All topics</div>\n" + " </td>\n" + " </tr>\n" + "\n" + " </tbody></table>\n" + " </form>\n" + "\n" + "</body>\n"; createParser (html); formTag = (FormTag)(parser.extractAllNodesThatMatch (new NodeClassFilter ( FormTag.class )).elementAt (0)); assertNotNull ("Should have found a form tag",formTag); assertStringEquals ("name", "searchForm", formTag.getFormName ()); nl = formTag.getFormInputs (); assertTrue ("4 inputs", 4 == nl.size ()); inpTag = (InputTag)nl.elementAt (0); assertStringEquals ("name", "searchWord", inpTag.getAttribute ("name")); assertStringEquals ("value", "", inpTag.getAttribute ("value")); inpTag = (InputTag)nl.elementAt (1); assertNull ("name", inpTag.getAttribute ("name")); assertStringEquals ("value", "GO", inpTag.getAttribute ("value")); inpTag = (InputTag)nl.elementAt (2); assertStringEquals ("name", "maxHits", inpTag.getAttribute ("name")); assertStringEquals ("value", "500", inpTag.getAttribute ("value")); inpTag = (InputTag)nl.elementAt (3); assertStringEquals ("name", "workingSet", inpTag.getAttribute ("name")); assertStringEquals ("value", "All topics", inpTag.getAttribute ("value")); nl = formTag.getFormTextareas (); assertTrue ("1 textarea", 1 == nl.size ()); texTag = (TextareaTag)nl.elementAt (0); assertStringEquals ("name", "mytextarea", texTag.getAttribute ("name")); assertTrue ("only 1 child", 1 == texTag.getChildCount ()); assertStringEquals ("text contents", "\n The text.\n ", texTag.getChild (0).toHtml ()); } /** * From bug #825645 <input> not getting parsed inside table */ public void testInputInTable () throws Exception { FormTag formTag; NodeList nl; InputTag inpTag; String html = "<html>\n" + "<body>\n" + "<form action=\"/cgi-bin/test.pl\" method=\"post\">\n" + "<table><tr><td>\n" + "<INPUT type=hidden NAME=\"test1\" VALUE=\"insidetable\">\n" + "</td></tr>\n" + "</table>\n" + "<INPUT type=hidden NAME=\"Test2\"\n" + "VALUE=\"outsidetable\">\n" + "<INPUT type=hidden name=\"a\" value=\"b\">\n" + "</form>\n" + "</body>\n" + "</html>\n"; createParser (html); formTag = (FormTag)(parser.extractAllNodesThatMatch (new NodeClassFilter ( FormTag.class )).elementAt (0)); assertNotNull ("Should have found a form tag",formTag); nl = formTag.getFormInputs (); assertTrue ("3 inputs", 3 == nl.size ()); inpTag = (InputTag)nl.elementAt (0); assertStringEquals ("name", "test1", inpTag.getAttribute ("name")); assertStringEquals ("value", "insidetable", inpTag.getAttribute ("value")); inpTag = (InputTag)nl.elementAt (1); assertStringEquals ("name", "Test2", inpTag.getAttribute ("name")); assertStringEquals ("value", "outsidetable", inpTag.getAttribute ("value")); inpTag = (InputTag)nl.elementAt (2); assertStringEquals ("name", "a", inpTag.getAttribute ("name")); assertStringEquals ("value", "b", inpTag.getAttribute ("value")); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -