查找列表末尾的算法 (SAP GUI)

Algorithm for finding end of a list (SAP GUI)

我正在编写一个脚本,用于将元素添加到 SAP GUI 屏幕中的列表。现在,似乎在使用 SAP GUI 时,没有任何东西 "exists" 除非它实际出现在屏幕上,所以第一步涉及找到列表的末尾。

我通过滚动浏览每个元素并检查它是否为空白来完成此操作。

Do While Not blank
If session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,0]").Text = "" Then blank = True
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = i
i = i + 1
Loop

但是,对于非常大的现有列表,这需要很长时间。我试图找出一种方法来更快地找到终点。一些 truths/limitations 我知道:

  1. 我假设我不知道列表长度。
  2. 我无法命令 verticalScrollbar.position 超出
    的结尾 名单。对于前。如果列表包含 62 个元素,.verticalScrollbar.Position = 100 将不起作用。
  3. 在上述示例中,SAP 不会抛出错误。什么都没有发生,然后执行下一行代码。
  4. 所有对元素的引用都是相对于它们在屏幕上的位置。例如,如果我向下滚动 5 个位置,则整个列表的第 6 个元素实际上会索引为 1。
  5. 另一方面,verticalScrollbar.Position 是绝对的

我正在考虑执行以下操作(非常伪代码):

i = 0
do while scrolled = true
    scrolled = false
    a = GUIlist[0]
    verticalScrollbar.Position = i + 1000
    b = GUIlist[0]
    'check to see the first element shown has changed
    if a <> b then 
        scrolled = true
        i = i + 1000
    end if
loop

do while scrolled = true
    scrolled = false
    a = GUIlist[0]
    verticalScrollbar.Position = i + 500
    b = GUIlist[0]
    if a <> b then 
        scrolled = true
        i = i + 500
    end if
loop

...等等,直到我将 i 迭代一个。

是否有普遍接受的更好的方法来完成这种 'search'? 任何输入表示赞赏。 谢谢

我的建议:

session.findById("wnd[0]").sendVKey 83 
myPosition = session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position
do 
if session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010/ctxtMAPL-MATNR[2,0]").Text = ""  then exit do
myPosition = myPosition + 1
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = myPosition
loop 
msgbox myPosition

此致, 脚本人

只为走到最后

max_scrollbar = session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Maximum ' Get the maximum scrollbar value
session.findById("wnd[1]/usr/tblSAPLCZDITCTRL_4010").verticalScrollbar.Position = max_scrollbar  ' Go to the end