如何使用 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>
- 在前端,我看到整个单元格是 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
我只需要点击一个特定的单元格 (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>
- 在前端,我看到整个单元格是 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