我正在做一些自动化工作,可以绕过一个网站&发布到HTML表单没问题,但现在我遇到了新的挑战, Ajax 表单。
由于没有可读的源代码,我想知道是否可以在C#中以progamatically方式填写Ajax表单。我目前正在使用不可见的axWebBrowser。
提前感谢您的帮助!
答案 0 :(得分:6)
是的,但我建议使用不同的方法来请求/响应服务器页面,包括常规页面和AJAX处理程序页面。
在c#中,尝试使用WebRequest / WebResponse或更专业的HttpWebRequest / HttpWebResponse类。
Ajax只是一个技术的“花哨”名称,它允许Javascript向服务器发出HTTP请求,该服务器通常实现一些处理程序,这些处理程序为Javascript调用程序生成专门的轻量级内容(通常编码为JSON)。
因此,为了模拟AJAX调用,您所要做的就是检查目标应用程序(您要“发布”到的网页)并查看用于AJAX通信的格式 - 然后复制页面的Javascript C#使用WebREquest / WebResponse类的行为。
请参阅Firebug - 一个很棒的工具,可以让您检查网页,以确定它所做的调用,哪些页面以及这些页面的响应。它在检查AJAX调用方面做得非常好。
以下是如何执行网络请求的一个非常简单的示例:
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://www.mysite.com");
using (HttpWebResponse resp = (HttpWebResponse)wReq.GetResponse())
{
// NOTE: A better approach would be to use the encoding returned by the server in
// the Response headers (I'm using UTF 8 for brevity)
using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
{
string content = sr.ReadToEnd();
// Do something with the content
}
}
POST也是一个请求,但使用不同的方法。有关如何执行非常简单的帖子的示例,请参阅this page。
编辑 - 有关使用Firebug检查网页行为的详细信息
通过检查您尝试复制的页面,我的意思是使用工具(我使用Firebug - 在Firefox上)来确定页面和服务器之间的信息流。
使用Firebug,您可以使用“Net”和“Console”面板执行此操作。 “Net”面板列出了加载页面时浏览器执行的所有请求。而“控制台”将列出页面加载后发生的页面与服务器之间的通信。在页面加载后发生的那些通信基本上是您要复制的AJAX调用(注意:必须在Firebug中对网络监视进行调整才能使其工作)
查看Michael Sync's tutorial以了解有关Firebug的更多信息并尝试使用“控制台”面板了解有关AJAX请求的详情。
关于“使用WebRequest / WebResponse从C#复制页面的行为” - 您必须意识到的是,正如我之前所说,Javascript AJAX调用只不过是HTTP请求。这是一个HTTP请求,Javacript在网络服务器“幕后”或带外进行。为了复制这个,它与复制正常的GET或正常的POST没有什么不同,如上所示。这就是Firebug的用武之地。使用它,您可以查看请求,就像Javascript生成它们一样 - 查看“控制台”面板,查看请求消息的外观。
然后你可以使用与上面相同的技术,使用HttpWebRequest / HttpWebResponse来生成与Javascript相同类型的请求,而只使用C#来实现。
Gregg,我希望这能澄清我的答案,但除此之外,我建议玩Firebug并且可能了解更多关于HTTP协议如何工作以及AJAX如何作为一种技术工作。答案 1 :(得分:1)
你看过使用Selenium吗? AFAIK,您可以在C#中编写测试用例,我知道我们的测试人员在UI测试启用Ajax的ASP.NET站点之前已成功使用它