繁体   English   中英

如何根据应用程序屏幕上的标签使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工作表中选择那些相应的值,而忽略该excel工作表中的其他值。

例如

Excel具有以下值

姓名:南希(Nancy)成绩:8业余爱好:写作朋友:维罗妮卡(Veronica)BFF:卡伦(Karen)

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

名称:爱好:BFF:

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

这可能吗?

为什么不只是使用

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

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

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

好的,这就是我要做的。

首先...我将对象收集到对象存储库中。 我会将每个可能的编辑框创建/记录为一个单独的对象(在应用程序本身的对象内),确保每个对象都可以通过名称唯一标识...(如果编辑框控件本身不是唯一地命名为场景,QTP可以链接到它们旁边的字幕...)。 另外,如果应用程序仅隐藏编辑框,则确保Visible = True是可识别的属性之一,以便在Visible = False时找不到它们。

一旦每个对象都在“或”中,则只需检查它们是否存在即可。

'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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM