Adding workflow tests using Selenium. These actually drive the web browser to test the Javascript UI effectively. Currently can't run under buildbot.

This commit is contained in:
James Taylor
2009-03-27 18:55:00 -04:00
parent 5aaf10883e
commit adeef24ce9
9 changed files with 888 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
if [ ! -f selenium-server.jar ]; then
echo "Need to download selenium-server.jar from:"
echo "http://nexus.openqa.org/content/repositories/snapshots/org/seleniumhq/selenium/server/selenium-server/1.0-SNAPSHOT/selenium-server-1.0-20090319.053109-107-standalone.jar"
fi
java -jar selenium-server.jar -htmlSuite "*firefox" "http://localhost:8080" ./test/selenium/workflow/Suite.html ./selenium_results.html
+52
View File
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Login</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Login</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Login</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>email</td>
<td>test${username}@test.com</td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>testtest</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Login']</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Now logged in as test52396610364@test.com.</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<title>Test Suite</title>
</head>
<body>
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
<tr><td><b>Test Suite</b></td></tr>
<tr><td><a href="UserRegistration.html">Register and logout</a></td></tr>
<tr><td><a href="Login.html">Login</a></td></tr>
</tbody></table>
</body>
</html>
+137
View File
@@ -0,0 +1,137 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Register and logout</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Register and logout</td></tr>
</thead><tbody>
<tr>
<td>open</td>
<td>/</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Register</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>store</td>
<td>javascript{Math.round( Math.random() * 100000000000 )}</td>
<td>username</td>
</tr>
<tr>
<td>type</td>
<td>email</td>
<td>test${username}@test.com</td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>test</td>
</tr>
<tr>
<td>type</td>
<td>confirm</td>
<td>test</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>testest</td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Please use a password of at least 6 characters</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>confirm</td>
<td>test</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Passwords do not match</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>testtest</td>
</tr>
<tr>
<td>type</td>
<td>confirm</td>
<td>testtest</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Now logged in as test${username}@test.com</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Logout</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Logged in as test${username}@test.com</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>You are no longer logged in.</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Login</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Create Simple Workflow</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Create Simple Workflow</td></tr>
</thead><tbody>
<tr>
<td>setSpeed</td>
<td>100</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/workflow</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//span</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>workflow_name</td>
<td>Test workflow</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>wf-0-popup</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//div[@id='wf-0-popup-menu']/div[1]</td>
<td></td>
</tr>
<!--Now in workflow editor-->
<tr>
<td>click</td>
<td>//div[@id='title___workflow__input__']/a/span</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link=Input dataset</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td>Input Dataset</td>
</tr>
<tr>
<td>verifyText</td>
<td>//div[@id='wf-node-step-1']/div[2]/div[2]</td>
<td>output</td>
</tr>
<tr>
<td>click</td>
<td>//div[@id='title_group']/a/span</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link-join1</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td>Join two Queries</td>
</tr>
<tr>
<td>verifyText</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[3]</td>
<td>out_file1</td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//div[@id='wf-node-step-1']/div[2]/div[2]/div</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[1]/div[1]/div</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-1']/div[2]/div[2]/div</td>
<td>0,0</td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[1]/div[1]/div</td>
<td>0,0</td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[1]/div[1]/div</td>
<td>0,0</td>
</tr>
<tr>
<td>clickAt</td>
<td>//div[@id='wf-node-step-2']</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>field1</td>
<td>1</td>
</tr>
<tr>
<td>type</td>
<td>field2</td>
<td>1</td>
</tr>
<tr>
<td>select</td>
<td>unmatched</td>
<td>label=Yes</td>
</tr>
<tr>
<td>click</td>
<td>tool-form-save-button</td>
<td></td>
</tr>
<tr>
<td>waitForAttribute</td>
<td>tool-form-save-button@value</td>
<td>Save</td>
</tr>
<tr>
<td>click</td>
<td>close-button</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//div[@id='overlay']/table/tbody/tr/td/div/div/div[3]/div[1]/button[2]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//td[2]</td>
<td>2</td>
</tr>
</tbody></table>
</body>
</html>
+67
View File
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Create User</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Create User</td></tr>
</thead><tbody>
<tr>
<td>setSpeed</td>
<td>100</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Register</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>store</td>
<td>javascript{Math.round( Math.random() * 100000000000 )}</td>
<td>username</td>
</tr>
<tr>
<td>type</td>
<td>email</td>
<td>test${username}@test.com</td>
</tr>
<tr>
<td>type</td>
<td>password</td>
<td>testtest</td>
</tr>
<tr>
<td>type</td>
<td>confirm</td>
<td>testtest</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Now logged in as test${username}@test.com</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
@@ -0,0 +1,247 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Create Workflow With Grouping And Runtime Parameters</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Create Workflow With Grouping And Runtime Parameters</td></tr>
</thead><tbody>
<tr>
<td>setSpeed</td>
<td>100</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Workflow</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//span</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>workflow_name</td>
<td>Workflow with grouping</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//input[@value='Create']</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>wf-0-popup</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//div[@id='wf-0-popup-menu']/div[1]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//div[@id='title_group']/a/span</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>link-Grouping1</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td></td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td>100,100</td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td>100,100</td>
</tr>
<tr>
<td>click</td>
<td>link-Grouping1</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td></td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td>200,200</td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td>200,200</td>
</tr>
<tr>
<td>click</td>
<td>link-Grouping1</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-3']/div[1]</td>
<td></td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-3']/div[1]</td>
<td>300,300</td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-3']/div[1]</td>
<td>300,300</td>
</tr>
<tr>
<td>clickAt</td>
<td>//div[@id='wf-node-step-1']/div[1]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>popup-arrow-for-row-groupcol</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//div[@id='popup-arrow-for-row-groupcol-menu']/div</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//div[@id='right-content']/div/div[2]/form/div[2]/div[1]/i</td>
<td>To be set at runtime</td>
</tr>
<tr>
<td>click</td>
<td>operations_add</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>tool-form-save-button</td>
<td></td>
</tr>
<tr>
<td>clickAt</td>
<td>//div[@id='wf-node-step-2']/div[1]</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>operations_add</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>operations_0|opcol</td>
<td>3</td>
</tr>
<tr>
<td>click</td>
<td>operations_add</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>operations_1|opcol</td>
<td>4</td>
</tr>
<tr>
<td>click</td>
<td>tool-form-save-button</td>
<td></td>
</tr>
<tr>
<td>verifyValue</td>
<td>operations_0|opcol</td>
<td>3</td>
</tr>
<tr>
<td>verifyValue</td>
<td>operations_1|opcol</td>
<td>4</td>
</tr>
<tr>
<td>click</td>
<td>operations_0_remove</td>
<td></td>
</tr>
<tr>
<td>verifyValue</td>
<td>operations_1|opcol</td>
<td>4</td>
</tr>
<tr>
<td>click</td>
<td>tool-form-save-button</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-1']/div[2]/div[3]/div</td>
<td></td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[1]/div/div</td>
<td></td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-2']/div[2]/div[1]/div/div</td>
<td></td>
</tr>
<tr>
<td>mouseDownAt</td>
<td>//div[@id='wf-node-step-1']/div[2]/div[3]/div</td>
<td></td>
</tr>
<tr>
<td>mouseMoveAt</td>
<td>//div[@id='wf-node-step-3']/div[2]/div[1]/div/div</td>
<td></td>
</tr>
<tr>
<td>mouseUpAt</td>
<td>//div[@id='wf-node-step-3']/div[2]/div[1]/div/div</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>save-button</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>close-button</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>
+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />
<title>Test Suite</title>
</head>
<body>
<table id="suiteTable" cellpadding="1" cellspacing="1" border="1" class="selenium"><tbody>
<tr><td><b>Test Suite</b></td></tr>
<tr><td><a href="CreateUser.html">Create User</a></td></tr>
<tr><td><a href="CreateSimpleWorkflow.html">Create Simple Workflow</a></td></tr>
<tr><td><a href="VerifyRunSimpleWorkflow.html">Verify / Run Simple Workflow</a></td></tr>
<tr><td><a href="CreateWorkflowWithGroupingAndRuntimeParameters.html">Create Workflow With Grouping And Runtime Parameters</a></td></tr>
</tbody></table>
</body>
</html>
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head profile="http://selenium-ide.openqa.org/profiles/test-case">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="selenium.base" href="" />
<title>Verify / Run Simple Workflow</title>
</head>
<body>
<table cellpadding="1" cellspacing="1" border="1">
<thead>
<tr><td rowspan="1" colspan="3">Verify / Run Simple Workflow</td></tr>
</thead><tbody>
<tr>
<td>setSpeed</td>
<td>100</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>open</td>
<td>/</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_tools</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>//div[@id='title_getext']/a/span</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link-upload1</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>file_data</td>
<td>/Users/james/projects/galaxy/code/galaxy-security/test-data/1.bed</td>
</tr>
<tr>
<td>click</td>
<td>//form[@id='tool_form']/div[8]/input</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_history</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>exact:Info: uploaded bed file</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>link=Workflow</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>clickAt</td>
<td>wf-0-popup</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>//div[@id='wf-0-popup-menu']/div[2]</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_main</td>
<td></td>
</tr>
<tr>
<td>verifyText</td>
<td>//form[@id='tool_form']/div[2]/div[2]/div[1]/div[1]</td>
<td>Output dataset 'output' from step 1</td>
</tr>
<tr>
<td>verifyText</td>
<td>//form[@id='tool_form']/div[2]/div[2]/div[2]/div[1]</td>
<td>1 (value not yet validated)</td>
</tr>
<tr>
<td>verifyText</td>
<td>//form[@id='tool_form']/div[2]/div[2]/div[5]/div[1]</td>
<td>Yes</td>
</tr>
<tr>
<td>verifyText</td>
<td>//form[@id='tool_form']/div[2]/div[2]/div[6]/div[1]</td>
<td>No</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>run_workflow</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>relative=up</td>
<td></td>
</tr>
<tr>
<td>selectFrame</td>
<td>galaxy_history</td>
<td></td>
</tr>
<tr>
<td>waitForElementPresent</td>
<td>css=div.historyItemWrapper b</td>
<td></td>
</tr>
<tr>
<td>verifyTextPresent</td>
<td>Join two Queries on</td>
<td></td>
</tr>
<tr>
<td>waitForTextPresent</td>
<td>245 regions</td>
<td></td>
</tr>
</tbody></table>
</body>
</html>