c# - 如何使用 SAPFEWSELib 在 SAP 中控制 GuiScrollbar?
问题描述
我曾经使用 VBA 来自动化 SAP,现在我使用 C# 和 SAPFEWSELib 来控制 SAP。我可以控制按钮或文本字段,但我在滚动条上做错了,不知道问题出在哪里。
我的目标是滚动条,但不在 Table 或 GridView 中,在这种情况下,我可以避免滚动,但规则当然是一样的。我尝试使用 SAPFEWSELib GuiScrollbar 类。我可以使用 GuiButton、GuiStatusbar、GuiSession 等等。我的应用程序工作正常,用户在他们的机器上运行它,所以我想我以正确的方式使用 SAPFEWSELib,但我在 SAP 和编码方面并不先进,所以这个错误可能是非常基本的。
我得到的错误:
System.InvalidCastException:“无法将“System.__ComObject”类型的 COM 对象转换为接口类型“SAPFEWSELib.GuiScrollbar”。此操作失败,因为 IID 为“{99CD4189-6B59-4596-B1DF-0C1121BB5240}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) 。
我使用 SAP 记录器并从 VBS 获取 ID,然后在我的脚本中使用它。对于 SAP 中的对象类型,我创建了自己的类,一个按钮的示例:
public class SAPElementButton
{
GuiSession _session;
public string _Id;
public SAPElementButton(GuiSession session, string Id)
{
_session = session;
_Id = Id;
}
public void pressbutton()
{
{
GuiButton _SapButton = (GuiButton)_session.FindById(_session.Id.ToString() + _Id);
_SapButton.SetFocus();
_SapButton.Press();
}
}
}
多亏了这一点,我可以创建我的类的一个对象,在该对象中我给出了类方法中 FindByID 方法使用的路径。在上面的示例中,我将会话和按钮 ID 作为构造函数的参数。在我使用方法“pressbutton”的逻辑部分,我可以避免长 ID,这会使我的代码无法运行。这可能看起来有点复杂和浪费时间,但让我来管理复杂的逻辑。上面的代码工作正常,例如,我附上了它。
问题是当我尝试控制 Scrollbar 时,我收到类似上面的错误:
public class SAPElementVerticalScrollbar
{
GuiSession _session;
public string _Id;
public SAPElementVerticalScrollbar(GuiSession session, string Id)
{
_session = session;
_Id = Id;
}
public void setScrollbar(int possition)
{
{
GuiScrollbar sAPElementVerticalScroll = (GuiScrollbar)_session.FindById(_session.Id.ToString() + _Id);
sAPElementVerticalScroll.Position=possition;
}
}
}
如果错误是此类 Id 不可用,则很明显,但语法似乎很好并且 SAP 中的对象可用。
也许我使用了 SAPFEWSELib 中的错误类,或者我不知道使用另一个不错的 .dll 库来代替那个库?也许有一种方法可以像按钮一样单击 ScrollBar 中的“箭头”?我希望有一个人可以帮助我。如果需要,我会得到详细信息。在此处输入图像描述
解决方案
您可能只是收到了错误的查找对象。
您可以通过以下方式检查收到的对象类型:
object comObject = _session.FindById(_session.Id.ToString() + _Id);
string comType = Microsoft.VisualBasic.Information.TypeName(comObject);
// comType will now contain something like "GuiButton" or "GuiScrollbar"
此代码需要对 Microsoft.VisualBasic 程序集的引用。
如果您真的收到 GuiScrollbar 它应该可以工作,我已经看到类似实施的成功案例。
如果您得到一些不可用的东西,请尝试将对象转换为SAPFEWSELib.GuiVComponent
,然后使用属性Left
和Top
获取滚动条的位置。这些应该是以像素为单位的屏幕相对坐标。
然后,理论上,您可以通过其他方式模拟鼠标点击,例如类似于以下内容:How do you simulation Mouse Click in C#?
在使用 GUI 脚本编写期间,我没有看到任何其他花哨的库,因此您可能会被 SAPFEWSELib 卡住。我们在工作场所处理这个问题的方式是使用一个包装库来解决脚本 API 中的一些问题。(不幸的是,我不能分享它,因为它不公开)
推荐阅读
- javascript - Appium 如何检查 iOS 应用的 UI 以显示视图层次结构?
- jquery - 选择离被点击元素最近的类
- vba - Ms-Access to Excel Late Binging VBA
- python - 使用 JIRA Python API 时缺少属性
- python - 在网格中显示图像
- apache-spark - Spark - 编写大型数据框问题
- macros - 在调用中计时执行表单的 Common Lisp 宏
- swift - 如何从主 Storyboard 实例化 NSCollectionViewItem 以在 collectionView 中使用
- azure-sqldw - Azure SQL 数据仓库——存储计费
- html - 标签和句号之间的换行符