0

我的应用程序有问题,使用 WatiN 用 c# 编写。该应用程序创建了几个线程,每个线程都打开浏览器和相同的页面。
该页面由 HTML select 元素
选择元素示例
和一个提交按钮组成。
浏览器应该选择一个特定的选项并同时单击提交按钮而是“一个接一个”地进行。以下是主要代码行:

[STAThread]
static void Main(string[] args)
{ 

    for (int i = 0; i < numOfThreads;i++ )
    {
        var t = new Thread(() => RealStart(urls[i]));
        t.SetApartmentState(ApartmentState.STA);
        t.IsBackground = true;
        t.Start();
    }
}

private static void RealStart(string url)
    {
        using (var firstBrowser = new IE())
        {                
            firstBrowser.GoTo(url);
            firstBrowser.BringToFront();           
            OptionCollection options = firstBrowser.SelectList("Select").Options;
            options[1].Select();
            firstBrowser.Button(Find.ByName("Button")).Click();
            firstBrowser.Close();
        }
    }

“一一”选择而不是同时选择的原因是什么?

4

1 回答 1

0

解决方案:
经过长时间的研究,我放弃了使用 WatiN 处理这个鱼。
相反,我创建了 HttpWebRequest 并将其发布到特定的 URL。
奇迹般有效:

HttpWebRequest httpWReq = (HttpWebRequest)WebRequest.Create("http://domain.com/page.aspx");
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "username=user";
postData += "&password=pass";
byte[] data = encoding.GetBytes(postData);
httpWReq.Method = "POST";
httpWReq.ContentType = "application/x-www-form-urlencoded";
httpWReq.ContentLength = data.Length;
using (Stream stream = httpWReq.GetRequestStream())
{
   stream.Write(data,0,data.Length);
}
HttpWebResponse response = (HttpWebResponse)httpWReq.GetResponse();
string responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

我通过为每个请求创建一个线程来同时发送这些请求。

于 2013-12-06T19:08:21.247 回答