VBA驱动SAP GUI自动化:查找页面元素FindAllByName
我们在VBA中嵌入SAP原生的【脚本录制与回放】功能生成的VBS脚本,可以实现很多自动化操作。但只有我们对SAP做了一系列动作,才会得到这些动作的脚本。然而,一旦我们需要用代码提前做一些判断,然后再决定后续的动作时,这个判断的代码就无法通过【脚本录制与回放】功能录制得到。这个时候,我们需要学会看SAP GUI Scripting API。
举个小爬在实际工作中碰到的例子。我们有时候会利用脚本驱动事务代码F-02完成SAP凭证的批量录入。在凭证的行项目录入界面中,某些科目下,SAP需要我们维护【到期日】【基准日】;有些行项目下,则没有这个选项让用户维护,如下图所示:


我们需要先判断有没有【到期日】这个元素,再决定是不是要给这个元素传值。这个判断的代码就无法去录制代码得到了。
这也就是小爬今天要分享的知识点:利用FindAllByName()方法去判断是否存在某个元素。这些方法就是通过SAP GUI Scripting API学习得来。
之所以这里用到FindAllByName()而不是我们熟悉的FindById()方法,是因为当我们使用FindById()去查找某个页面中没有的元素时,程序会直接报错异常,而VBA的异常响应能力天生不足,使用FindAllByName()则完全不会存在这个问题。

从上图中可以看到,FindAllByName()方法接收两个参数,一个是元素的Name,另一个是元素的Type,而返回值是一个GuiComponentCollection对象,相当于一个数组。当我们没有找到对应的元素时,会返回一个空数组,并不会报错。
以【到期日】这个字段为例,我们还是需要借助万能的Scripting Tracker工具先找到元素的Name和Type。我们可以点击工具中的望远镜图标【查找对象】,输入关键词【到期日】,此时工具会自动帮我们定位到对应对象(灰色背景),如下图所示:

这里可以看到,【到期日】对象对应的Name:BSEG-ZFBDT,对应的Type:GuiLabel(注意,这里不用输入Type括号后面的数字)。只要判断有这个【到期日】label元素,就可以断定页面中是否有【到期日】这个GuiCTextField输入框元素。
有了这两点,我们可以这样来组织我们的VBA代码,避免程序出错和写不必要的异常响应,代码示例如下:
1 Sub Main()
2
3 Dim SapGuiAuto As Object
4 Dim app As Object
5 Dim connection As Object
6 Dim session As Object
7 Dim ZFBDT_collection As Object, cnt As Long
8
9 Set SapGuiAuto = GetObject("SAPGUI")
10 Set app = SapGuiAuto.GetScriptingEngine
11 app.HistoryEnabled = False
12 Set connection = app.Children(0)
13 If connection.DisabledByServer = True Then
14 Exit Sub
15 End If
16 Set session = connection.Children(0)
17 If session.Busy = True Then
18 Exit Sub
19 End If
20 If session.Info.IsLowSpeedConnection = True Then
21 Exit Sub
22 End If
23
24
25 session.findById("wnd[0]").maximize
26 Set ZFBDT_collection = session.findById("wnd[0]/usr").FindAllByName("BSEG-ZFBDT", "GuiLabel") '基于Name和Type 查找【到期日】元素
27 cnt = ZFBDT_collection.Count
28 If cnt = 0 Then
29 MsgBox "【到期日】元素在当前SAP会话中不存在!"
30 Else:
31 Debug.Print ZFBDT_collection(0).Text '打印对应的元素的Text属性,佐证是否为【到期日】
32 session.findById("wnd[0]/usr/ctxtBSEG-ZFBDT").Text = "2022.01.01" '找到对应的元素,传值
33 End If
34 End Sub
除了FindById,是时候开始学学FindAllByName来查找SAP GUI元素了。尤其是在VBA中做SAP GUI自动化,该方法真心好用,强推~~
欢迎扫码关注我的公众号 获取更多爬虫、数据分析的知识!

