C# 使用WatiN脚本将按键笔划(即输入键)传递到应用程序中

C# 使用WatiN脚本将按键笔划(即输入键)传递到应用程序中,c#,watin,C#,Watin,我正在使用WatiN测试工具。我可以使用WatiN脚本向应用程序传递一个按键笔划(即按enter键)吗 该选项在WatiR中可用。此选项在WatiN中可用吗?编辑:进一步检查后,我发现发送ENTER键的标准方式在WatiN中不如在WatiR中有效。你需要使用 另外,我建议您下载 下面是示例代码 using(IE ie = new IE("http://someurl")) { TextField myTxt = ie.TextField(Find.ById("myTextBox")).Typ

我正在使用WatiN测试工具。我可以使用WatiN脚本向应用程序传递一个按键笔划(即按enter键)吗


该选项在WatiR中可用。此选项在WatiN中可用吗?

编辑:进一步检查后,我发现发送ENTER键的标准方式在WatiN中不如在WatiR中有效。你需要使用

另外,我建议您下载

下面是示例代码

using(IE ie = new IE("http://someurl"))
{
  TextField myTxt = ie.TextField(Find.ById("myTextBox")).TypeText("some value");
  System.Windows.Forms.SendKeys.SendWait("{ENTER}");      
}
试试这个:

//  This method is designed to simulate an end-user pressing the ENTER key.
private void CheckKeys(object sender, KeyPressEventArgs e)
{
    //  Set the key to be pressed; in this case, the ENTER key.
    if (e.KeyChar == (char)13)
    {
        //  ENTER key pressed.
        e.Handled = true;
    }
}

然后,当您需要模拟按下ENTER键时,只需调用此方法。

为什么不执行以下操作

using(IE ie = new IE("http://someurl"))
{
  TextField myTxt = ie.TextField(Find.ById("myTextBox")).TypeText("some value");
  TextField.KeyPress('\r');   \\ \r is a carriage return   
}

为我的测试工作我正在使用Watin开发一个测试上面的答案很好,只要浏览器有焦点,如果没有,那么SendKeys.SendWait会在任何有焦点的应用程序上触发

ie.Eval("var e = $.Event('keydown');e.which = $.ui.keyCode.ENTER;$('#myTextBox').trigger(e);");

虽然有点笨重,但不管怎么说,这都会触发回车键。

网站上有一篇关于这方面的非常好的博客文章

它解释了如何将Enter press添加为扩展方法,如下所示:

public static class MyWatiNExtensions
{
    [DllImport("user32.dll")]
    private static extern IntPtr SetFocus(IntPtr hWnd);

    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetForegroundWindow(IntPtr hWnd);

    public static void TypeTextQuickly(this TextField textField, string text)
    {
        textField.SetAttributeValue("value", text);
    }

    public static void PressEnter(this TextField textField)
    {
        SetForegroundWindow(textField.DomContainer.hWnd);
        SetFocus(textField.DomContainer.hWnd);
        textField.Focus();
        System.Windows.Forms.SendKeys.SendWait("{ENTER}");
        Thread.Sleep(1000);
    }
}
这使得在测试中按Enter键非常容易

browser.TextField("txtSearchLarge").PressEnter();

您必须使用
System.Windows.Forms

我将其缩短为:.TypeText(“某些值”);不幸的是,DarthOpto按键('\r')不是真正的按键。我在测试中的应用程序中发现了一个bug:当我按下ENTER键时,它会关闭表单而不保存任何更改。我无法用按键('\r')重现该错误,但Windows窗体方法可以很好地工作public static TextField TypeTextQuick(此TextField TextField,string text){TextField.SetAttributeValue(“value”,text);return TextField;}public static TextField HitEnter(此TextField TextField){SetForegroundWindow(textField.DomContainer.hWnd);SetFocus(textField.DomContainer.hWnd);textField.Focus();textField.Highlight(false);System.Windows.Forms.SendKeys.SendWait({ENTER}”);Thread.Sleep(1000);return textField;}更改了它,这样我就可以进行链接而不突出显示字段。例如:ClientId.TypeTextQuick(“3050”).HitEnter();我更喜欢这一个,但似乎您使用的是jQuery和文本字段的id,有没有其他方法可以将enter传递到没有id且使用纯JavaScript代码的文本字段?谢谢adv。
var textUrl = ie.TextField("txtUrl");
textUrl.Focus();
textUrl.TypeText("www.mydomain.com");
Thread.Sleep(3000);
textUrl.KeyDown((char)Keys.Down);
textUrl.KeyDown((char)Keys.Down);
textUrl.KeyDown((char)Keys.Enter);