2016-03-28 8 views
1

Во-первых, я использую VS2013 Winforms .net 4.0.Visual Studio Автоматизированный тест пользовательского интерфейса

После исключения всех других возможностей (из моего набора возможностей) преступник представляется Me.close() в одной конкретной форме. После того, как метод me.close() запускается, приложение coded-ui-test, похоже, замерзает и не дает никакой информации о кнопках, которые я нажимаю, или текст, который я вводил. Когда я прошу его генерировать код, он идет до тех пор, как за 1 час до того, как я решит отказаться и убить процесс. Когда я пробую тот же тест без me.close, он работает так, как ожидалось. Кто-нибудь знает, как исправить эту ошибку в автоматическом тестировании ui? Если вы не можете предложить какие-либо альтернативы, пожалуйста?

Редактировать: Этого не происходит, когда я просто нажимаю кнопку «X» формы в правом верхнем углу. Это очень странно.

Редактировать 2: Я пробовал это в новом проекте. Это действительно me.close, что приводит к тому, что закодированное приложение для тестирования ui «замораживается», так что я не могу сгенерировать автоматизированный код, и в итоге я застрял на панели загрузки «Подождите, подождите».

Редактирование 3: Кажется, имеет особое значение для вызова me.close в обработчике кликов с ультрааффиксатором ультрабатона. Вау, вот пример.

Дизайнер

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ 
Partial Class closemepls 
Inherits System.Windows.Forms.Form 

'Form overrides dispose to clean up the component list. 
<System.Diagnostics.DebuggerNonUserCode()> _ 
Protected Overrides Sub Dispose(ByVal disposing As Boolean) 
    Try 
     If disposing AndAlso components IsNot Nothing Then 
      components.Dispose() 
     End If 
    Finally 
     MyBase.Dispose(disposing) 
    End Try 
End Sub 

'Required by the Windows Form Designer 
Private components As System.ComponentModel.IContainer 

'NOTE: The following procedure is required by the Windows Form Designer 
'It can be modified using the Windows Form Designer. 
'Do not modify it using the code editor. 
<System.Diagnostics.DebuggerStepThrough()> _ 
Private Sub InitializeComponent() 
    Me.UltraButton1 = New Infragistics.Win.Misc.UltraButton() 
    Me.SuspendLayout() 
    ' 
    'UltraButton1 
    ' 
    Me.UltraButton1.Location = New System.Drawing.Point(45, 47) 
    Me.UltraButton1.Name = "UltraButton1" 
    Me.UltraButton1.Size = New System.Drawing.Size(232, 157) 
    Me.UltraButton1.TabIndex = 0 
    Me.UltraButton1.Text = "UltraButton1" 
    ' 
    'closemepls 
    ' 
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 
    Me.ClientSize = New System.Drawing.Size(284, 262) 
    Me.Controls.Add(Me.UltraButton1) 
    Me.Name = "closemepls" 
    Me.Text = "closemepls" 
    Me.ResumeLayout(False) 

End Sub 
Friend WithEvents UltraButton1 As Infragistics.Win.Misc.UltraButton 
End Class 

Код

Public Class closemepls 

Private Sub UltraButton1_Click(sender As Object, e As EventArgs) Handles UltraButton1.Click 
    Me.Close() 
End Sub 
End Class 

Если я позвоню closemepls.showdialog() и нажмите кнопку кодированные Ui замерзает тест приложения! Инфрасификация FTW.

Это результат, он не завершается даже через 1 час.

This is the hanging application I am talking about

+0

Как насчет минимального примера для воспроизведения? – Evk

+0

@ Evk im not sure, что SO предупреждает вас об изменении, но я добавил пример, однако для его запуска требуется сторонний элемент управления. – codemonkeyliketab

+0

Где находится документация по методу 'close'. Мой быстрый поиск в Интернете находит http://help.infragistics.com/Help/Doc/WinForms/2011.2/CLR2.0/html/Infragistics2.Win.Misc.v11.2~Infragistics.Win.Misc.UltraButton_members.html о 'ultrabutton', но на этой странице нет' close'. Кроме того, какой уровень поддержки требует Infragistics для кодированного интерфейса? – AdrianHHH

ответ

0

У меня были проблемы, как, что в WPF раньше.

