0

Hi,
The below code extracts the branch number and the test environment to deploy that particular branches build on from a txt file (branch_dest.txt). Then it parses HTML pages to reach a webpage which contains some checkboxes. I want to check the "Select/Deselect All" checkbox and then click the "Deploy" button on that webpage.

How do i code this? I am basically from QA(Tester). So please help.

URL = "http://11.12.13.27:8080/cruisecontrol"

from urllib2 import urlopen
from HTMLParser import HTMLParser

import re

# Fetching links using HTMLParser
def get_links(url):
    parser = MyHTMLParser()
    parser.feed(urlopen(url).read())
    parser.close()
    return parser.links

# Build url for Deploy page
def get_deploy_url():
    url = URL + "/buildresults/xxx_%s_nightly_build" % branch
    print url
    for link in get_links(url):
        if link["href"].startswith("Deploy"):
            return "%s/%s" % (URL, link["href"])
        print link["href"]

# Build url for Destination page
def get_destination_url():
    url = get_deploy_url()
    print url
    destination_re = re.compile(r"%s" % destination)
    for link in get_links(url):
        if destination_re.search(link["href"]):
            return "http://11.12.13.27:8080/cruisecontrol/" + link["href"]

# Parsing HTML pages 
class MyHTMLParser(HTMLParser):
    def __init__(self, *args, **kwd):
        HTMLParser.__init__(self, *args, **kwd)
        self.links = []

    def handle_starttag(self, tag, attrs):
        if tag == "a":
            attrs = dict(attrs)
            if "href" in attrs:
                self.links.append(dict(attrs))

    def handle_endtag(self, tag):
        pass

if __name__ == "__main__":
    # Read the branch name and the test destination to deploy on
    lines = [x.split(':') for x in open("branch_dest.txt")]
    print lines
    branch = "%s" % lines[0][1].strip()
    print branch
    destination = "%s" % lines[1][1].strip()
    print destination
    
    final_url = get_destination_url()
    if final_url is None:
        print "Could not find a destination to deploy"
    else:
        print final_url
3
Contributors
7
Replies
8
Views
6 Years
Discussion Span
Last Post by Tech B
0

You must give the page html at least to check it out by somebody with experience in web pages (more than me).

0

Hi,

Below is the html of the web page.

<html>
<head>
	<title>Deploy Build</title> 
	<link type="text/css" rel="stylesheet" href="css/cruisecontrol.css"/>
	<style type="text/css">
		td.pad {
			padding: 2 5
		}

		.odd-row {
			background-color: white;
		}

		.even-row {
			background-color: #FFFFCC;
		}

		.header-row {
			background-color: white;
			color: darkblue;
		}
	</style>
	<script type="text/javascript">
		function setCheckboxes(checked)
		{
			var elements = document.getElementsByTagName('input');
			for( var i=0; i < elements.length; i++ )
			{
				if ( elements[i].type == 'checkbox' )
				{
					elements[i].checked = checked;
				}
			}
		}
	</script>

</head>

