如何使用UFT / VBSCRIPT

时间:2017-10-27 16:05:13

标签: vbscript qtp hp-uft

我只需要点击特定的单元格(2,1)。我不确定如何点击该单元格。就我而言,它总是同一个单元格。

我有这个代码只读取单元格(2,1)中的值。之后,我该如何点击该单元格?整个单元格是一个链接。我不需要使用for循环来获取价值。我只需要直接点击那个单元格。

myvalue= Browser("aa").Page("aa").WebTable("tb").GetCellData(2,1)

请指教。

enter image description here

更新#1 1

myvalue= Browser("aa").Page("aa").WebTable("tb").GetCellData(2,1)

'值返回" dsfsdf sdfsdfdsf DOB:1/01/2015会员ID:8587"

2我用铬检查了细胞。我明白这一点:

<td class="name" rowspan="1">
                                            <a href="/id/5858"><span></span></a>
                                            <h3>
                                            dsfsdf sdfsdfdsf
                                            </h3>
                                            <table>
                                                <tbody><tr>
                                                    <td>DOB:</td>
                                                    <td>1/01/2015</td>
                                                </tr>
                                                <tr>
                                                    <td>Member ID:</td>
                                                    <td>8587</td>
                                                </tr>
                                            </tbody></table>
                                        </td>
  1. 在前端,我看到整个单元格是一个链接,但在源代码中,您只能看到一个元素是一个链接。我认为他们已经应用了css来将细胞作为一个链接。
  2. 我应该首先进入单元格,然后找到链接,然后单击它?我整天研究但没有运气。请指教。

    更新#2

    这是一个点网页。

    set rowObject = Browser("aa").Page("aa").WebTable("tb").Object.getElementsByTagName("tr").item(1) 
    

    如果我保留第(1)项,它会按预期点击第二行。索引0是标题。 index 1是第2行。

    如果我改为第(2)项,它什么都不做。

    如果我改为第(4)项,则点击第3行(索引2)。相反,它应该单击第5行(索引4)。

    如果我改为第(5)项,它什么都不做。奇怪的。所以这个答案并不是一贯的。我认为UFT在页面开发方面感到困惑。

    我接受了html源代码,然后在本地创建了一个html文件。将所有锚文本从空更改为某些文本:

                <a href="/id/5554"><span>id2</span></a>
    

    然后我使用了您发布的原始代码。对于所有行,它的工作正常。

    我会联系开发团队,看看他们是否可以添加锚文本,然后应用css来隐藏它。他们很可能不会做任何事情。

    我们也可以描述&#34; Link&#34;在这里&#34; a&#34;标签,所以UFT将寻找&#34; a&#34;标记而不是链接文本/锚文本。

    set objLink = Browser("aa").Page("aa").WebTable("tb").ChildItem(intRow, intCol, "Link",0)
    

2 个答案:

答案 0 :(得分:1)

使用webTable的 childitem 方法。

尝试类似:

Dim objLink, intRow, intCol
intRow = 2
intCol = 1
set objLink = Browser("aa").Page("aa").WebTable("tb").ChildItem(intRow, intCol, "Link",0)
if objLink.exists(3) then
    objLink.Click
end if

更新2:

由于webtable单元格内的链接没有任何与之关联的文本,因此UFT无法使用ChildItem方法找到它。这也可以使用网络表的ChildItemCount方法进行验证。因此,我们现在需要使用对象的本机方法,如下所示:

set rowObject = Browser("aa").Page("aa").WebTable("tb").Object.getElementsByTagName("tr").item(1)      'HERE item(1) means the 2nd item or 2nd row. It is a zero-based index, hence for 2nd row, we write index=1
set colObject = rowObject.getElementsByTagName("td").item(0)     'item(0) means 1st item or 1st column as it is a zero based index
Set collectionLinks = colObject.getElementsByTagName("a")        'getting a collection of all the links present inside cell(2,1)
collectionLinks.item(0).Click                                    'item(0) means the 1st link in the cell(2,1)

答案 1 :(得分:0)

尝试以下子程序。

注意:您应该知道要单击的对象的索引值。尝试使用Object Spy来了解项目的索引。如果设置了错误的索引,则可能无法单击所需的元素。

Sub ClickWebTableIndex(BrowserPropertyName, BrowserPropertyValue, PagePropertyName, PagePropertyValue, WebTablePropertyName, WebTablePropertyValue, ChildObjectClassName, ChildObjectPropertyName, ChildObjectPropertyValue, IndexValue)

    Set oBrowser = Description.Create()
    oBrowser("micclass").Value = "Browser"
    oBrowser(BrowserPropertyName).Value = BrowserPropertyValue

    Set oPage = Description.Create()
    oPage("micclass").Value = "Page"
    oPage(PagePropertyName).Value = PagePropertyValue

    Set oWebTable = Description.Create()
    oWebTable("micclass").Value = "WebTable"
    oWebTable(WebTablePropertyName).Value = WebTablePropertyValue

    Set childObject = Description.Create
    childObject("micclass").value = ChildObjectClassName
    childObject(ChildObjectPropertyName).value = ChildObjectPropertyValue

    Browser(oBrowser).Page(oPage).WebTable(oWebTable).ChildObjects(childObject)(IndexValue).FireEvent "OnClick"

End Sub