Вот как я его нашел: прокомментируйте все, затем найдите код, который вызывает проблему, добавив блоки назад один за другим.

Это что-то связанное (что-то, хотя и не данные и, скорее всего, элемент управления) не освобождается.

+0

Я прокомментировал почти весь код. Все, что осталось, это конструктор по умолчанию и кнопка, которая вызывает me.close при нажатии. Это защитный вызов me.close, вызывающий зависание приложения с кодированным ui test. Это так ужасно. – codemonkeyliketab

+0

Попытайтесь использовать Me.Hide –

+0

Это сработало, но это не идеальный обходной путь. Кодовая база, над которой я работаю, довольно велика и, вероятно, имеет код, зависящий от закрытия формы. Спасибо, хотя я попробую это и посмотрю, работает ли это для нас. – codemonkeyliketab

0

Я не пробовал смешивания CodedUI и VB много, но я надеялся, что этот вопрос может помочь вам:

Me.Close does not work

Один, это вовсе не значит, верно? Но в сочетании с тем, как работает CodedUI, он может дать ключ. Помните, что при запуске теста вы технически инициируете UITesting.Playback, который является процессом. Вы можете что-то добавить к вашему методу TestCleanup, что делает, что все процессы прекращаются, как и (Имейте в виду, что это для тестирования браузера):

/// <summary> 
/// Closes the test browser and ends test playback 
/// </summary> 
[TestCleanup]//The decorator is what makes this a method a test cleanup 
public void CleanTest() 
{   
    if (Playback.IsInitialized) //This is the important part. 
    { 
     Playback.Cleanup(); 
    } 
    if (browserWindow.Exists) 
    { 
     browserWindow.Close(); 
    } 
} 

Это просто выстрел в темноте и Возможно, я даже неправильно понимаю, что вам нужно, но я предполагаю, что в ваших реальных и примерных областях вы закрываете все приложение? Это может быть вопросом для Infragistics в конце дня. Удачи!

+0

Я добавил картинку, чтобы объяснить ее лучше, я думаю, вы думаете, что я вишу во время тестирования юи-теста, но приложение - это тот, который висит. Я не думаю, что тег TestCleanup можно использовать в приложении winform правильно? – codemonkeyliketab

+0

Итак, ваше приложение не то, что висит. Двигатель CodedUI - это то, что висит на данный момент. Вы можете вызвать методы TestCleanup во время выполнения теста CodedUI, поэтому я думаю, что вы правы в том, что мое предложение может вам не помочь. Дайте мне знать, если это правильно: у вас есть приложение winforms с элементами управления infragistics. В решении приложения у вас есть проект CodedUI. В рамках этого проекта CodedUI у вас есть класс, в котором у вас есть тесты. Когда тесты делают что-то, что вызывает me.close, движок CodedUI не создает артефакты кода и карты - вместо этого VS зависает. – Ryanman

+0

Код приложения и проект CodedUI находятся в разных решениях, я думаю, что это не повлияло на меня, когда они были в одном решении, и вот почему. В тестовом проекте В методе меток по умолчанию я нажимаю ctrl + \ & ctrl + c, чтобы запустить приложение CodedUI Engine (мое изображение). Затем я нажимаю exe из встроенного приложения и открываю дочернюю форму с помощью ultrabutton, затем нажимаю на дочерний ultrabutton, чтобы вызвать me.close, а затем закодированное приложение ui engine замерзает, и я не могу нажать кнопку, которая вставляет код из движка в мой CodedUITest чтобы я мог запустить его позже. – codemonkeyliketab

0

Возможно, это была проблема, с которой я столкнулся при использовании MTM, на нескольких машинах, если они выполняли любую форму захвата для полученного теста.Они пытаются сохранить его на незаконном пути (найдено в средстве просмотра событий). После ремонта на VS таким образом MTM был отремонтирован и работал на некоторых машинах. Другие могут быть исправлены только при обновлении 4.

Но код, который я бы посоветовал, попробовал нажать кнопку закрытия на самой форме, чтобы узнать, получилось ли у вас другое поведение.

Dim closeButton = New WinButton(YourWindow); 
closeButton.SearchProperties(UITestControl.PropertyNames.Name) = "Close"; 
Mouse.Click(closeButton);