<body background="images/bluebg.gif">
	<h1 class="white" align="center">Select which clients to build</h1>

	<form name="cfg" action="DeployStart.jsp" method="POST">
		<input type="hidden" name="name" value="Test 4" />
		<input type="hidden" name="scriptPath" value="f:/Projects/PokerDeployer" />
		<input type="hidden" name="script" value="test4.cfg" />
		<input type="hidden" name="artifacts" value="f:/cruisecontrol/s_drive/artifacts/Poker-TTM_trunk_nightly_build/20100512230443" />
		<input type="hidden" name="configPath" value="f:/Projects/Poker-TTM_trunk_nightly_build/source/tools/PokerDeployer" />

	<table align="center" border="0" cellpadding="0" cellspacing="0" width="20%">
		<tr>
			<td bgcolor="#FFFFFF"><img border="0" src="images/bluestripestop.gif"/></td>
			<td bgcolor="#FFFFFF" align="right"><img border="0" src="images/bluestripestopright.gif"/></td>
		</tr>
		<tr>
			<td bgcolor="#DDDDDD" colspan="2" align="left" class="pad">
				<input type="checkbox" name="all_top" onClick="setCheckboxes(this.checked)"/> Select / deselect all<br>
			</td>
		</tr>

		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code" checked /> POK_code<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.SVS_code" checked /> SVS_code<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.PAT_code" /> PAT_code<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_gms" checked /> POK_code_gms<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_gms_cpn" checked /> POK_code_gms_cpn<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_mini" /> POK_code_mini<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.LTM_code" checked /> LTM_code<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.LTM_tot_code" /> LTM_tot_code<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_paradise" /> POK_code_paradise<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_forfun" /> POK_code_forfun<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_pokerheaven" /> POK_code_pokerheaven<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_totalpoker" /> POK_code_totalpoker<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_las" /> POK_code_las<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_italian" /> POK_code_italian<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_bulgarian" /> POK_code_bulgarian<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_finnish" /> POK_code_finnish<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_danish" /> POK_code_danish<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_french" /> POK_code_french<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_greek" /> POK_code_greek<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_german" /> POK_code_german<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_croatian" /> POK_code_croatian<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_polish" /> POK_code_polish<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_portuguese" /> POK_code_portuguese<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_romanian" /> POK_code_romanian<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_russian" /> POK_code_russian<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_slovak" /> POK_code_slovak<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_spanish" /> POK_code_spanish<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_czech" /> POK_code_czech<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_swedish" /> POK_code_swedish<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_hungarian" /> POK_code_hungarian<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_turkish" /> POK_code_turkish<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_albanian" /> POK_code_albanian<br>
			
			</td>
		</tr>
		

		<tr class="odd-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_austrian" /> POK_code_austrian<br>
			
			</td>
		</tr>
		

		<tr class="even-row ">
			<td colspan="2" align="left" class="pad">
			
				<input type="checkbox" name="client.POK_code_brazilian" /> POK_code_brazilian<br>
			
			</td>
		</tr>
		
		<tr>
			<td bgcolor="#DDDDDD" colspan="2" align="left" class="pad">
				<input type="checkbox" name="all" onClick="setCheckboxes(this.checked)"/> Select / deselect all<br>
			</td>
		</tr>
		<tr>
			<td bgcolor="#FFFFFF" colspan="2" align="center" class="pad">
				<input type="submit" value="Deploy" />
			</td>
		</tr>
		<tr>
			<td bgcolor="#FFFFFF"><img border="0" src="images/bluestripesbottom.gif"/></td>
			<td align="right" bgcolor="#FFFFFF"><img border="0" src="images/bluestripesbottomright.gif"/></td>
		</tr>
	</table>

	</form>
</body>
</html>

Here i need to check the Select/Deselect All checkbox and then click the Deploy button. How do i simulate this?

0

Looks like you need to do own version in python from this

function setCheckboxes(checked)
		{
			var elements = document.getElementsByTagName('input');
			for( var i=0; i < elements.length; i++ )
			{
				if ( elements[i].type == 'checkbox' )
				{
					elements[i].checked = checked;
				}
			}
		}

Which mean basically to set the status for all elements checked.

Hmm..

<form name="cfg" action="DeployStart.jsp" method="POST">
		<input type="hidden" name="name" value="Test 4" />
		<input type="hidden" name="scriptPath" value="f:/Projects/PokerDeployer" />
		<input type="hidden" name="script" value="test4.cfg" />
		<input type="hidden" name="artifacts" value="f:/cruisecontrol/s_drive/artifacts/Poker-TTM_trunk_nightly_build/20100512230443" />
		<input type="hidden" name="configPath" value="f:/Projects/Poker-TTM_trunk_nightly_build/source/tools/PokerDeployer" />

So this DeployStart.jsp need one POST method to send...

Let's see what specialists suggest, I have not enough experience in this, but I am willing to learn.

0

Hey Tony, thanks! I have sent a PM to the submitter. Hope he replies back.

0

try this

import urllib, urllib2, cookielib

cj = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

opener.addheaders.append(('User-agent', 'Mozilla/4.0'))
opener.addheaders.append( ('Referer', 'url to page') )


login_data = urllib.urlencode({'all_top' : 'setCheckboxes(this.checked),
                                'submit' : 'Deploy'})

resp = opener.open('url to page', login_data)
#f = open('test.html','w')
#f.write(f.read())
#f.close()
resp.close()

resp is the response after the button is pushed. Un-comment the code at the bottem to create a html page of the reponse to see if it worked or not.

The cookie handling may not be needed.

Also I noticed in the html that the button labeled "Deploy" doesn't have a name in the tag. I.E. <input type="submit" name="Name_of_button" value="Deploy" />
That name value is what should be in the login_data dictinary. This may not have an effect; just not so good html coding.

I can't really test this because I don't know the website hosting the page; that is if its not on only a local LAN.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.