FindAll не получает все дочерние объекты в WPFListView, используя SilkTest 17.5 - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно прокрутить до элемента, присутствующего в таблице для приложения WPF, значение динамически предоставляется во время выполнения.

У меня есть код ниже, который отлично работает для небольшого списка, так как полоса прокрутки перемещается правильно, но не прокручивается до элементов в конце длинного списка.

Мой список, как показано ниже, и я прокручиваю, используя имена (A1, A2, ...)

A1   1   3  

A2   1   5

S1   1   3  

Q2   1   5

.....

.....

Z7   1   3  

Z82   1   5

Z9   1   3  

Imports SilkTest.Ntf.Wpf
Public Module Main
  Dim _desktop As Desktop = Agent.Desktop

  Public Sub Main()
    Dim iPosition As Double = 0.5
    Dim iSumPosition As Double = 0.0
    Dim sObjlocator As String = "//WPFListView[@automationId='MyListView']"
    Dim sData As String = "Z118"
    Dim sObjSublocator As String = "//WPFToggleButton[@caption='*']"

    Dim rows As IList = _desktop.WPFListView(sObjlocator).FindAll(sObjSublocator)

    Dim sObjExist As Boolean = False
    For Each row As WPFToggleButton In rows
      Dim sString As String = row.Text
      Console.WriteLine(sString)     '  <--names
      If Trim(sString) = sData Then
        sObjExist = True
        Exit For
      Else
        iSumPosition += iPosition
        Console.WriteLine(iSumPosition)  ' <--Position

       _desktop.WPFListView(sObjlocator).ScrollToPosition(iSumPosition, Orientation.Vertical)
      End If 
    Next
  End Sub
End Module

Выпуск:

Как показано в выводе ниже, напечатанные строки A1, A10, ... из Console.WriteLine(sString) и числа из Console.WriteLine(iSumPosition) работают только для нескольких объектов вне экрана, полоса прокрутки перемещается вертикально вниз, но если мой список большой и мне нужно многократно прокручивать, прокрутка больше не работает.

Полоса прокрутки не прокручивается до конца для имен рядом с концом списка, только если мой список очень мал, он также прокручивается до самого последнего элемента.

В режиме отладки я вижу, что список строк (Dim rows As IList = _desktop.WPFListView(sObjlocator).FindAll(sObjSublocator)) не имеет значений (имен) для элементов в конце списка.

В выводе ниже мы видим, что имена и позиции печатаются изначально, но ближе к концу длинного списка печатаются только позиции.

Выход:

A1
0.5
A10
1
A11
1.5
A12
2

...

...

...

9.5

10

10.5

Дополнительная информация:

  • Тип локатора - WPFScrollBar.
  • Параметры предварительного заполнения форм WPF в SilkTest: yes
  • Использование средства автоматизации тестирования: Microfocus SilkTest 17,5

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете попробовать использовать цикл while для постоянного увеличения значения полосы прокрутки (для прокрутки вниз) до достижения максимального значения полосы прокрутки. Ниже я собрал некоторый пример кода, который демонстрирует это при исполнении с примером приложения WPF, поставляемого с Silk Test.

Imports SilkTest.Ntf.Wpf
Public Module Main
Dim _desktop As Desktop = Agent.Desktop

Public Sub Main()

    With _desktop.WPFWindow("@caption='WPF Sample Application'")
        .SetActive()
        .WPFMenu().Select("/Controls/Basic Controls")
    End With

    With _desktop.WPFWindow("@caption='Basic Controls'")
        .WPFTabControl("@automationId='tabControl'").Select("ScrollBar")
        Dim sScrollBar As WPFScrollBar
        sScrollBar = .WPFScrollBar("//WPFTabControl[@automationId='tabControl']/WPFScrollBar[2]")
        'Set the scroll bar to the top
        sScrollBar.SetValue(0.0)

        System.Threading.Thread.Sleep(1000)

        Dim iPosition As Double
        iPosition = 0.0

        While sScrollBar.Value < sScrollBar.Maximum
            Console.WriteLine("scroll Bar Maximum  " + sScrollBar.Maximum.ToString)
            Console.WriteLine("scroll Bar Value  " + sScrollBar.Value.ToString)

            'Set Scroll bar position
            sScrollBar.SetValue(iPosition)
            'Return text within scroll          
            Console.WriteLine(.WPFTextBox("@automationId='txtScrollBarEvents'").Text)
            'Increment scroll bar position for each iteration
            iPosition = iPosition + 0.1
            System.Threading.Thread.Sleep(1000)
        End While   

        .Close()
  End With

  End Sub
End Module
...