我正在尝试编写一个函数来识别具有以下标识属性的webelement:
问题是," class"的值随着不同的应用程序更新不断变化,因此无法用于识别。
现在,我可以选择使用absx / absy或x / y。 我相信x / y会更好。 它有多可靠?
答案 0 :(得分:1)
没办法!!你不应该使用任何坐标作为属性来找到一个元素! 它根本不可靠。此外,如果您尝试在具有不同分辨率的另一台计算机上运行该脚本,它可能也无法正常工作。
选择'innertext'&班级名称。如果类名不断变化,它是否有类似class1,class2 ..etc的模式。如果是,您可以使用正则表达式。最坏的情况是,您可以使用Ordinal identifiers
。
我绝不会考虑测试中的坐标!!
答案 1 :(得分:0)
如果可能,请避免使用坐标进行识别,因为这非常脆弱(可能会因任何微小变化而破坏测试)。显然abs_x
比x
更糟糕,因为除了页面中的元素位置之外,它还取决于浏览器的位置。
我会检查元素以查看是否有任何属性可以一致地识别它,它可能不是您列出的属性(例如title
,role
),如果可能的话,请使用它而不是位置。
答案 2 :(得分:0)
实际上,使用坐标abs_x和abs_y总是不可靠的!对它们进行硬编码始终是不可靠的,但是正确动态地正确使用它们是100%可靠的。
以识别对象的唯一方法是通过其相对于可以识别的另一个对象的位置进行识别。使用对象存储库,这是通过内置的“可视关系标识符”完成的。在程序描述中,使用abs_x和/或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