TDLR:中心问题是:
确实,对于IE,Web测试对象的.Object方法和所有“子方法”都直接提供对原始DOM对象的访问,而对于Chrome和FireFox,UFT不会返回原始DOM对象实例,但克隆,副本或其他一些代表性实例?
详细信息:与IE结合使用的回放步骤,并且根据文档应与所有受支持的浏览器一起使用的回放步骤,由于没有充分的理由而无法与Chrome和Firefox结合使用。
分析表明,这是由UFT中的意外行为或错误引起的。
因此,我以一般的方式描述问题。 (对不起,还没有SSCE。)
特别是:
如果我在测试对象的UFT级别上使用T T.Object.parentNode引用父元素,然后在其中调用.childNodes以确定父元素的直接子元素,则适用以下条件:
预期:childNodes提供的列表在其他可能的实例中还包含实例T.Object。
实际:仅当IE是DOM所在的浏览器时,childNodes提供的列表才包含T.Object(以及其他可能的子元素)。如果使用Chrome或Firefox,则T.Object.parentNode.childNodes提供的列表包含一个元素,该元素表示与T.Object.parentNode完全相同的DOM元素,但它不是同一对象实例,即没有对象实例由childNodes提供的列表中的E,其UFT VBScript表达式“ E是T.Object.parentNode”的计算结果为true。
在JavaScript级别上,可以证明始终满足“ A.parentNode.childNodes返回包含对象实例A的列表”的假设(其中A是带有子元素的任何元素(根除外))。但是,在UFT级别上,可以理解该假设仅适用于IE,不适用于Chrome或Firefox。
但是UFT的文档声称可以通过.object直接访问本机DOM对象,由此我们得出结论,必须直接传递此类DOM对象的方法的调用和返回值。
相反,对于Chrome和Firefox,UFT似乎具有一种机制,例如,列表(如childNodes提供的NodeList)不会作为函数结果不变地传递,但是会克隆列表元素或类似的东西,因此提供的不是本机实例,而是仅副本/代表/克隆。
这是真的吗?然后,无论是在文档中还是在UFT的Chrome和Firefox支持中,我都认为这是一个错误。有解决方法吗?
由于各种原因,我现在刚刚开始将Chrome和Firefox作为目标浏览器,并且由于上述情况,使用的中央通用代码中断了,这对我来说是非常出乎意料的,因此我不知道任何通用的解决方法,因此我将需要针对每种受影响的用途开发针对特定案例的单独解决方法,实际上我有数百种。
有什么建议吗?
[TDLR:中心问题是:对于IE,Web测试对象的.Object方法和所有“子方法”是否直接提供了对原始DOM对象的访问权限,而对于Chrome和...。 >
确实,在IE中,UFT通过.Object
属性公开了IE使用的实际COM对象。对于所有其他浏览器(Firefox,Chrome,Edge,Mobile),UFT也会创建一个包装对象,该对象将调用转发到浏览器的本机DOM元素(因为这些浏览器不会将其DOM公开为COM对象)。
如果我正确理解了您的问题,则取决于COM的object identity规则。在以前的(专业的)生活中,我从事UFT的COM包装器的工作,我不记得我们将其视为用例。您可能会为UFT打开一个缺陷,我不确定修复此缺陷的可行性如何,他们更有可能会说这是一个限制并更新了文档。