gpt4 book ai didi

c# - 使用 Watin 的 ASP.NET Web 应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:08 25 4
gpt4 key购买 nike

我正在 Visual Studio 2012 (C#) 中试验 Watin,但我似乎无法使任何东西正常工作。目前我在 aspx 页面中有两个文本框(txtbox1 和 txtbox2)。我试图让 Watin 自动将数字输入到这两个文本框中,然后单击“计算”按钮,这会将两个数字加在一起。我安装了 Watin 框架并添加了 Watin.Core dll 作为引用。到目前为止,这是我的 .aspx 页面中的代码:

using WatiN.Core;

[STAThread]
protected void Page_Load(object sender, EventArgs e)
{
IE ie = new IE("http://localhost:5243/Addition.aspx");

ie.TextField(Find.ByName("txtbox1")).TypeText("1");
ie.TextField(Find.ByName("txtbox2")).TypeText("2");
ie.Button(Find.ByValue("Calculate")).Click();
}

我不断收到错误消息:“CurrentThread 需要将其 ApartmentState 设置为 ApartmentState.STA 才能使 Internet Explorer 自动化”。你知道什么会导致这个吗?提前感谢您的帮助!

最佳答案

首先,您要尝试从服务器端 ASP.NET 代码自动化 Internet Explorer。 这通常是个坏主意。 This article描述了使用 Office 执行此操作的含义,同样的问题也适用于 Internet Explorer。

就是说,要成功完成您尝试做的事情,您需要在服务器端运行一个 STA 线程,并在该线程内运行您的 Watin 代码。将 [STAThread] 放在您的 ASP.NET Page_Load 处理程序上不会自动实现这一点。

这是如何完成的,但是同样,不推荐在服务器上这样做:

protected void Page_Load(object sender, EventArgs e)
{
RunOnStaThread<object>(() =>
{
IE ie = new IE("http://localhost:5243/Addition.aspx");

ie.TextField(Find.ByName("txtbox1")).TypeText("1");
ie.TextField(Find.ByName("txtbox2")).TypeText("2");
ie.Button(Find.ByValue("Calculate")).Click();

return null;
});
}

static T RunOnStaThread<T>(Func<T> func)
{
var tcs = new TaskCompletionSource<T>();

var thread = new Thread(() =>
{
try
{
tcs.SetResult(func());
}
catch (Exception ex)
{
tcs.SetException(ex);
}
});

thread.IsBackground = true;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

try
{
return tcs.Task.Result;
}
finally
{
thread.Join();
}
}

关于c# - 使用 Watin 的 ASP.NET Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21589833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com