如何使用 UFT/VBSCRIPT 单击 webtable 单元格

How to click on a webtable cell using UFT/VBSCRIPT

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

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

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

请指教。



更新#1 1

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

'值returns"dsfsdf sdfsdfdsf DOB: 1/01/2015 Member ID: 8587"

2 我检查了 chrome 中的单元格。我看到这个:

<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. 在前端,我看到整个单元格是 link,但在源代码中你只能看到一个元素是 link。我认为他们已经应用 css 使单元格成为 link。

我是否应该先转到单元格然后找到 link 然后单击它?我研究了一整天,但没有运气。请指教


更新#2

这是一个点网页。

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

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

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

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

如果我更改为项目(5),它什么也不做。诡异的。所以这个答案并不一致。我认为 UFT 混淆了页面的开发方式。

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

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

然后我使用了您发布的原始代码。它对所有行都按预期工作得很好。

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

我们也可以在此处将 "Link" 描述为 "a" 标记,这样 UFT 将查找 "a" 标记而不是 link texts/anchor 文本。

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

使用 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

更新二:

由于存在于 webtable 单元格中的 link 没有任何与之关联的文本,因此 UFT 无法使用 ChildItem 方法找到它。这个也可以通过webtable的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)

尝试下面的子程序。

注意:您应该知道要单击的对象的索引值。尝试使用 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