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 is 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作为目标浏览器,并且由于上述情况,使用的中央通用代码中断了,这对我来说是出乎意料的,而且我不知道任何通用的解决方法,因此我必须针对每种受影响的用途开发针对特定案例的单独解决方法,我实际上有数百种。
有什么建议吗?