{"componentChunkName":"component---src-templates-blog-post-js","path":"/2008/07/07/sending-post-requests-with-watin/","result":{"data":{"site":{"siteMetadata":{"title":"Vidar's musings"}},"markdownRemark":{"id":"14b7e522-3755-5bca-b38a-50131db63e23","excerpt":"When doing web testing using Watin, it is not trivial to be able to do a POST request to the server. However, with the help this article on microsoft.com, I was…","html":"<p>When doing web testing using Watin, it is not trivial to be able to do a POST request to the server. However, with the help <a href=\"http://support.microsoft.com/kb/313068/\">this</a> article on microsoft.com, I was able to figure out how. I ended up with writing this class:</p>\n<div class=\"gatsby-highlight\" data-language=\"csharp\"><pre class=\"language-csharp\"><code class=\"language-csharp\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Navigator</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">IE</span> _ie<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token function\">Navigator</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">IE</span> ie<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> _ie <span class=\"token operator\">=</span> ie<span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">void</span></span> <span class=\"token function\">Post</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Uri</span> baseUri<span class=\"token punctuation\">,</span> <span class=\"token keyword\">params</span> <span class=\"token class-name\">KeyValuePair<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">object</span><span class=\"token punctuation\">></span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> postData<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">object</span></span> flags <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">object</span></span> targetFrame <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">object</span></span> headers <span class=\"token operator\">=</span> <span class=\"token string\">\"Content-Type: application/x-www-form-urlencoded\"</span> <span class=\"token operator\">+</span> Convert<span class=\"token punctuation\">.</span><span class=\"token function\">ToChar</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> Convert<span class=\"token punctuation\">.</span><span class=\"token function\">ToChar</span><span class=\"token punctuation\">(</span><span class=\"token number\">13</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">object</span></span> postDataBytes <span class=\"token operator\">=</span> <span class=\"token function\">MakeByteStreamOf</span><span class=\"token punctuation\">(</span>postData<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\"><span class=\"token keyword\">object</span></span> resourceLocator <span class=\"token operator\">=</span> baseUri<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">IWebBrowser2</span> browser <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>IWebBrowser2<span class=\"token punctuation\">)</span>_ie<span class=\"token punctuation\">.</span>InternetExplorer<span class=\"token punctuation\">;</span>\n        browser<span class=\"token punctuation\">.</span><span class=\"token function\">Navigate2</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">ref</span> resourceLocator<span class=\"token punctuation\">,</span> <span class=\"token keyword\">ref</span> flags<span class=\"token punctuation\">,</span> <span class=\"token keyword\">ref</span> targetFrame<span class=\"token punctuation\">,</span> <span class=\"token keyword\">ref</span> postDataBytes<span class=\"token punctuation\">,</span> <span class=\"token keyword\">ref</span> headers<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        _ie<span class=\"token punctuation\">.</span><span class=\"token function\">WaitForComplete</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token return-type class-name\"><span class=\"token keyword\">byte</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> <span class=\"token function\">MakeByteStreamOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">KeyValuePair<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">object</span><span class=\"token punctuation\">></span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span></span> postData<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">StringBuilder</span> sb <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">StringBuilder</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>postData<span class=\"token punctuation\">.</span>Length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">KeyValuePair<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">object</span><span class=\"token punctuation\">></span></span> postDataEntry <span class=\"token keyword\">in</span> postData<span class=\"token punctuation\">)</span>\n            <span class=\"token punctuation\">{</span>\n                sb<span class=\"token punctuation\">.</span><span class=\"token function\">Append</span><span class=\"token punctuation\">(</span>postDataEntry<span class=\"token punctuation\">.</span>Key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Append</span><span class=\"token punctuation\">(</span><span class=\"token string character\">'='</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Append</span><span class=\"token punctuation\">(</span>postDataEntry<span class=\"token punctuation\">.</span>Value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Append</span><span class=\"token punctuation\">(</span><span class=\"token string character\">'&amp;'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n            sb<span class=\"token punctuation\">.</span><span class=\"token function\">Remove</span><span class=\"token punctuation\">(</span>sb<span class=\"token punctuation\">.</span>Length <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">return</span> ASCIIEncoding<span class=\"token punctuation\">.</span>ASCII<span class=\"token punctuation\">.</span><span class=\"token function\">GetBytes</span><span class=\"token punctuation\">(</span>sb<span class=\"token punctuation\">.</span><span class=\"token function\">ToString</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For example, I can use it like so:</p>\n<div class=\"gatsby-highlight\" data-language=\"csharp\"><pre class=\"language-csharp\"><code class=\"language-csharp\"><span class=\"token keyword\">using</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">IE</span> ie <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">IE</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Navigator</span> navigator <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Navigator</span><span class=\"token punctuation\">(</span>ie<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    navigator<span class=\"token punctuation\">.</span><span class=\"token function\">Post</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">Uri</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"http://www.foo.com/\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">new</span> <span class=\"token constructor-invocation class-name\">KeyValuePair<span class=\"token punctuation\">&lt;</span><span class=\"token keyword\">string</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">object</span><span class=\"token punctuation\">></span></span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Assert<span class=\"token punctuation\">.</span><span class=\"token function\">AreEqual</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"OK\"</span><span class=\"token punctuation\">,</span> ie<span class=\"token punctuation\">.</span>Text<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"Sending POST requests with Watin","date":"July 07, 2008","description":null}},"previous":{"fields":{"slug":"/2008/07/01/breaking-encapsulation-with-collections/"},"frontmatter":{"title":"Breaking encapsulation with collections"}},"next":{"fields":{"slug":"/2008/07/08/internet-explorer-automationwatin-catching-navigation-error-codes/"},"frontmatter":{"title":"Internet Explorer automation/Watin: catching navigation error codes"}}},"pageContext":{"id":"14b7e522-3755-5bca-b38a-50131db63e23","previousPostId":"88dd08d0-efe1-56f6-b689-d7790fe886bc","nextPostId":"3cf068a6-4bb1-5e61-af41-8631917fa741"}},"staticQueryHashes":["2841359383","3257411868"]}