VBA驱动SAP GUI自动化:查找页面元素FindAllByName的更多相关文章
- VBA驱动SAP GUI完成界面元素值初始化
小爬日常利用VBA完成SAP GUI自动化时,经常被这个问题困扰:我们进入一个事务代码界面时,如FBL1N(供应商行项目显示),很多的 GuiTextField(文本框)对象.GuiCheckBox( ...
- VBA驱动SAP GUI实现办公自动化(一)
小爬之前写过一系列Python驱动SAP GUI实现办公自动化的文章,其实如果我们的实际业务不是太复杂,且我们对VBA语法比较熟悉的话,我们完全可以借助Excel VBA来驱动SAP GUI做很多自动 ...
- Python+Selenium自动化-定位页面元素的八种方法
Python+Selenium自动化-定位页面元素的八种方法 本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...
- 基于Selenium2+Java的UI自动化(3) - 页面元素定位
一.几种网页定位方式 webdriver的页面定位很灵活,提供了8种定位方式: 其中,常见的有三种:id .cssSelector .xpath: 一个元素如果存在 id 属性,则这个 id 的值,在 ...
- Cypress系列(16)- 查找页面元素的基本方法
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前端页面代码 后面写的 Cypress ...
- Cypress系列(17)- 查找页面元素的辅助方法
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 前言 单一的基础定位元素方法并不一定能满 ...
- 使用protractor操作页面元素
Protractor是为Angular JS应用量身打造的端到端测试框架.它可以真实的驱动浏览器,自动完成对web应用的测试.Protractor驱动浏览器使用的是WebDriver标准,所以使用起来 ...
- Selenium Web 自动化 - 如何找到元素
Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp ...
- python驱动SAP完成数据导出(一)
写在前面 我们使用Python驱动SAP时,经常会需要导出一些SAP报表数据至本地Excel文件.这个看似简单的问题背后,其实暗藏玄机,今天小爬就带各位同学好好捋捋. 以事务代码FB03(凭证清单)为 ...
- 使用webview查找元素,appium查找web页面元素
9 webview查找元素 9.1 webview 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面.它使用的内核是webkit引擎,4.4版本之后,直接使用 ...
随机推荐
- 继GitHub的Copilot收费后,亚马逊推出了 CodeWhisperer,感觉不错哟!
Copilot 是 Github 推出的一款人工智能编程助手,推出仅一年就受到大量开发者的追捧(据官方统计有 120 万用户).然而,自 2022 年 6 月起,它改为了付费订阅模式(每月 10 美元 ...
- 头文件与main函数
头文件 1.为什么要使用头文件? 程序如戏 程序中有很多元素(std::cout, system), 都是一个个演员 但是他们之间都互不认识, 但是却要一起合作, 强行编译, 就会导致错误! 得预先介 ...
- Kibana控制台(Dev Tools) Console
控制台插件提供一个用户界面来和 Elasticsearch 的 REST API 交互.控制台有两个主要部分: editor ,用来编写提交给 Elasticsearch 的请求: response ...
- MySQL集群搭建(5)-MHA高可用架构
1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...
- Compose 命令说明
命令对象与格式 对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器.如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响. 执行 ...
- DevExpress弹框、右键菜单、Grid的使用
很重要!!!Dev为了区分winform的命名,会把一些新添加的属性放在Properties对象里!!找不到想要的属性,记得到里面找找哦! 一.下拉框 在这里假设我们的数据源是db.List(),在这 ...
- 谣言检测(GACL)《Rumor Detection on Social Media with Graph Adversarial Contrastive Learning》
论文信息 论文标题:Rumor Detection on Social Media with Graph AdversarialContrastive Learning论文作者:Tiening Sun ...
- JSP实现登录删除添加星座等(带样式)
功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...
- 用户输入学号,如果是以aabcddef开头,并且后边是4位数字,前两位大于06小于等于当前年份。判断用户输入是否合法
package seven_topic; import java.util.*; public class p_19_1 { public static void main(String[] args ...
- Springboot+Vue实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面
文章目录 1.实现的效果 2.Vue前端 3.图片上传 4.字段变量根据自己的字段名自行设置(这里不给出了,哈哈哈) 5.method方法 5.1.图片显示在选择框中,同时返回后端存储的地址 5.2查 ...