我想写一个函数来识别一个具有以下识别属性的Webelement。
问题是,"类 "的值会随着不同的应用程序更新而改变,所以它不能用于识别。
现在,我可以选择使用absxabsy或xy.我相信xy会更好。它的可靠性如何?
不可能! 你不应该使用任何坐标作为属性来查找一个元素! 它根本不可靠。另外,如果你尝试在另一台不同分辨率的机器上运行这个脚本,它可能不会工作得很好。
用'innertext'&类名。如果类名一直在变化,它是否有任何模式,如class1,class2 ...等等,如果有,你可以使用正则表达式。 最坏的情况,你可以使用 Ordinal identifiers
.
我绝不会考虑在我的测试中使用坐标!
如果可能的话,避免使用坐标来识别,因为这是非常脆弱的(可能会破坏任何微小的变化的测试)。很明显 abs_x
不如 x
因为它除了取决于元素在页面中的位置外,还取决于浏览器的位置。
我会检查该元素,看看是否有任何属性可以一致地识别它,它可能是你所列出的属性以外的其他属性(如 title
, role
),如果可能的话就用这个而不是位置。
其实,使用坐标abs_x和abs_y总是不可靠,这一点也不对!!!。硬编码它们总是不可靠的,但正确地动态使用它们是100%可靠的。
比如说,识别一个对象的唯一方法是通过它与另一个可以识别的对象的位置关系。使用Object Repository,可以通过内置的 "可视化关系标识符 "来实现。同样的功能--视觉关系标识--在程序化描述中的实现是通过abs_x和or abs_y坐标来完成的。
例如,如果你有一个可识别的对象,它的abs_y值与不可识别的对象相同(即它们一致在同一水平轴上或在同一轴上加减某个数字),找到可以用正常方式识别的对象,使用GetROProperty,得到它的abs_y坐标。然后,利用刚才得到的abs_y的值,定位另一个否则无法定位的对象。也就是说,可识别对象的abs_y坐标将是否则无法识别的对象的abs_y值。同样,这也正是 "可视化关系标识符 "的内置对象库功能。
举个例子。
sAbsY = Browser(...).Page(...).WebElement(...).GetROProperty("abs_y")
Browser(...).Page(...).WebElement(..., "abs_y:=" & sAbsY).Click