Передайте нажатие клавиши (т. Е. Enter Key) в приложение, используя сценарии WatiN - PullRequest
13 голосов
/ 13 мая 2009

Я использую инструмент тестирования WatiN. Могу ли я передать нажатие клавиши (т. Е. Нажатием клавиши ввода) в приложение, используя сценарии WatiN?

Эта опция была доступна в WatiR. Эта опция доступна в WatiN?

Ответы [ 6 ]

11 голосов
/ 13 мая 2009

РЕДАКТИРОВАТЬ: После дальнейшей проверки я обнаружил, что стандартный способ отправки клавиши ВВОД не работает в WatiN, как в WatiR. Вам нужно использовать System.Windows.Forms.SendKeys

Кроме того, я рекомендую вам загрузить WatiN Test Recorder .

Вот пример кода.

using(IE ie = new IE("http://someurl"))
{
  TextField myTxt = ie.TextField(Find.ById("myTextBox")).TypeText("some value");
  System.Windows.Forms.SendKeys.SendWait("{ENTER}");      
}
5 голосов
/ 05 декабря 2012
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);

Вы должны использовать System.Windows.Forms.

5 голосов
/ 29 марта 2012

Есть действительно хорошая статья в блоге об этом на Блог Dev Dev

Это объясняет, как вы можете добавить Enter как метод расширения следующим образом:

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();
3 голосов
/ 17 ноября 2011

Почему бы просто не сделать следующее?

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

2 голосов
/ 14 марта 2012

приведенный выше ответ работает нормально, если браузер имеет фокус, если нет, то SendKeys.SendWait запускает любое приложение, на котором установлен фокус.

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

Будучи немного неуклюжим, это вызовет нажатие клавиши ввода независимо.

0 голосов
/ 19 августа 2011

Попробуйте это:

//  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.

...