Событие не сработает при выборе элемента списка - .Net UIAutomation framework - PullRequest
1 голос
/ 03 сентября 2011

Сегодня я изучаю среду автоматизации .NET UI. Итак, что я сделал до сих пор (ссылаясь на различные статьи)

  1. У вас есть WinForm с элементами управления Listbox, PictureBox, TextBox и Button. Обратитесь к рисунку, пожалуйста: WinForm to be tested

  2. У меня есть consoleapp, в котором есть все тестовые сценарии UI Automation или код, автоматизирующий тестирование пользовательского интерфейса winform.

Рабочая: После выбора элемента из списка окно изображения загружает некоторое изображение и отображает его (код для загрузки находится в событии SelectedIndexChanged списка).

Ниже приведен код элемента управления Forms listBox:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        textBox1.BackColor = Color.White;
        pictureBox1.Image = imageCollection.ElementAtOrDefault(listBox1.SelectedIndex);
        textBox1.Text = pictureBox1.Image.GetHashCode().ToString();
        this.Refresh();
    }

Теперь мой код сценария тестирования UIAutomation выглядит следующим образом: (показана только необходимая часть)

        AutomationElement listBoxElement = mainFormWindowElement.FindFirst(TreeScope.Children,
            new PropertyCondition(AutomationElement.AutomationIdProperty, "listBox1"));

        Assert.IsNotNull(listBoxElement, "Cant find the listbox element");

        AutomationElementCollection listBoxItems = 
            listBoxElement.FindAll(TreeScope.Children,new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.ListItem));

        AutomationElement itemToSelectInListBox = listBoxItems[new Random().Next(0, listBoxItems.Count - 1)];

        Object selectPattern = null;

        if (itemToSelectInListBox.TryGetCurrentPattern(SelectionItemPattern.Pattern, out selectPattern))
        {
            (selectPattern as SelectionItemPattern).AddToSelection();
            (selectPattern as SelectionItemPattern).Select();

        }

После выполнения кода метод Select () работает, и элемент списка формы выбирается, как показано : enter image description here

Как вы можете видеть на изображении, элемент списка выбирается, но событие SelectedIndexChange не запускается, и окно рисунка не отражает изменения.

Так что любые указатели очень помогают:)

Спасибо

Ответы [ 4 ]

1 голос
/ 13 января 2017

Возможно, немного слишком поздно, но я все еще надеюсь, что это кому-нибудь пригодится:

У меня была точно такая же проблема.Был в состоянии вызвать событие щелчком мыши.Для следующего кода вам понадобится ссылка на Microsoft.TestAPI (http://www.nuget.org/packages/Microsoft.TestApi/0.6.0),, но есть и другие способы имитации клика.

    static AutomationElement SelectItem(AutomationElement item)
    {
        if (item != null)
        {
            ((SelectionItemPattern)item.GetCurrentPattern(SelectionItemPattern.Pattern)).Select();
            System.Windows.Point point = item.GetClickablePoint();
            Microsoft.Test.Input.Mouse.MoveTo(new System.Drawing.Point((int)point.X, (int)point.Y));
            Microsoft.Test.Input.Mouse.Click(MouseButton.Left);
        }

        return item;
    }
1 голос
/ 12 января 2012

Это работает, если SelectionMode изменен на MultiSimple.Я не уверен, почему это происходит.Но если для SelectionMode установлено значение One, выбранный индекс не запускается.

1 голос
/ 04 сентября 2011

@ zenwalker Заполнен ли список привязкой данных?Если да, есть шанс, что события выбора не сработают.Можете ли вы поделиться кодом, который привязывает данные к списку?Извиняюсь за то, что поставил это в ответ, у меня недостаточно представителей для добавления комментариев.

Также вы можете обратиться к следующей статье SO, чтобы увидеть, как мы можем сделать привязку данных к listbox Winforms, databinding, Listboxи текстовое поле

0 голосов
/ 05 января 2014

событие SelectedIndexChanged не запускается, если SelectionMode установлено в единичное или единичное состояние.

Убедитесь, что вы обновляете PictureBox также во время события SelectionChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...