【问题标题】:Object is identified only if it is visible with eye on browser window - UFT仅当对象在浏览器窗口上可见时才被识别 - UFT
【发布时间】:2017-12-08 01:07:34
【问题描述】:

我们正在使用 UFT/QTP 自动化 Web 应用程序。问题是 UFT 仅适用于在浏览器窗口部分中看到的那些 Web 对象。如果任何对象/元素位于页面底部并且需要在窗口中向下滚动才能看到。 UFT 无法处理这些对象。我们已经编写了向下翻页的代码来处理这些对象。它工作正常。但是有时当页面很长并且我们不知道该对象在页面中间或页面底部等位置的位置时。在这种情况下,只有向下翻页不起作用。有什么方法可以根据对象属性使对象可见?这意味着我们可以将对象带到窗口前面。

【问题讨论】:

    标签: web qtp hp-uft


    【解决方案1】:

    如果您的滚动翻页或翻页代码已经在工作,为什么不使用循环...

    Set obj = Browser(..).page(..).Link(..) ' use your object
    
    While obj.getROProperty("visible") = False
        'Scroll code
    Wend
    

    【讨论】:

    • 这是我们实现的最终解决方案,但不是健壮且非常有效的解决方案。有时由于页面向下,它会将对象带到页面的边框。在这种情况下,它的行为是动态的喜欢有时或有时不工作..这就是为什么,我一直在寻找可以直接作用于对象以使其可见的东西..但似乎不可能..
    【解决方案2】:

    UFT 不依赖于对象是否在视图中。如果对象被滚动出视图,UFT 将在对其执行任何操作之前自动将其滚动到视图中(例如Click)。

    您所描述的行为可能是由于网站在滚动页面时将对象动态添加到DOM 造成的。如果是这种情况,那么 UFT 无法知道什么会导致对象被添加到 DOM 中,而您必须滚动以查看您一直在做的事情。

    很抱歉我不能带来更好的消息:(

    【讨论】:

    • 你是对的 .. UFT 会自动执行此操作 .. 但这是不幸的情况 .. :(
    • 如果使用视觉扫描对象而不是使用对象属性,也可能会出现此问题...
    【解决方案3】:

    我曾经遇到过类似的问题。对我来说,将 Replaytype 设置更改为鼠标事件很有效。 尝试在执行任何操作(例如单击对象)之前将 ReplayType 更改为 Mouse 事件,如下所示:

    Settings.WebPackage("ReplayType") = 2    'Changes to mouse/device events mode
    'Perform the Click Operation here
    Settings.WebPackage("ReplayType") = 1     'Change back to Browser events mode
    

    有关 ReplayType 的其他信息:

    这个设置允许我们改变鼠标操作的方式 发生在 AUT。它可以是浏览器事件或鼠标事件。 Browser 事件类似于使用 Browser 方法的 DOM 事件, 当鼠标事件模拟实际用户操作时 键盘或鼠标。例如,如果您在单击按钮时 ReplayType 是 Mouse,你会注意到鼠标指针移动到 按钮的位置并触发事件,但在浏览器事件的情况下 没有。

    replaytype 的值可以是:

    1 - 事件

    2 - 鼠标

    默认情况下它设置为事件,即 1

    【讨论】:

    • 我们已经在使用它.. 否则 UFT 根本无法在应用程序上运行。