QTP/UFT技术咨询:如何用描述性编程实现视频自动循环点赞?
如何用QTP/UFT描述性编程实现跨页面/浏览器的批量视频点赞操作?
我需要实现这样的操作:打开一个类YouTube的视频主网站,点击其中一个视频并点击该视频的“点赞”按钮,之后返回主网站,自动对下一个视频执行相同操作。请问能否通过QTP/UFT的描述性编程实现该需求?虽然“点赞”操作一致,但操作所在的浏览器和页面不同,我对此不确定,特向您求助!
我录制的脚本如下:
步骤1. 第一个视频:Browser("Medien").Page("All Medien").Link("Video 1").Click Browser("Video 1").Page("Video 1").Button("Like").Click步骤2. 返回主页并点击第二个视频:
Browser("Video 1").Page("Video 1").Link("back").Click Browser("Medien").Page("All Medien").Link("Video 2").Click Browser("Video 2").Page("Video 2").Button("Like").Click以此类推...
我尝试了三种方法,但都无效:
Browser("micclass:=Browser").Page("micclass:=Page").Button("Like").Click或
Browser("name:="& parameter).Page("title:="& parameter).Button ("Like").Click我还尝试通过以下方法获取当前浏览器和页面,但UFT/QTP无法找到目标:
Browser("creationtime:=0").Page("creationtime:=0").Button("Like").Click Set oBrw=Description.Create oBrw("micclass").value="Browser"
当然可以用描述性编程实现这个需求!你之前的尝试没成功,主要是因为没有准确区分不同状态的浏览器窗口,也没有合理构建循环遍历视频的逻辑。下面给你一套可行的方案:
核心思路
- 先在主页定位所有视频链接,把它们存到一个集合里
- 循环遍历每个视频链接:
- 点击视频打开新窗口/标签页
- 定位当前活跃的视频页面浏览器,找到点赞按钮并点击
- 返回主页(或关闭视频窗口),回到主页浏览器继续下一个视频
具体代码实现
' 1. 初始化主页浏览器和页面的描述性对象 Set oHomeBrowser = Description.Create oHomeBrowser("micclass").Value = "Browser" oHomeBrowser("name").Value = "Medien" ' 匹配你的主页浏览器名称 Set oHomePage = Description.Create oHomePage("micclass").Value = "Page" oHomePage("title").Value = "All Medien" ' 匹配你的主页页面标题 ' 2. 获取主页上所有视频链接的集合 Set oVideoLinks = Browser(oHomeBrowser).Page(oHomePage).ChildObjects(Description.Create()) oVideoLinks("micclass").Value = "Link" ' 可以根据视频链接的共同属性过滤,比如name包含"Video" oVideoLinks("name").Value = "Video.*" ' 正则匹配所有名称带Video的链接 ' 3. 循环遍历每个视频链接 For i = 0 To oVideoLinks.Count - 1 ' 点击第i个视频链接 oVideoLinks(i).Click Wait 2 ' 等待视频页面加载,时间根据实际情况调整 ' 4. 定位当前活跃的视频浏览器窗口(刚打开的那个) Set oVideoBrowser = Description.Create oVideoBrowser("micclass").Value = "Browser" oVideoBrowser("active").Value = True ' 定位当前活跃的浏览器 ' 5. 定位视频页面的点赞按钮并点击 Set oVideoPage = Description.Create oVideoPage("micclass").Value = "Page" ' 如果视频页面标题有规律,也可以加title属性过滤,比如包含视频名称 ' oVideoPage("title").Value = "Video.*" Set oLikeBtn = Description.Create oLikeBtn("micclass").Value = "Button" oLikeBtn("name").Value = "Like" ' 匹配点赞按钮的名称 Browser(oVideoBrowser).Page(oVideoPage).Button(oLikeBtn).Click Wait 1 ' 等待点赞操作完成 ' 6. 返回主页:点击页面上的back链接,或者关闭当前浏览器窗口 ' 方法一:点击页面上的back链接 Browser(oVideoBrowser).Page(oVideoPage).Link("name:=back").Click ' 方法二:如果是新窗口,直接关闭 ' Browser(oVideoBrowser).Close Wait 2 ' 等待回到主页 ' 重新获取视频链接集合(防止DOM变化) Set oVideoLinks = Browser(oHomeBrowser).Page(oHomePage).ChildObjects(Description.Create()) oVideoLinks("micclass").Value = "Link" oVideoLinks("name").Value = "Video.*" Next ' 释放对象 Set oHomeBrowser = Nothing Set oHomePage = Nothing Set oVideoLinks = Nothing Set oVideoBrowser = Nothing Set oVideoPage = Nothing Set oLikeBtn = Nothing
对你之前尝试的问题解析
Browser("micclass:=Browser").Page("micclass:=Page").Button("Like").Click:这个定位太宽泛,UFT会匹配第一个找到的浏览器和页面,不一定是当前的视频页面,所以会失败。Browser("name:="& parameter).Page("title:="& parameter).Button ("Like").Click:如果你的parameter没有精准匹配当前视频浏览器的name和页面title,就会找不到元素,用active属性定位当前活跃窗口会更可靠。Browser("creationtime:=0").Page("creationtime:=0").Button("Like").Click:creationtime:=0指向的是第一个打开的浏览器窗口(也就是你的主页),而非刚打开的视频窗口,自然找不到视频页面的点赞按钮。
额外提示
- 调整
Wait的时间,根据你的页面加载速度来设置,避免因为页面未加载完成导致元素定位失败。 - 如果视频是在新标签页而非新窗口打开,
active属性依然有效,UFT会识别当前活跃的标签页对应的浏览器对象。 - 可以给元素描述添加更多属性(比如
html tag、innertext)来提高定位的准确性,避免误匹配。
内容的提问来源于stack exchange,提问作者Stella 123
相关产品推荐
相关产品推荐

