我正在编写一个脚本,将元素添加到 SAP GUI 屏幕中的列表中。现在,似乎在使用 SAP GUI 时,除非它实际上在屏幕上,否则什么都“不存在”,因此第一步涉及查找列表的末尾。
我通过滚动每个元素并检查它是否为空白来完成此操作。
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
但是,对于非常大的现有列表,这需要很长时间。我正在想办法更快地找到结局。我知道的一些事实/限制:
- 我假设我不知道列表长度。
- 我不能指挥
verticalScrollbar.position
太远超出
列表的末尾。例如。如果列表包含 62 个元素,.verticalScrollbar.Position = 100
则不起作用。 - 在上述示例中,SAP 不会引发错误。什么都没有发生,然后执行下一行代码。
- 所有对元素的引用都与它们在屏幕上的位置有关。例如,如果我向下滚动 5 个位置,整个列表的第 6 个元素实际上将索引为 1。
- 另一方面
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
一个。
是否有一种普遍接受的更好的方式来进行这种“搜索”?任何输入表示赞赏。谢谢