<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font face="Tahoma,sans-serif" color="#000000"><b>James McCaffrey</b> wrote an article in <b>MSDN Mag</b> </font><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma,sans-serif" color="#000000"><a href="https://msdn.microsoft.com/en-us/magazine/ff955768.aspx">https://msdn.microsoft.com/en-us/magazine/ff955768.aspx</a></font></div><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma,sans-serif" color="#000000">It demonstrates how to use automate the testing of an <b>ASP.NET WebForms MiniCalculate</b> page. </font></div><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma,sans-serif" color="#000000">The specific issue is parsing out the hidden <b>viewstate</b> field. The article is from 2010 and I believe the viewstate field size has changed, causing later webforms pages with the greater viewstatew field size to be incompatible with the original McCaffrey code. fd</font></div><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma,sans-serif" color="#000000">Please, can someone help me get the code to work? </font></div><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma,sans-serif" color="#000000">Here is the <b>IRONPYTHON</b> <b>harness.py</b> code...</font></div><div><font face="Tahoma,sans-serif" color="#000000"><br></font></div><div><font face="Tahoma, sans-serif"><div># harness.py</div><div><br></div><div>import sys</div><div>import System</div><div>import clr</div><div><br></div><div><span style="font-size: 12pt;">from System import *</span></div><div>from System.IO import *</div><div>from System.Text import *</div><div>from System.Net import *</div><div>from HTMLParser import HTMLParser</div><div><br></div><div>clr.AddReference('System.Web')</div><div>from System.Web import *</div><div><br></div><div>class MyParser(HTMLParser):</div><div> def __init__(self):</div><div> #super().__init__(self)</div><div> HTMLParser.__init__(self)</div><div> #self.seen = {}</div><div><br></div><div>#d = dict([('two', 2), ('one', 1), ('three', 3)])<span class="Apple-tab-span" style="white-space:pre"> </span> </div><div> def handle_starttag(self, tag, attributes):</div><div> if tag != 'input': return</div><div> a = dict(attributes) </div><div> if a['type'] == 'hidden':</div><div> print a['value']</div><div> return</div><div><br></div><div>def getVS(url):</div><div> wc = WebClient()</div><div> bytes = wc.DownloadData(url)</div><div> html = Encoding.ASCII.GetString(bytes)</div><div> </div><div> print html</div><div> print 'starttag begin'</div><div> parser = MyParser()</div><div> return parser.feed(html)</div><div><br></div><div> #start = html.IndexOf('id="__VIEWSTATE"', 0) + 24</div><div> #end = html.IndexOf('"', start)</div><div> #vs = html.Substring(start, end-start)</div><div> #return vs</div><div><br></div><div>def getEV(url):</div><div> wc = WebClient()</div><div> bytes = wc.DownloadData(url)</div><div> html = Encoding.ASCII.GetString(bytes)</div><div> </div><div> start = html.IndexOf('id="__EVENTVALIDATION"', 0) + 30</div><div> end = html.IndexOf('"', start)</div><div> ev = html.Substring(start, end-start)</div><div> return ev</div><div><br></div><div>try:</div><div> </div><div> print '\nBegin IronPython Request-Response testing'</div><div> print sys.argv[0]</div><div> url = 'http://localhost:64725/Default.aspx'</div><div> print '\nURL under test = ' + url + '\n'</div><div> testCases = 'testCases.txt'</div><div><br></div><div> numPass = numFail = 0</div><div> </div><div> filePath = 'C:\\Users\\daniel\\Downloads\\McCaffrey\\TestRun\\testCases.txt' </div><div> fin = open(filePath, 'r')</div><div> </div><div> for line in fin:</div><div> print '======================================================================'</div><div> (caseid,value1,value2,operation,decimals,action,expected) = line.split('|')</div><div> </div><div> expected = 'value="' + expected.Trim() + '" id="TextBox3"'</div><div> data = 'TextBox1=' + value1 + '&TextBox2=' + value2 + '&Operation=' + operation + '&DropDownList1=' + decimals + '&Button1=' + action</div><div> </div><div> print 'Test case: ' + caseid</div><div> print 'Input : ' + data</div><div> print 'Expected : ' + expected</div><div><br></div><div> vs = getVS(url)</div><div> ev = getEV(url)</div><div> vs = HttpUtility.UrlEncode(vs)</div><div> ev = HttpUtility.UrlEncode(ev)</div><div> data = data + "&__VIEWSTATE=" + vs + "&__EVENTVALIDATION=" + ev</div><div> </div><div> buffer = Encoding.ASCII.GetBytes(data)</div><div> req = HttpWebRequest.Create(url)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div> #print '^^^^^^^^^^^^^^^^^^^^^^^^'</div><div> #print req.GetResponse().Headers</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div> req.Method = 'POST'</div><div> req.ContentType = 'application/x-www-form-urlencoded'</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div> print "**********************************"</div><div> print "buffer.Length = ", buffer.Length</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div> req.ContentLength = buffer.Length</div><div><br></div><div> reqst = req.GetRequestStream()</div><div> reqst.Write(buffer, 0, buffer.Length)</div><div> #reqst.Flush()</div><div> reqst.Close()</div><div> </div><div> res = req.GetResponse()</div><div> resst = res.GetResponseStream()</div><div> sr = StreamReader(resst)</div><div><br></div><div> html = sr.ReadToEnd()</div><div> sr.Close()</div><div> resst.Close()</div><div> </div><div> if html.IndexOf(expected) >= 0:</div><div> print 'Pass'</div><div> numPass = numPass + 1</div><div> else:</div><div> print '**FAIL**'</div><div> numFail = numFail + 1</div><div><br></div><div> print '======================================================================\n'</div><div><br></div><div> # end main processing loop</div><div><br></div><div> fin.close()</div><div><br></div><div> print '\nNumber pass = ' + str(numPass)</div><div> print 'Number fail = ' + str(numFail) </div><div> print '\nEnd test run\n'</div><div><br></div><div>except System.Exception, e:</div><div> #type, value, traceback = sys.exc_info()</div><div> print e.Message</div></font></div><div><br>Thanks,<br><font color="#800000"><font size="4" face="Lucida Handwriting, Cursive">D</font>anny <font size="4" face="Lucida Handwriting, Cursive">R</font>osales</font><strong></strong><br><div class="vimiumReset vimiumHUD" style="right: 150px; opacity: 0; display: none;"></div></div> </div></body>
</html>