如何让我的 UFT 脚本根据应用程序屏幕上的标签跳过 excel 中的单元格

How do I make my UFT script skip a cell in excel based on the labels on the application screen

我有一个非常动态的应用程序可以使用 UFT 实现自动化。应用程序屏幕上的标签根据用户提供的输入而变化。我有一个 excel ,我在其中为应用程序中存在的所有可能字段设置了字段值。挑战是我希望我的 UFT 脚本只选择它在屏幕上找到字段名称的那些字段值。每次我 运行 脚本,基于屏幕上出现的任何字段的选择,我希望它只从 excel sheet 中选择那些相应的值,而忽略其中的其他值excel sheet.

例如

Excel 具有以下值

姓名:南希 8级 爱好:写作 朋友:维罗妮卡 BFF:凯伦

但在屏幕上的应用程序中只出现以下标签

姓名: 爱好: 最好的朋友:

我希望 UFT 脚本将屏幕上的字段标签与 excel 中的字段标签进行比较,并从 excel 中选择这些值(在本例中为 Name、Hobby、BFF)并忽略其他字段(年级和朋友)。

这可能吗?

为什么不直接使用

If Obj1.Exist(5) Then
    Obj1.Set ValueFromExcel1
End if

If Obj2.Exist(5) Then
   Obj2.Set ValueFromExcel2
End if

让我们假设您的应用程序在表单上显示各种编辑框以供输入,并且您正在使用 DataTable 对象来存储您的 Excel 文件。

好的,这就是我要做的。

首先...我会将对象收集到对象存储库中。我会 create/record 每个可能的编辑框作为一个单独的对象(在应用程序本身的一个对象内),确保每个对象都可以通过名称唯一标识...(如果编辑框控件本身没有唯一命名在幕后,QTP 提供了 link 到它们旁边的字幕的能力......)。此外,如果应用程序仅隐藏编辑框,则确保 Visible=True 是识别属性之一,这样当 Visible=False 时,它​​们就不会被发现。

一旦每个对象都在 OR 中,那么检查它们是否存在就是一件简单的事情。

'assuming your excel file is already imported as the global DataTable
if Window("My App").Editbox("Name").exist(0) then Window("My App").Editbox("Name").Set DataTable("Name")
if Window("My App").Editbox("Grade").exist(0) then Window("My App").Editbox("Grade").Set DataTable("Grade")
if Window("My App").Editbox("Hobby").exist(0) then Window("My App").Editbox("Hobby").Set DataTable("Hobby")
if Window("My App").Editbox("Writing Friend").exist(0) then Window("My App").Editbox("Writing Friend").Set DataTable("Writing Friend")
if Window("My App").Editbox("BFF").exist(0) then Window("My App").Editbox("BFF").Set DataTable("BFF")

当然,这个例子效率低下并且可以很容易地汇总(即你可以制作一个 UDF,然后从一个循环中调用它,从一个数组中读取字段名称......)但是,它应该演示这个简单的方法.

我同意@theblastone 你应该提供一些代码来帮助更好地了解你的情况。无论如何,我会尽力回答你的问题。以下是一个示例,您可以围绕它构建代码。我不确定标签如何出现在您的应用程序中,我假设每个标签都可以单独识别。

j = Datatable.localsheet.GetRowCount

For i = 1 to j
Datatable.LocalSheet.SetCurrentRow i

vout = trim(Datatable("Excel column name",dtlocalsheet))
'Not sure about the following line
vin = browser().page().Webtable().getcelldata(r,c)
If not trim(Ucase(vout))= trim(Ucase(vin)) Then
Datatable("Result",dtlocalsheet) = "Invalid Record"
Do Until trim(Ucase(vout))= trim(Ucase(vin))
i=i+1
If i > j Then
ExitAction  
End IF
Datatable.LocalSheet.SetCurrentRow I
Datatable("Result",dtlocalsheet) = "Invalid Record"
vout = trim(Datatable("Excel column name",dtlocalsheet))
Loop
End If