2013-06-20 60 views
4

我们想在一个网站的某些任务自动化,就像有一个用户登录“,执行某些功能,阅读他们的帐户历史记录等在C#编程模拟浏览器/ .NET

我们试图模仿这一与正常的POST/GETs,但问题是,例如'登录',网站使用JavaScript代码来执行AJAX调用,并且还生成一些随机令牌。

是否可以从字面上模拟网络浏览器?例如:

  • 访问 'WWW [测试网站] .com上。'
  • 填充这些DOM项目
    • DOM项目 '用户名' 中填入 'testuser的'
    • DOM项目“密码 '填写与 'testpass'
    • 点击' 按钮DOM项目 'btnSubmit按钮'
  • 访问帐户历史
    • 读取HTML(所以我们可以分析有关每个不同的历史项目信息)
  • ...

以上可以转化成说,下面的示例代码:

var browser = new Browser(); 
var pageHomepage = browser.Load("www.test-domain.com"); 
pageHomepage.DOM.GetField("username").SetValue("testUser"); 
pageHomepage.DOM.GetField("password").SetValue("testPass"); 
pageHomepage.DOM.GetField("btnSubmit").Click(); 
var pageAccountHistory = browser.Load("www.test-domain.com/account-history/"); 
var html = pageAccountHistory.GetHtml(); 
var historyItems = parseHistoryItems(html); 
+0

尝试提琴手做到这一点。 –

回答

2

Yo你可以在C#中使用Selenium。有一个很好的教程:Data Driven Testing Using Selenium (webdriver) in C#

+0

如果目标是使用.NET,那么Selenium C#绑定是好的,或者您也可以使用Selenium和IronPython。最近我比C#更喜欢IronPython,用于.NET中的自动GUI /浏览器测试。 –

+0

Selenium网络驱动程序工作得很好,谢谢! –

+0

本教程已过时,更好的教程是[可在此处](http://toolsqa.com/selenium-c-sharp/)。 – Niek

0

尝试JMeter,它也是一个不错的自动化Web请求,也相当普遍用于网站的性能测试

1

我会建议在代码中实例化一个WebBrowser控件,并对这个实例做所有的工作,但从不在任何形式上显示它。我已经做了好几次,效果很好。唯一的缺陷是,它使用的Internet Explorer的;-)

0

或者只是尝试System.Windows.Forms.WebBrowser,例如:

this.webBrowser1.Navigate("http://games.powernet.com.ru/login"); 
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) 
    System.Windows.Forms.Application.DoEvents(); 
HtmlDocument doc = webBrowser1.Document; 
HtmlElement elem1 = doc.GetElementById("login"); 
elem1.Focus(); 
elem1.InnerText = "login"; 
HtmlElement elem2 = doc.GetElementById("pass"); 
elem2.Focus(); 
elem2.InnerText = "pass"; 
+0

你可以模拟一个锚链接,其中实际包含JavaScript代码点击? (例如:''Click here) –

+0

是的,我可以: 的foreach(的HtmlElement ELEM在doc.GetElementsByTagName( “A”)) { Console.WriteLine(elem.InnerHtml + “ - >” + elem.DomElement); elem.InvokeMember(“Click”); } –